简单邮件传输协议(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” 删除一个 L
  • EHLO:Extended HELO 的缩写,用于 ESMTP 功能协商与版本降级兼容
  • MAILRCPT:真正接收的动词仅为前 4 字符 MAIL / RCPTFROM:TO: 仅作为参数修饰词前缀

4. 核心架构解耦:信封地址 (Envelope) 与 信纸标头 (Header) 的分离

邮件体系中存在两套地址,分别作用于不同的分层:

  • 信封地址 (SMTP Envelope - RFC 5321)MAIL FROMRCPT TO,专门面向邮件服务器,用于路由中转、退信通知 (Return-Path) 和 Bcc 密送投递。
  • 信纸标头 (Message Header - RFC 5322)From:To:,专门面向用户代理 (UA),在客户端界面渲染展示给用户看。

分离的核心价值

  1. 支持密送 (Bcc):信封包含 RCPT TO:<bcc_user> 完成投递,但信纸 To: / Cc: 隐去该地址。
  2. 退信路由控制:投递失败时仅向信封 MAIL FROM 发送 Bounce Mail。
  3. 中转痕迹追踪:每经一个中转站,服务器在信纸 Header 顶部追加 Received: 行记录路径。
  4. 安全校验:SPF、DKIM、DMARC 协议正是通过校验“信封发件人”与“信纸发件人”的一致性来防御伪造发件人攻击。

核心价值 / 作用

  1. 去中心化互联:任何合规搭建的 SMTP 服务器均可全球互相寻址投递。
  2. 极简与向下兼容:基于 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

Related Concepts(关联概念)