RFC 5321 简单邮件传输协议(SMTP):邮件如何在服务器之间路由与投递

译自 IETF RFC 5321《Simple Mail Transfer Protocol》· 面向邮件系统工程师与信创邮件架构师

概述

RFC 5321 定义了简单邮件传输协议(SMTP),是互联网邮件在邮件传输代理(MTA)之间收发的核心标准。它于 2008 年取代 RFC 2821,而 2821 又取代了最早的 RFC 821(1982)。SMTP 负责"传输"——把邮件从发件服务器路由到收件服务器;它不规定邮件内容如何撰写(那是 RFC 5322 的事),也不规定终端用户如何收取(POP3/IMAP)。理解 SMTP,是理解整套邮件安全体系(SPF/DKIM/DMARC、MTA-STS、DANE)的前提。

邮件系统的四段式模型

一封邮件的生命周期通常经过四个角色:

SMTP 主要服务于 MSA→MTA→MTA→MDA 这一段。

核心命令与交互流程

SMTP 是面向行的文本协议。一次典型投递如下:

  1. 客户端连 25 端口,服务器回 220 就绪;
  2. EHLO 声明身份并列出扩展(如 STARTTLSAUTH);
  3. MAIL FROM:<返回值路径> 给出信封发件人;
  4. RCPT TO:<收件人> 给出信封收件人(可多条);
  5. DATA 后输入邮件头与正文,以单独一行的 . 结束;
  6. QUIT 关闭连接。

其中 VRFY(验证邮箱存在)与 EXPN(展开邮件列表)因暴露账号信息,已被多数服务器禁用;RSET 中止当前事务,NOOP 保活。

信封地址与 Return-Path

SMTP 区分"信封"与"信头":MAIL FROM/RCPT TO 是信封地址,决定邮件实际路由与退信去向(Return-Path);而信里的 From:/To: 只用于展示。这一区分正是 SPF 校验信封发件人、DMARC 对齐 From 域的基础——攻击者可以伪造信头 From,却很难伪造信封 Return-Path,这正是邮件认证能生效的根本原因。

响应状态码

类别含义示例
2xx成功250 OK、221 关闭
3xx需要继续354 开始输入 DATA
4xx临时失败,可重试421 服务不可用、450 邮箱忙
5xx永久失败,不重试550 无此用户、554 交易失败

4xx 与 5xx 的区分直接关系到退信策略与队列重试;RFC 8616 进一步建议对认证失败的邮件优先用 4xx 延迟而非 5xx 拒收,以保留排查空间。

开放中继的历史教训

早期 SMTP 默认允许"开放中继"(任何人都可借你的服务器转发第三方邮件),被垃圾邮件放大利用。如今所有正规 MTA 都默认仅允许已认证用户或本地网络发信。开放中继既是声誉灾难,也是法律与合规风险。信创邮件系统部署时,必须把"禁止开放中继 + 强制发信认证"作为出厂基线。

SMTP 与现代邮件安全

原生 SMTP 是明文、无认证的。今天的加固来自叠加层:STARTTLS 把 25 端口升级为加密(但可被主动攻击剥离,故需 MTA-STS 声明强制);AUTH 在提交段做身份校验;SPF/DKIM/DMARC 在信头做域名级防伪。RFC 5321 本身只是地基,真正的"可信邮件"由 RFC 5321 + 8461 + 7208 + 6376 + 7489 共同构成。

信创与国产化落地要点

在信创替代场景,SMTP 的兼容性决定迁移能否平滑:需保证与既有 Exchange/Domino 的 25 端口互通、保留 Return-Path 与退信语义、支持 UTF-8 地址(见 RFC 6531)、并能对接 MTA-STS/DANE 等强加密策略。昆仑邮件系统在协议层完整兼容 RFC 5321,可作为 Exchange/Domino 国产化替代的传输底座。

参考文献

  1. RFC 5321 — Simple Mail Transfer Protocol
  2. RFC 5322 — Internet Message Format
  3. RFC 6409 — Message Submission for Mail
  4. RFC 8461 — SMTP MTA Strict Transport Security (MTA-STS)
  5. RFC 8616 — Email Authentication for Delivery of Related Messages