我已经使用aiosmtpd安装了本地SMTP服务器,在设置适当的DNS记录后,我在这里接收电子邮件:
mail.mydomain.com A 1 minute 1.2.3.4
mydomain.com MX 1 minute 10 mail.mydomain.com.仅在命令行中运行aiosmtpd就足以接收电子邮件:
python.exe -m smtpd -c DebuggingServer -n 0.0.0.0:25
现在的问题是发送电子邮件,不管出于什么原因,这些邮件似乎不起作用。我以这种方式创造了SPF的记录:
mydomain.com TXT 1 minute "v=spf1 a mx include: mydomain.com ~all"我也试过这样做:
mydomain.com TXT 1 minute "v=spf1 ip4:1.2.3.4 ~all"在SMTP服务器运行时,我使用此代码发送电子邮件:
import smtplib
sender = 'from@mydomain.com'
receivers = ['to@mydomain.com']
message = """From: From Person <from@mydomain.com>
To: To Person <to@mydomain.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('127.0.0.1')
smtpObj.sendmail(sender, receivers, message)
print ("Successfully sent email")
except smtplib.SMTPException:
print ("Error: unable to send email")我试图添加我的@gmail.com电子邮件地址作为目的地,但我没有得到任何东西。
我可以看到电子邮件被发送到SMTP服务器,但我没有收到电子邮件:
---------- MESSAGE FOLLOWS ----------
b'From: From Person <from@mydomain.com>'
b'To: To Person <to@mydomain.com>'
b'Subject: SMTP e-mail test'
b'X-Peer: 127.0.0.1'
b''
b'This is a test e-mail message.'
------------ END MESSAGE ------------知道我做错什么了吗?
发布于 2022-07-29 14:55:34
通常,电子邮件从连接到邮件传输代理(MTA)的电子邮件客户端在互联网上发送,后者将电子邮件转发给邮件传递代理(MDAs),后者存储电子邮件供收件人阅读。也就是说,GMail既可以为用户提供MTA,也可以将GMail用户的电子邮件转发到远程邮件服务器,也可以作为接收预定发送到用户邮箱的邮件的MDA。电子邮件使用SMTP协议在服务器之间传输,aiosmtpd是SMTP协议服务器端的实现,而内置smtplib模块是客户端的实现。
当您在其默认配置中运行aiosmtpd时,它只是一个愚蠢的SMTP服务器,接收电子邮件并将其吐出终端,而不中继或存储它们。也就是说,aiosmtpd本身并不是MTA或MDA,除非您编写实现电子邮件存储的代码(例如使用“邮箱”内置模块),或者编写实现邮件中继的代码。
当您使用SMTP客户端smtplib.SMTP()连接到127.0.0.1时,您只需连接到aiosmtpd,它不会对您给它的电子邮件做任何有趣的事情(除非您添加了一些有趣的代码)。
如果您想向远程电子邮件提供者发送电子邮件,例如GMail,那么您需要将电子邮件提交到固定的MTA,或者您需要自己使用DNS查找实现中继机制。
如果希望自己实现中继机制,则需要查找收件人地址(例如
smtplib.SMTP连接到MX记录中指定的主机。但是,我不建议尝试这样做,因为有许多陷阱和案例需要考虑。例如,如果有多个MX记录或根本没有MX记录,该怎么办。此外,远程SMTP服务器可能没有响应,也可能使用4xx或5xx错误代码进行响应,在这种情况下,您需要采取适当的操作并在以后重试.。
https://stackoverflow.com/questions/73160671
复制相似问题