如何使用smtplib验证Python中的电子邮件地址

Ert*_*des 7 python email email-validation smtplib

我一直在尝试验证用户在我的程序中输入的电子邮件地址.我目前的代码是:

server = smtplib.SMTP()
server.connect()
server.set_debuglevel(True)
try:
    server.verify(email)
except Exception:
    return False
finally:
    server.quit()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我得到:

ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
Run Code Online (Sandbox Code Playgroud)

所以我要问的是如何使用smtp模块验证电子邮件地址?我想检查电子邮件地址是否确实存在.

ver*_*his 9

这是验证电子邮件的简单方法.这是来自此链接的最低限度修改的代码.第一部分将检查电子邮件地址是否格式正确,第二部分将使用该地址ping SMTP服务器,并查看它是否获得成功代码(250).话虽这么说,这不是故障安全 - 取决于如何设置这有时,每个电子邮件将被返回为有效.所以你仍然应该发送一封验证邮件.

email_address = 'example@example.com'

#Step 1: Check email
#Check using Regex that an email meets minimum requirements, throw an error if not
addressToVerify = email_address
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)

if match == None:
    print('Bad Syntax in ' + addressToVerify)
    raise ValueError('Bad Syntax')

#Step 2: Getting MX record
#Pull domain name from email address
domain_name = email_address.split('@')[1]

#get the MX record for the domain
records = dns.resolver.query(domain_name, 'MX')
mxRecord = records[0].exchange
mxRecord = str(mxRecord)

#Step 3: ping email server
#check if the email address exists

# Get local server hostname
host = socket.gethostname()

# SMTP lib setup (use debug level for full output)
server = smtplib.SMTP()
server.set_debuglevel(0)

# SMTP Conversation
server.connect(mxRecord)
server.helo(host)
server.mail('me@domain.com')
code, message = server.rcpt(str(addressToVerify))
server.quit()

# Assume 250 as Success
if code == 250:
    print('Y')
else:
    print('N')
Run Code Online (Sandbox Code Playgroud)

  • 惊人的!谢谢@verybadatthis。还可以添加导入语句并调整解析器(无法使用 **dns.resolver**)?`进口重新; 从 dns 导入解析器;进口插座;导入 smtplib;` (2认同)
  • 这不适用于Gmail Id以外的电子邮件..如何查看其他电子邮件域,如hotmail yahoo等 (2认同)