邮件是怎么走完的:从 MX 查询到手写 SMTP 会话
来源:maurycyz.com — 2026-11-08
📋 概述
一封邮件的路径被拆成七个可命名的环节:发件人 MUA、提交代理 MSA、发送 MTA、接收 MTA、投递代理 LDA 与存储、收件人 MUA。这套结构源自 1980 年代:多数机构只买得起一台服务器,维护是全职工作、升级要停机数天,网速以个位数兆比特计且时好时坏。MTA 与 MUA 的分工因此成为必需——收件方服务器不在线时,发送方 MTA 先存下来稍后重试,短暂故障不会导致退信;多数 MTA 会重试五天并做指数退避。
🔑 核心要点
- 作者用 telnet 手写了一次完整投递:HELO、MAIL FROM、RCPT TO、DATA、单独一个句点结束,服务器回 250 表示已在队列中。
- 状态码语义与 HTTP 同源:2xx 成功、3xx 继续、4xx 临时错误可重试、5xx 才该退信;header 语法大量借鉴自 SMTP。
- 信封地址与邮件头地址不必一致,转发与邮件列表正是靠这一点保持回复可用——列表会把信封发件人改成管理员能收到退信的位置。
- 终端 MTA 要先交给 LDA 再回状态码,否则会接受自己投不出去的信,退信回头又变成 backscatter 骚扰。
- 认证三件套的边界讲得很清楚:SPF 只能验证 MAIL FROM,转发后源 IP 会变;DKIM 签的是消息本身,能验证用户真正看到的 From;再加 HELO 与 IP 的正反解一致。
- 后果是家宽几乎无法直接发信,除非拥有地址块——这也解释了为什么五家公司控制了 99% 的邮件。
💡 金句
原生 SMTP 相信每个发件人都守规矩:任何人都能以任何人的身份发邮件。
👍 0
👎 0
← 返回 Lobsters 首页