SMTP 实验记录:一次邮件发送过程与 Header 格式验证
- 日期:2026-08-04
- 主题:SMTP
- 关联概念:应用层原理与 P2P 安全思考记录, 简单邮件传输协议 (SMTP), SMTP 协议与报文格式思考记录
- 实验状态:成功
实验目的
验证 SMTP 客户端与服务器之间的交互过程,观察命令及状态码响应,探究 DATA 阶段中 RFC 5322 报文格式(Header 与分隔空行)对邮件接收的影响。
实验环境
- 客户端:
::1(localhost) - SMTP 服务器:Mailpit (Local ESMTP Service)
- 端口:1025
- 是否使用 TLS:否(明文 TCP 连接)
- 使用的工具:telnet
实验步骤
- 建立连接(
telnet 127.0.0.1 1025) - 发送客户端问候(
HELO MyMail) - 进行身份认证(无,本地测试环境无需认证)
- 指定发件人和收件人(
MAIL FROM,RCPT TO) - 发送邮件内容(
DATA阶段)- 对照组 1:无 Header,直接输入文本(观察失败响应)
- 对照组 2:包含 Header 并在 Header 与正文间加入空行(观察成功响应)
- 结束会话
实际过程
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 HuaLiMao-AQdeMacBook-Pro.local Mailpit ESMTP Service ready
HELO MyMail
250 HuaLiMao-AQdeMacBook-Pro.local greets MyMail
MAIL FROM: <hualimao@localhost.local>
250 2.1.0 Ok
RCPT TO: <hualimao@localhost.local>
250 2.1.5 Ok
--- [对照组 1:缺少 Header 与分隔空行] ---
DATA
354 Start mail input; end with <CR><LF>.<CR><LF>
Hello
.
451 4.3.5 Unable to process mail
--- [对照组 2:补充 Header 并添加分隔空行] ---
DATA
354 Start mail input; end with <CR><LF>.<CR><LF>
Subject: TEST
FROM: <hualimao@localhost.local>
TO: <hualimao@localhost.local>
Hello
.
250 2.0.0 Ok: queued as 1PKGPInrNXIKCGVvf8xopC现象分析与总结
-
对照组 1 失败原因(451 4.3.5): 收到
354提示后直接输入Hello,由于缺少Key: Value格式的 Header 以及分隔 Header 与 Body 的空行,服务器按 Header 校验Hello失败引发报错拒收。 -
对照组 2 成功原因(250 2.0.0): 补全了
Subject:,FROM:,TO:标头,并在 Header 与正文Hello之间显式输入了一个空行(CRLF)。该空行是 RFC 5322 规范中标识“Header 解析结束、进入 Body 正文”的法定界限。 -
结论: 教材中在
DATA后直接写正文的示例仅为 SMTP 命令传输(RFC 5321)的抽象简化;现实工程中,服务器必然会依照 RFC 5322 校验报文格式,Header 与正文之间的空行不可省略。