由于这些问题的答案,我的其他问题:1,2,3,以及其他人的这两个问题(及答案):一个,2 -我想我现在愿意回答我已经发布的问题,在我的拥有。
我将一一讨论这些问题:
是的,一般情况下,电子邮件的发送可以这样描述:
MX查找返回服务器的地址,这些地址接收发往指定域的电子邮件。
- 至于“为什么
smtp-relay.gmail.com
,smtp.gmail.com
,aspmx.l.google.com
不被返回host -t mx gmail.com
的命令?”。关于这一点的另一答案几乎涵盖了这一点。这里要掌握的要点是: - MX查找返回的服务器负责 接收 该域的电子邮件(在这种情况下为gmail)
- gmail文档中列出的服务器是用于邮件 发送的 (即gmail用户想要发送给其他gmail用户的邮件,否则将提交给这些服务器)
对于接收电子邮件(即MX查找返回的电子邮件)的服务器,不需要身份验证。
有几件事可以防止此类服务器被滥用:
- 许多ISP阻止到端口
25
(这是邮件接收服务器的默认端口)的出站连接,以防止此类“ 直接 ”邮件发送 - 接收服务器方面采取了许多措施,主要是为了防止垃圾邮件,但是结果也可能会阻止这种“ 直接 ”邮件发送(一些示例是:DNSBL-阻止列表IPs,DKIM —是一种电子邮件身份验证方法,旨在检测电子邮件中的伪造发件人地址(如果您没有自己的合法邮件服务器,则将他人的域用作
From
字段,这可能会使您受到DKIM的攻击) - 代码段还可以。由于ISP端的阻塞,很可能产生该错误。
- 至于“为什么
说了这么多,代码片段:
import smtplibfrom email.message import EmailMessagemessage = EmailMessage()message.set_content('Message content here')message['Subject'] = 'Your subject here'message['From'] = 'me@example.com'message['To'] = 'user@example.com'smtp_server = smtplib.SMTP('smtp.server.address:25')smtp_server.send_message(message)smtp_server.quit()会实际发送一封电子邮件(请参阅此问题,以获取真实示例,请参见实际示例),因为该
smtp.server.address:25服务器是合法服务器,并且在ISP和/或
smtp.server.address方面没有任何阻塞。



