4

我尝试在 python 中玩耍以了解有关 smtp 协议的更多信息。更准确地说,我一直在尝试将邮件直接发送到主机的 smtp 服务器,但收效甚微。

例如,假设我想向 gmail.com 地址发送邮件,我查找 gmail.com 的 mx 记录:

>> nslookup -type=MX gmail.com
gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com

然后我在python中执行以下操作:

import smtplib
# Tried both port 465 and 587 (can't test port 25 since it's blocked by my ISP)
s = smtplib.SMTP("alt1.gmail-smtp-in.l.google.com", 587) 

我尝试了几个,但对于除一个之外的所有人,我总是得到:
“[Errno 10051] 尝试对无法访问的网络执行套接字操作”
“[Errno 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应时间,或建立连接失败,因为连接的主机未能响应”异常。

我在某处读到一些邮件服务器对您的 IP 进行反向查找,如果它没有域,则拒绝连接。他们是怎么做到的?
我还在某处读到,许多邮件服务器拒绝来自动态 IP 地址的传入邮件(我显然将其作为我的 ISP 的私人客户)。他们如何检查 IP 地址是动态的还是静态的?

这些是大多数服务器似乎拒绝我的连接的原因吗?或者还有更多的东西吗?

4

2 回答 2

4

嗯,你的问题是这样的:

# Tried both port 465 and 587 (can't test port 25 since it's blocked by my ISP)

Google 的 MX 服务器正在侦听端口 25。如果您的 ISP 不允许在此端口上进行传出连接,那么您将无法按照您尝试的方式发送 SMTP 消息。您应该通过您的 ISP 解决这个问题。

关于邮件的拒绝,像这样直接发送电子邮件确实会增加它被拒绝或标记为垃圾邮件的可能性。特别是如果您将“发件人”地址设置为与您的 IP 地址关联的域不匹配的地址,或者如果您的 SMTP 客户端在其EHLO邮件中发送的域不匹配,或者您的邮件内容看起来像“垃圾邮件”。实际行为将根据每个单独的 MX 服务器的配置方式而有所不同。

于 2011-09-04T04:18:40.867 回答
0

如上所述的 Direct to MX 电子邮件将被 Gmail 的 SMTP 服务器阻止,并显示错误消息“421-4.7.0”,但许多其他 SMTP 服务器,如 MailEnable,将允许 Direct To MX。

以下网站包含 .NET 的源代码和用于 Direct to MX 代码的 PHP,http://www.directtomx.com - 您可以使用SUDS在 python 中使用 Web 服务。

于 2015-09-29T09:56:04.677 回答