← RFC Reference

RFC 6409 – 邮件消息提交

Internet Standard Core SMTP & Message Format Obsoletes RFC 4409 Published March 2026
ELI5: 想象一下在街道上的公共邮箱投递信件和把信件交给邮局柜台职员的区别。街道邮箱(端口25)是邮递员在邮局之间转运邮件的地方。柜台(端口587)是你作为客户提交信件的地方——你先出示身份证,职员检查一切是否妥当。RFC 6409为电子邮件定义了邮局柜台。

RFC 存在的原因

在电子邮件的早期,用户发送新消息和服务器中继来自另一台服务器的邮件之间没有区别。两者都使用端口 25,任何人都可以连接并发送。这导致了开放中继问题——垃圾邮件发送者利用任何会接受和转发邮件而不进行身份验证的服务器。

RFC 6409(最初是 1998 年的 RFC 2476,2006 年更新为 RFC 4409,2011 年最终确定为 6409)正式区分了消息提交和消息中继:

这种分离是现代电子邮件安全的基础。它支持发件人身份验证、策略执行以及阻止未经身份验证的中继同时仍然接受合法提交的能力。

工作原理

消息提交使用 RFC 5321 中定义的相同 SMTP 协议,但在行为、策略和端口号上有重要区别。

提交过程

  1. 客户端(MUA 或应用程序)连接到端口 587上的 MSA。
  2. 客户端发出 EHLO 并发现可用扩展。
  3. 客户端使用 STARTTLS 升级到 TLS(或根据 RFC 8314 通过端口 465 上的隐式 TLS 连接)。
  4. 客户端使用 AUTH(RFC 4954)进行身份验证——通常在 TLS 上使用 PLAIN 或 LOGIN。
  5. 客户端使用 MAIL FROM、RCPT TO 和 DATA 提交消息。
  6. MSA 验证消息,可能添加缺失的标头(Date、Message-ID),并将其排队以通过 MTA 基础设施进行传递。

提交与中继:并排比较

方面 提交(MSA,端口 587) 中继(MTA,端口 25)
目的 接受来自用户/应用的新消息 在服务器之间转移消息
身份验证 必需(SMTP AUTH) 不需要(服务器间信任)
加密 必需(STARTTLS 或隐式 TLS) 机会性(可用时使用 STARTTLS)
发件人验证 MSA 检查经过身份验证的用户是否有权使用 From 地址 MTA 检查 SPF、DKIM、DMARC
标头修复 MSA 可能添加缺失的 Date、Message-ID 和 MIME 标头 MTA 仅添加 Received 标头
谁连接 最终用户、应用程序、电子邮件服务 其他邮件服务器

SMTP 示例

端口 587 上的典型提交会话:

# 客户端连接到端口 587 S: 220 smtp.mailertogo.com ESMTP Submission C: EHLO app.example.com S: 250-smtp.mailertogo.com S: 250-STARTTLS S: 250-AUTH PLAIN LOGIN S: 250-SIZE 26214400 S: 250-8BITMIME S: 250 ENHANCEDSTATUSCODES # 先升级到 TLS C: STARTTLS S: 220 2.0.0 Ready to start TLS # TLS 握手在此发生,然后重新 EHLO C: EHLO app.example.com S: 250-smtp.mailertogo.com S: 250-AUTH PLAIN LOGIN S: 250-SIZE 26214400 S: 250-8BITMIME S: 250 ENHANCEDSTATUSCODES # 身份验证(Base64 编码的凭据) C: AUTH PLAIN AGFsaWNlQGV4YW1wbGUuY29tAHNlY3JldA== S: 235 2.7.0 Authentication successful # 现在提交消息 C: MAIL FROM:<notifications@example.com> S: 250 2.1.0 OK C: RCPT TO:<user@recipient.com> S: 250 2.1.5 OK C: DATA S: 354 Start mail input C: From: Example App <notifications@example.com> C: To: user@recipient.com C: Subject: Your order has shipped C: Date: Wed, 11 Mar 2026 14:00:00 +0000 C: Message-ID: <order-12345@example.com> C: C: Your order #12345 has been shipped and is on its way. C: . S: 250 2.0.0 OK, queued as abc123 C: QUIT S: 221 2.0.0 Bye

关键技术细节

身份验证是必需的

RFC 6409 规定 MSA 应该要求身份验证,并且不能接受来自未经身份验证的客户端的中继消息,除非有特定的组织策略允许。在实践中,每个现代提交服务器都需要身份验证。标准机制是 SMTP AUTH(RFC 4954),使用 PLAIN 或 LOGIN 机制,始终通过 TLS。

MSA 的标头修复

与 MTA(不能改变消息内容)不同,MSA 应该检查和修复提交的消息:

端口 465:隐式 TLS

历史上,端口 465 曾被简要分配用于"SMTPS"(SMTP 上的隐式 TLS),然后被重新分配,随后被 RFC 8314 在 2018 年重新标准化。今天,带有隐式 TLS 的端口 465 是提交的推荐方式——TLS 握手在连接时立即发生,在任何 SMTP 命令之前。带有 STARTTLS 的端口 587 仍然被广泛支持并且有效。

大小和速率限制

MSA 通常比 MTA 执行更严格的限制:

常见错误

可传递性影响

Related RFCs