【发布时间】:2018-04-26 00:13:12
【问题描述】:
我需要验证是否存在与在域名的 DNS 区域/记录中找到的 MX 记录相关的收件箱。在我使用dns.resolver.query(domain, 'MX') 检索所有 MX 后,我根据优先级进行排序,并使用以下函数循环并一一测试它们是否处于活动状态。获得所有 MX 后,我将它们一一传递给 check_mailbox()。 mx_record 是具有 MX 值 exmp 的变量。 mx.something.com。第二个参数mail 变量是我正在测试的实际电子邮件。
我目前的功能:
def check_mailbox(mx_record, mail):
code = ""
try:
server = smtplib.SMTP(timeout=300)
server.set_debuglevel(0) # 1 for all data show
server.connect(mx_record['mx']) # Starting the communication
server.helo(server.local_hostname)
server.mail("from@address.sample")
code, message = server.rcpt(str(mail)) # Test the mailbox
server.quit()
except Exception as e:
print(str(e))
code = "error"
finally:
if code == 250 or code == 251:
return {'code': code, 'message': message}
else:
return False
正如我所说,在我当前的功能中,我单独测试了所有 MX。当然,根据网络,它可能会有一些延迟。
- 我想知道是否有更快的方法可以执行此检查?
- 还有其他(完全不同的)方法可以执行此验证吗?
- 如果我每次检查后不执行 server.quit() 会更好
但是打开它,保持打开状态,然后在所有检查完成后关闭它?
提前谢谢你。
您需要的任何其他信息都可以问我。在我进入这个阶段之前,我有一个这样的逻辑跟进: run() -> check(email) -> validator() -> checkEmailStructure() -> checkDomainAlive() -> checkHasMXs() -> 循环到 oder -> 使用 check_mailbox() 循环
这样我可以确定结构是否错误,结束验证。如果,域是死路验证。并且仅当结构 OK、域 OK 并且具有 MX 时才循环检查。同样在最后一个循环中,如果其中一个 MX 返回 250 或 251,我将停止测试,因为至少有一个有效!我按优先级排序。
欢迎提出任何建议!这里需要优化和保证目标。
【问题讨论】:
-
为邮箱测试 所有 个 MX 服务器有什么意义?它们都应该代表 一个 逻辑邮件服务器,并且都应该具有相同的邮箱集。因此,只有在第一个连接失败时,您才应该继续使用辅助服务器。
-
我忘了说。如果一个返回 250 或 251,我会停止 :) 我刚刚更新。订购后我还会检查优先顺序,所以直到这里都很好
标签: python email networking dns mx-record