2017-02-09 64 views
0

我尝试验证的电子邮件和我有一些困难:的Python:使用到的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('[email protected]') 
    code, message = server.rcpt(str(addressToVerify)) 
    server.quit() 

也只说明了我的邮件在server.mail(),但我尝试登录那里和检查电子邮件后,却没有得到任何结果,所以我登出。为什么会发生?

回答

1

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

的电子邮件地址是形式[email protected]

的要检查域的一部分,你必须从DNS获得的MX记录。如果(并且只有)没有MX,则应该使用A记录。不过,我认为这种情况是错误配置的邮件系统。

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

通常有多个MX记录。他们有一个数字优先级。数字越小=优先级越高。邮件始终从较高的MX号码到较低的MX号码。

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

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

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

最后一点:如果你不打算真正发送邮件,请在退出前执行SMTP RSET。

+0

感谢您的解释。但是“A记录”是什么? –

+0

而且有什么方法可以用'smtplib.SMTPServerDisconnected:连接意外关闭'“打”? –

+0

@PetrPetrov“A”记录是一种将名称映射到IP ** A **地址的DNS记录,更准确地说是IPv4地址。相应的IPv6“A”记录被命名为“AAAA”。 [https://en.wikipedia.org/wiki/List_of_DNS_record_types] – VPfB

1

您是否手动检查mx

好像端口25是不开放的连接,并没有MX记录可寻,所以它返回一个做手工检查时no mx record exists的错误aruanaestetik.com一个得到消息no mx recorf found

+0

不,我使用'dns.resolver.query(domain,'MX')'来做到这一点。你能解释一下,如果域名包含很多'mx',我是否可以检查每封电子邮件? –

+0

dns.resolver.query(domain,'MX')返回当你没有找到mx和/或关闭p25时你询问的错误,是的,你可以检查每一个电子邮件,但只有一个可能允许登录时,你尝试发送 – minime