【发布时间】:2022-01-20 06:40:42
【问题描述】:
老实说,我认为我在理解 SMTP 的工作原理方面存在根本性的差距。我似乎无法很好地解释幕后发生的事情,我认为这使我无法做我想做的事情。
为了解释,我正在尝试设置一个应用程序,该应用程序通过连接到 SMTP 服务器向用户发送通知。很公平。我想,由于我使用自己的域,我配置了 SPF/DKIM/DMARC,我可以为我设置应用程序的主机添加 MX 记录(我的 SPF 记录有 mx 关键字来授权任何主机在我的 MX 记录中发送/接收邮件)。然后,我可以让同一台主机运行一个超级轻量级的 SMTP 服务器,它可以接受来自应用程序的邮件,并将它们发送给收件人。
最关键的是,我希望这个服务器基本上只在本地主机上运行,以便只有这个应用程序可以通过它连接和发送邮件,但它不能真正“接收”发送到的邮件我的域(我已将此应用服务器的 MX 优先级设置得很低(嗯,一个很高的数字))。我想,因为我正在运行自己的 SMTP 服务器,所以我不需要对其进行身份验证(它在 localhost 上运行),只需接收任何邮件并将其发送到收件人域即可。
当向收件人域发送邮件时... 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 -n
B 航站楼:
$ 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!
.
QUIT
SMTP 服务器通常如何在彼此之间发送邮件?他们每个人都可以登录到彼此的 SMTP 服务器进行身份验证吗?既然我没有这样做,这是个问题吗?我可以在 localhost 上运行一个 SMTP 服务器并让它发送 邮件到网络之外而不接收 邮件(无回复服务)吗?有什么明显的东西我只是在这里遗漏了可以解决我所有的问题吗?
谢谢
【问题讨论】:
-
如果您只想发送电子邮件,请使用第三方事务性电子邮件服务,如 Amazon SES 或类似服务。