我一直在阅读 SMTP 规范和其他相关的 RFC(主要是8314&6409) 并且无法理解它,所以我希望你们能够帮助我。
我正在尝试设置一个 SMTP 服务器来测试事务性消息的传递,它在提交时按预期工作,也就是说,如果我们将邮件发件人指向它,它将成功请求身份验证,获取消息并存储它。所有这些都通过使用 TLS 的端口 587 进行。
现在我想添加一个捕获所有邮件的机制,这样发送到 *@mydomain.com 的所有邮件都存储在同一个数据库中,所以我开始做一些研究。我发现,一旦你通过 SMTP 发送电子邮件,它也会通过 MTA 使用 SMTP 进行发送,这在规范中被称为“消息中继”。
据我了解,您需要监听两个端口,587 用于“消息提交”(需要身份验证,检查发送者是否在您的服务器上),端口 25 用于“消息中继”(无需身份验证,检查接收者是否在您的服务器上)。由于底层服务器框架的限制,将不支持 STARTTLS,仅支持隐式 TLS,因此没有端口 465。
所以,问题是我理解得对吗,应该有两个具有不同用途的监听端口?
还有一个额外问题:当端口可互换时,服务器如何协商身份验证(例如在 CPanel 上,您可以使用 465 或 25 进行提交,唯一的区别是每个端口都支持 TLS;但他们也通过端口 25 接收传入邮件)?
值得注意的是服务器的目的不是发送任何消息,而只是接收消息从 web 应用程序(例如,测试其密码重置邮件是否有效)或其他邮件服务器/MTA(如 Mailinator,使用通配符 MX 记录,以测试传入消息/回复)。
提前致谢!
答案1
端口 25 上的 SMTP 一直是 MTA 到 MTA 的连接。它最初非常开放,因此您的组织可以接收来自任何其他组织的电子邮件,而无需提前安排身份验证。
在 PC 上 MUA 的早期,他们还会通过 SMTP 将邮件发送到其组织的 MTA 的 25 号端口,但这会导致垃圾邮件发送者滥用“开放中继”的问题。因此,端口 587 被定义为 MUA 向其组织的 MTA 提交电子邮件时使用的新端口,这样端口 587 就可以要求进行身份验证以阻止垃圾邮件发送者。而且,正如您所指出的,进入 25 号端口的任何内容都必须是有效的本地用户,否则将被拒绝,这同样是为了避免滥用。
因此,一般来说,如果您需要您的 MTA 接收来自其他 MTA 的邮件,则需要打开端口 25,如果您需要您的邮件服务器接收来自在其他主机上运行的 MUA 的邮件,则需要打开端口 587(需要身份验证)。