检查 Python 的 SMTP 服务器上是否存在电子邮件?

Check Email is exist on SMTP server in Python?

我创建了一个脚本,用于 验证电子邮件是否确实存在于 SMTP 服务器上 一切正常,但一些虚假电子邮件也发送响应 250 OK。我该如何处理这个问题。请帮助我。

try:
            domain_name = addressToVerify['Email'].split('@')[1]

            records = dns.resolver.query(domain_name, 'MX')
            mxRecord = records[0].exchange
            mxRecord = str(mxRecord)
            host = socket.gethostname()
            server = smtplib.SMTP()
            server.set_debuglevel(0)
            server.connect(mxRecord)
            server.helo(host)
            server.mail('example@example.com')
            code, message = server.rcpt(str(addressToVerify['Email']))

            server.quit()

首先,电子邮件地址验证是电子邮件相关 RFC 中的“banned”功能(好吧,它仍然存在,但几乎没有人在生产场景中启用它),因为原因很明显:它变成了它从未打算用于的东西,成为垃圾邮件发送者的天堂。但是,它只能用于本地帐户。因为这就是电子邮件传递的方式。概念的 SMTP 部分仅用于发送,用于传递。它是一个继电器。 SMTP 服务器不知道收件人,因为它只是试图将邮件传递到下一跳 - 当然,它可以是本地服务器,但也可以是任何远程服务器。它使用 DNS MX 记录从电子邮件地址域部分获取另一方 SMTP 的地址。如果找到,它会连接到其他服务器并传递消息。如果是本地邮箱,它会联系管理实际邮箱的本地投递代理。那个人会知道邮箱是否存在。如果没有,它将根据其配置做出反应:它可能会或可能不会重播任何警告。但由于互联网的性质,所有这些都是异步发生的。

但是,如您所见,SMTP 服务器本身无法判断收件人邮箱是否确实存在 - 除了本地地址。您可以自己验证 MX 记录,但这会告诉您是否有 SMTP 服务器注册到该电子邮件域 - 并检查其在网络上的可用性。而已。 但您实际上不能指望 VRFY 有效

旁注:本地代理不直接绑定到任何邮箱协议。您可以拥有一个没有邮箱协议服务器的邮箱 运行。意义不大,但技术上不需要。

当然,对于任何操作系统,您可以获得的大多数电子邮件服务都是包含 SMTP、递送代理和 POP3 或 IMAP/MAPI 服务器的复杂服务。