Python:使用smtplib验证电子邮件

时间:2017-02-09 07:56:43

标签: python email email-validation smtplib

我尝试验证电子邮件,但我遇到了一些困难:

我经常会遇到一些错误,例如

dns.resolver.NoAnswer: The DNS response does not contain an answer to the question: siemens.ru. IN MX

这是什么意思?我无法查收电子邮件或其他邮件?或者我应该再试一次?

smtplib.SMTPServerDisconnected: Connection unexpectedly closed

有什么方法可以解决这个问题吗?它经常出现。

dns.resolver.NXDOMAIN: None of DNS query names exist: aruanaestetik.com., aruanaestetik.com.

如果我收到此错误,我应该跳过此域名的电子邮件,对吗?

当我尝试获取mxrecords时,有时它们的数量不止一个。我应该使用它来检查电子邮件,还是可以随机使用?

我使用下一个代码来做到这一点:

    resolver = dns.resolver.Resolver()
    resolver.timeout = 60
    resolver.lifetime = 60
    mx_records = resolver.query(dom, 'MX')
    mxRecord = str(mx_records[0].exchange)
    host = socket.gethostname()
    server = smtplib.SMTP()
    server.set_debuglevel(0)
    server.connect(mxRecord)
    server.helo(host)
    server.mail('me@domain.com')
    code, message = server.rcpt(str(addressToVerify))
    server.quit()

此外,我只在server.mail()中指定了我的邮件,但是我尝试登录后检查电子邮件,但是没有得到任何结果,所以我退出了。为什么会这样?

2 个答案:

答案 0 :(得分:1)

您是否手动核对mx

似乎端口25未打开连接并且找不到mx记录,因此在对aruanaestetik.com进行手动检查时返回no mx record exists的错误,获取消息no mx recorf found

答案 1 :(得分:1)

我的回答中没有代码,我想描述这个过程并专注于错误处理。

电子邮件地址的格式为user@domain.com

要检查域部分,您必须从DNS获取MX记录。如果(且仅当)没有MX,则应使用A记录。不过,我会把这种情况视为错误配置的邮件系统。

进行DNS查找时,可能会出现两组错误:临时错误(例如超时)和持续错误(例如NXDOMAIN)。在出现瞬态错误的情况下,应该稍后重复查找。

通常有多条MX记录。它们具有数字优先级。较小的数字=较高的优先级。邮件始终从较高的MX编号移动到较低的MX编号。

要检查地址的用户部分,您必须联系具有最高优先级的服务器。所有其他都是备份服务器,他们无法访问用户数据库是很常见的。他们只接受自己域名的所有邮件。

您的发件人地址很可能因任何原因被拒绝。使用为错误消息保留的空地址<>

同样,与SMTP服务器通信时存在两组错误。幸运的是,SMTP响应有一个3位数的代码。第一个数字是2表示成功,4表示暂时错误(稍后重试)和5表示永久故障。

最后一点:如果您不打算发送电子邮件,请在QUIT之前进行SMTP RSET。