Python: 使用 smtplib 验证电子邮件

Python: using smtplib to verify emails

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

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

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() 中指定了我的邮件,但我尝试在那里登录,然后检查电子邮件,但没有得到任何结果,所以我退出了。为什么会这样?

您是否手动检查 mx

似乎25端口没有打开连接,找不到mx记录,所以returns手动检查aruanaestetik.com时no mx record exists的错误收到消息 no mx recorf found

我的答案不会有代码,我想描述一下过程,重点是错误处理。

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

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

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

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

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

无论出于何种原因,您的发件人地址都有可能被拒绝。使用为错误消息保留的空地址 <>

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

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