简单邮件传输协议(SMTP / Simple Mail Transfer Protocol)
Definition
SMTP(简单邮件传输协议)是互联网电子邮件体系中用于在用户代理与邮件服务器之间、以及邮件服务器与邮件服务器之间推送信件的应用层推(Push)协议。
它规定 / 它负责:
- 客户端与服务器之间的双向 ASCII 命令行控制交互(
HELO,MAIL FROM,RCPT TO,DATA,QUIT) - 基于 TCP 协议(默认端口 25,加密端口 587/465)的端到端可靠邮件传递
- 邮件从发件方发送到目标收件方邮件服务器的“信封(Envelope)”传输规范
简单理解:
SMTP 解决邮件如何在网络节点间“推送(Push)”,POP3/IMAP 解决邮件如何被客户端“拉取(Pull)”。
系统位置 / 架构关系
flowchart TD UA_Src["发件人用户代理 (UA)"] -->|"SMTP (Push)"| Server_Src["发件人邮件服务器"] Server_Src -->|"SMTP (Push)"| Server_Dst["收件人邮件服务器"] Server_Dst -->|"POP3 / IMAP / HTTP (Pull)"| UA_Dst["收件人用户代理 (UA)"]
核心概念思维导图
mindmap root((SMTP 协议)) 应用场景 UA 到 发件人服务器 服务器 到 服务器 传输模型 Push 推模型 基于 TCP 25/587 端口 纯文本 ASCII 命令/响应 协同规范 RFC 5321 SMTP 传输规范 RFC 5322 报文格式 Header + 空行 + Body
核心内容 / 组成结构
1. 阶段一:信封协商与命令序列 (RFC 5321)
SMTP 是典型的状态机命令/响应协议,客户端与服务端依次交换命令:
HELO / EHLO:建立会话并打招呼(HELO为旧版本,EHLO为扩展 ESMTP)MAIL FROM:<addr>:指定发件人地址(命令动词为MAIL)RCPT TO:<addr>:指定收件人地址(命令动词为RCPT)DATA:请求开始传输报文内容.(独占一行句号):结束 DATA 输入阶段QUIT:断开连接
2. 阶段二:报文内容格式规范 (RFC 5322)
在 DATA 之后输入的内容必须遵循 RFC 5322 的“信纸”格式:
- Header 区(标头):
Key: Value格式(如Subject:,From:,To:) - 分割空行(CRLF):必须存在一个空行,标识 Header 的结束与 Body 的开始
- Body 区(正文):实际呈现给用户的邮件正文
3. 历史设计哲学:4 字符命令规则(4-letter Command Rule)
为了在 80 年代性能极为受限的系统上加速解析,SMTP 核心命令动词被严格限制为4 字节英文字母(便于 CPU 32位整数对齐快速匹配):
HELO:为凑齐 4 字符,将 “HELLO” 删除一个 LEHLO:Extended HELO 的缩写,用于 ESMTP 功能协商与版本降级兼容MAIL与RCPT:真正接收的动词仅为前 4 字符MAIL/RCPT,FROM:与TO:仅作为参数修饰词前缀
4. 核心架构解耦:信封地址 (Envelope) 与 信纸标头 (Header) 的分离
邮件体系中存在两套地址,分别作用于不同的分层:
- 信封地址 (SMTP Envelope - RFC 5321):
MAIL FROM与RCPT TO,专门面向邮件服务器,用于路由中转、退信通知 (Return-Path) 和 Bcc 密送投递。 - 信纸标头 (Message Header - RFC 5322):
From:与To:,专门面向用户代理 (UA),在客户端界面渲染展示给用户看。
分离的核心价值:
- 支持密送 (Bcc):信封包含
RCPT TO:<bcc_user>完成投递,但信纸To:/Cc:隐去该地址。 - 退信路由控制:投递失败时仅向信封
MAIL FROM发送 Bounce Mail。 - 中转痕迹追踪:每经一个中转站,服务器在信纸 Header 顶部追加
Received:行记录路径。 - 安全校验:SPF、DKIM、DMARC 协议正是通过校验“信封发件人”与“信纸发件人”的一致性来防御伪造发件人攻击。
核心价值 / 作用
- 去中心化互联:任何合规搭建的 SMTP 服务器均可全球互相寻址投递。
- 极简与向下兼容:基于 ASCII 纯文本,协议设计简单,并通过 ESMTP 支持 TLS 加密与身份验证扩展。
与相关概念的关系
与 用户代理 (UA) 的关系
用户代理使用 SMTP 向服务器提交信件,但不使用 SMTP 接收信件(由 POP3/IMAP 替代)。
与 协议解耦 的关系
SMTP (RFC 5321) 与 Message Format (RFC 5322) 相互解耦:SMTP 负责“信封包裹”怎么运,RFC 5322 负责“信纸”怎么装。
Summary
SMTP 是互联网电子邮件传输的核心基石,本质上是基于 TCP 字节流的去中心化推(Push)协议。
核心关键词:
- Push Protocol
- RFC 5321 & RFC 5322
- Header-Body Blank Line