我尝试在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地址是动态的还是静态的?
这些是大多数服务器似乎拒绝我的连接的原因吗?或者还有更多的东西吗?
答案 0 :(得分: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服务器的配置方式而有所不同。
答案 1 :(得分:0)
如上所述,直接发送到MX电子邮件将被Gmail的SMTP服务器阻止,并显示错误消息"421-4.7.0",但是许多其他SMTP服务器(如MailEnable)将允许Direct To MX。
以下网站包含.NET和PHP for Direct to MX代码的源代码http://www.directtomx.com - 您可以使用SUDS在python中使用web服务。