moe*_*evi 5 python email smtp smtplib
我尝试使用 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
Run Code Online (Sandbox Code Playgroud)
然后我在 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)
Run Code Online (Sandbox Code Playgroud)
我尝试了几个,除了一个之外的每个人我总是得到一个:
“[Errno 10051]尝试对无法访问的网络进行套接字操作”或
“[Errno 10060]连接尝试失败,因为连接方在一段时间后没有正确响应时间过长,或建立的连接失败,因为连接的主机未能响应”异常。
我在某处读到一些邮件服务器对您的 IP 进行反向查找,如果没有域则拒绝连接。他们是怎么做到的?
我还在某处读到,许多邮件服务器拒绝来自动态 IP 地址的传入邮件(显然我是 ISP 的私人客户)。他们如何检查 IP 地址是动态还是静态?
这些是大多数服务器似乎拒绝我的连接的原因吗?或者还有更多的事情吗?
嗯,你的问题正是这样的:
# Tried both port 465 and 587 (can't test port 25 since it's blocked by my ISP)
Run Code Online (Sandbox Code Playgroud)
Google 的 MX 服务器正在侦听端口 25。如果您的 ISP 不允许在此端口上进行传出连接,那么您将无法按照您尝试的方式发送 SMTP 消息。您应该与您的 ISP 解决这个问题。
关于拒绝邮件,像这样直接发送电子邮件确实会增加其被拒绝或标记为垃圾邮件的可能性。特别是如果您将“发件人”地址设置为与您的 IP 地址关联的域不匹配,或者您的 SMTP 客户端在其邮件中发送了不匹配的域EHLO,或者您的邮件内容看起来“垃圾邮件”。实际行为将根据每个 MX 服务器的配置方式而有所不同。