Python:使用smtplib验证电子邮件

2024-09-29 22:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,我经常会犯一些错误

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

这是什么意思?还是我查不到?或者我应该再试一次?在

^{pr2}$

有办法解决这个问题吗?它经常出现。在

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


Tags: comhostserverdns电子邮件错误queryresolver
2条回答

我的答案中没有代码,我想描述一下过程,并着重介绍错误处理。在

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

要检查域部分,必须从DNS获取MX记录。如果(且仅当)没有MX,则应使用A记录。不过,我认为这是一个配置错误的邮件系统。在

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

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

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

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

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

最后要注意的是:如果你不打算真正发送电子邮件,那么在退出之前先做一个smtprset。在

您是否手动检查了mx?在

端口25似乎没有打开以进行连接,并且找不到mx记录,因此它在手动检查时返回错误no mx record existsaruanaesttik.com网站得到消息no mx recorf found

相关问题 更多 >

    热门问题