【问题标题】:how to find the smtp server of an email address python如何找到电子邮件地址python的smtp服务器
【发布时间】:2021-08-31 14:21:26
【问题描述】:

所以我有一个电子邮件地址,例如:example@unknowndomain.com

我想检查此电子邮件连接到的 smtp 主机是什么

有什么办法可以在 python 中做到这一点?

最后我想检查电子邮件的 smtp 主机是否与我喜欢的某个主机匹配:

email = example@unknowndomain.com
smtp_host = smtp.smtphost.com
email_smtp_host =smtp.emailsmtphost.com

if email_smtp_host == smtp_host:
   True
else:
    False

我尝试浏览 smtplib,但找不到任何有用的东西

【问题讨论】:

  • 通常是@之后的部分(我认为)。所以就做email.split('@')[1]
  • @Haveaniceday 实际上不是,我在 Thunderbird 上检查了它,它与电子邮件的域不同
  • 好的,我只是想提一下,因为它以前对我有用:)。
  • @Haveaniceday np 感谢您的想法
  • "我想检查这封电子邮件连接到的 smtp 主机是什么" 为什么?您需要测试电子邮件的可达性吗?如果是这样,除了实际发送一封包含临时 URL 的电子邮件并要求接收者点击它之外,没有其他解决方案。这将在完成此操作时完全验证电子邮件地址是否有效。即使您通过 Edo Akse 回复获得了 SMTP 主机,它并不能真正得出有关电子邮件地址的任何信息。主机可能已关闭,或配置错误并拒绝电子邮件等。此外,您对代码中名称的测试也涉及到,给定的主机可以有多个名称。

标签: python email dns smtp


【解决方案1】:

这不是您可以简单地通过代码获得的东西。 SMTP 服务器是外发邮件服务器,这取决于电子邮件提供商。这没有标准,也不会像传入电子邮件的 MX 记录那样暴露。

可能能够找到 SMTP 服务器列表,例如 this one,但您仍然需要知道电子邮件提供商是谁。您也许可以通过查看域的MX records 来解决这个问题,然后根据它选择 SMTP 服务器。

示例: 需要使用pip install dnspython 安装非默认dnspython 模块

import dns.resolver
domain = 'gmail.com'
for x in dns.resolver.resolve(domain, 'MX'):
    print(x.to_text())

这应该打印出域 gmail.com 的 MX 记录,然后您必须检查包含所有电子邮件提供商的 SMTP 服务器的某个数据库(链接到他们的 MX 记录)

正如我所说,这不是一件容易完成的事情,需要相当多的基础工作/腿部工作......

【讨论】:

  • 如果我试图捕获传入的 IMAP 主机,那可以通过代码实现吗?
  • 这取决于您是否有权访问电子邮件标题(我对您拥有的信息并不完全清楚)。看看this answer,然后你感兴趣的标题是Received。向自己的 Gmail 地址发送一封电子邮件,然后从 Google 关注 this article 以查看标题,并查看 Received 的外观。如果您可以访问电子邮件标头,那么一些逻辑应该能够找出 SMTP 服务器...
  • 另外,IMAP 主机本身用于发送电子邮件。您仍然需要一种方法将其与传入的 SMTP 服务器联系起来。请注意,如果您尝试查找 SMTP 服务器的电子邮件地址正在运行他自己的电子邮件服务器,那么整个练习将变得毫无意义,这实际上比您想象的更常见。在不访问上述电子邮件标头的情况下为这些获取 SMTP 服务器是徒劳的
  • (如果MX 查询失败,您必须重试AAAAA 记录,因为直接记录有效,而不是缺少MX 记录)
猜你喜欢
  • 2013-05-24
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 2012-07-15
  • 1970-01-01
  • 2017-06-30
相关资源
最近更新 更多