老实说,我认为我在理解SMTP是如何工作的方面有一个根本的差距。我似乎无法很好地解释幕后发生的事情,我认为这阻碍了我做我想做的事情。
为了解释,我正在尝试设置一个应用程序,它通过连接到SMTP服务器向用户发送通知。当然可以。我想,由于我正在使用我自己的域,我已经配置了SPF/DKIM/DMARC,我可以为我设置应用程序的主机添加一个MX记录(我的SPF记录有mx关键字来授权MX记录中的任何主机发送/接收邮件)。然后,我可以让同一主机运行一个超级轻量级SMTP服务器,它可以接收来自应用程序的邮件,并将它们发送给收件人。
几乎关键的是,我希望这台服务器基本上只在本地主机上运行,这样只有这个应用程序可以通过它连接和发送邮件,但是它不能真正“接收”发送到我的域的邮件(我已经将MX优先级设置得非常低(嗯,这个应用服务器的数量很高)。我想,因为我正在运行自己的SMTP服务器,所以我实际上不需要对它进行身份验证(它运行在本地主机上),只需接收任何邮件并将其发送到收件人域。
当发送到收件人域时..。SMTP服务器是否需要以用户身份验证gmail SMTP服务器,以便在那里发送邮件?这似乎很奇怪,因为它不是登录gmail发送邮件的用户,它是一个SMTP服务器,它在SPF内授权从我的域发送邮件(From地址也来自我的域)到应用服务器用户的电子邮件所基于的地方(在这个例子中,用户应该是some_user@gmail.com)。
我尝试使用python的aiosmtpd命令行和telnet将邮件从test@MY_DOMAIN.TLD发送到test@MY_DOMAIN.TLD,但它似乎并没有传递消息;我认为aiosmtpd会连接到我的域中的首选MX服务器(我的“真实的”MX)来传输消息,然后将其放入收件箱中。情况似乎并非如此,我也不知道为什么。
精确的复制步骤,其中example.com是我的域,终端运行在一个带有主机名的框上,主机名列在MX记录中。
A航站楼:
$ aiosmtpd -nB终点站:
$ telnet localhost 8025
EHLO <example.com>
MAIL FROM: test@example.com
RCPT TO: test@example.com
DATA
FROM: Application Notifications <test@example.com>
TO: User Name <test@example.com>
SUBJECT: App Notify Test
This is a test!
.
QUITSMTP服务器通常如何在彼此之间发送邮件?他们是否每个人都有一些登录到彼此的SMTP服务器来进行身份验证,因为我没有这样做,这是一个问题?我是否可以在本地主机上运行SMTP服务器,并让它在不接收邮件的情况下从网络发送邮件(无回复服务)?有什么明显的东西能解决我所有的问题吗?
谢谢
发布于 2022-02-05 07:42:03
所以,我发现这里缺少的是什么。
我需要运行SMTP服务器,是的,但我还需要编写代码来解析" to“域(收件人域),为收件人域的MX服务器执行DNS请求,然后使用smtplib客户端将邮件发送到收件人域。不需要身份验证将该消息转发给收件人服务器,只需要身份验证才能从给定的收件箱中读取或验证发件人以代表域发送(我相信自己和自己只发送邮件)。我可以这样做,同时也只能监听本地主机上的邮件,这样只有本地服务器可以使用本地SMTP服务器将邮件/电子邮件中继到收件人域。
此外,我不需要将我的外部IP作为MX服务器列出,因为它不接受域的邮件,只发送邮件。我确实需要一个SPF记录,尽管如此,它是一个授权的中继/发件人的电子邮件从我的领域。
发布于 2022-01-25 18:18:21
听起来您想要运行邮件传输代理(MTA),该代理将电子邮件中继到远程SMTP服务器。MTA通常充当SMTP服务器接收邮件,然后在将邮件中继到远程主机时充当SMTP客户端。
MTAs通常以两种不同的方式工作:(1)它们将通过身份验证的用户的消息中继到远程主机;(2)它们将接收来自远程主机的消息,并以某种方式存储它们。这两种模式的结合-- MTA将接受来自远程主机的消息并将它们转发到不同的远程主机--被称为打开中继,并且肯定会吸引垃圾邮件发送者并将您的服务器放在垃圾邮件黑名单上。
aiosmtpd不是MTA,也不是开箱即用的电子邮件中继--它只是一个SMTP服务器,它将接收消息,并对您要做的消息做任何事情。默认情况下,它什么也不做--也就是说,它将接收消息并将其丢弃。如果要在aiosmtpd中实现电子邮件中继,则需要实现MTA的SMTP客户端部分,例如通过实现实例化smtplib.SMTP以连接远程主机的aiosmtpd处理程序。
然而,如果你想要的只是一个电子邮件中继,那么你很可能根本不需要aiosmtpd -- postfix可能是一个更好的选择。
如果您需要实现邮件列表软件或根据来自照相机或扫描仪的电子邮件执行一些自动化任务,则aiosmtpd可以是一个很好的选择。
如果要在aiosmtpd中实现电子邮件中继,则需要确保软件和服务器都配置为不从外部internet中继未经身份验证的消息。
另见:Python aiosmtpd - what is missing for an Mail-Transfer-Agent (MTA)?
https://stackoverflow.com/questions/70781775
复制相似问题