RFC 5321 简单邮件传输协议(SMTP):邮件如何在服务器之间路由与投递
概述
RFC 5321 定义了简单邮件传输协议(SMTP),是互联网邮件在邮件传输代理(MTA)之间收发的核心标准。它于 2008 年取代 RFC 2821,而 2821 又取代了最早的 RFC 821(1982)。SMTP 负责"传输"——把邮件从发件服务器路由到收件服务器;它不规定邮件内容如何撰写(那是 RFC 5322 的事),也不规定终端用户如何收取(POP3/IMAP)。理解 SMTP,是理解整套邮件安全体系(SPF/DKIM/DMARC、MTA-STS、DANE)的前提。
邮件系统的四段式模型
一封邮件的生命周期通常经过四个角色:
- MUA(邮件用户代理):Outlook、网页邮箱、手机客户端,负责撰写与展示;
- MSA(邮件提交代理):接收 MUA 提交,通常在 587 端口并要求认证(见 RFC 6409);
- MTA(邮件传输代理):Postfix、Exchange、昆仑邮件系统等,按 SMTP 在 25 端口相互转发;
- MDA(邮件投递代理):把邮件存入用户邮箱,供 POP3/IMAP 收取。
SMTP 主要服务于 MSA→MTA→MTA→MDA 这一段。
核心命令与交互流程
SMTP 是面向行的文本协议。一次典型投递如下:
- 客户端连 25 端口,服务器回
220就绪; EHLO声明身份并列出扩展(如STARTTLS、AUTH);MAIL FROM:<返回值路径>给出信封发件人;RCPT TO:<收件人>给出信封收件人(可多条);DATA后输入邮件头与正文,以单独一行的.结束;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 国产化替代的传输底座。
参考文献
- RFC 5321 — Simple Mail Transfer Protocol
- RFC 5322 — Internet Message Format
- RFC 6409 — Message Submission for Mail
- RFC 8461 — SMTP MTA Strict Transport Security (MTA-STS)
- RFC 8616 — Email Authentication for Delivery of Related Messages
