一封电子邮件如何从发件人到达收件人
您点击“发送”,几秒钟后,邮件就出现在了世界的另一端。这看起来是瞬间完成、直接送达的。实际上,这封邮件在一台又一台服务器之间辗转,有点像一封信从邮筒到分拣中心的旅程。了解这段旅程,有助于理解垃圾邮件为什么会存在,以及如何追查它的来源。
电子邮件是一封信,而不是一通电话
当您打开网页时,浏览器和网站是在实时对话,就像打电话:浏览器提出请求,网站马上回答。如果网站宕机,您立刻就会看到错误提示。
电子邮件则不同:它是异步的,就像邮政信件。没有人在线路另一端等着回答。每台服务器收到邮件后,先把它保存起来,等条件允许时再转交给下一站。如果收件人的服务器出了故障,邮件并不会丢失:发送服务器会在几天内(通常是 4 到 5 天)定期重试。如果仍然送不到,它会给您退回一封投递失败通知,相当于邮局的“查无此人,退回寄件人”。
旅程的六个阶段
- 撰写。您在邮件程序中写好邮件。专业人士把它称为 MUA(Mail User Agent,邮件用户代理):它就是您的纸和笔。
- 投递。邮件程序先用密码验证您的身份,然后把邮件交给服务商的发送服务器。这就是街角的邮筒。
- 查找地址。发送服务器查看收件人的域名(@ 后面的部分),并向互联网的“电话簿”——DNS——询问哪台服务器负责接收这个域名的邮件。这条信息叫做 MX 记录:它就是电子邮件的邮政编码。
- 运送。发送服务器联系接收服务器,用 SMTP 协议把邮件交给它。这些负责运送的服务器叫做 MTA(Mail Transfer Agent,邮件传输代理):它们就是分拣中心。有时中间会连续经过好几台(反垃圾邮件网关、企业服务器……)。每一台都会在邮件头顶部加盖一个邮戳:一行
Received。 - 派送。通过各项检查(反垃圾邮件、防病毒)后,MDA(Mail Delivery Agent,邮件投递代理)把邮件放进正确的文件夹:收件箱或垃圾邮件箱。它就是邮递员。
- 阅读。收件人用自己的邮件程序(使用 IMAP 或 POP 协议)或在浏览器中用网页邮箱收取邮件。
| 邮政信件 | 电子邮件 | 技术名称 |
|---|---|---|
| 写信 | 撰写邮件 | MUA |
| 街边的邮筒 | 服务商的发送服务器 | MSA / MTA |
| 邮政编码 | 指明接收服务器的记录 | DNS、MX |
| 分拣中心 | 中转服务器 | MTA、SMTP |
| 邮局的邮戳 | 每台服务器添加的记录行 | Received |
| 邮递员 | 放入收件人的邮箱 | MDA |
| 信封上的地址 | 运送过程中使用的地址 | SMTP 信封 |
| 信纸上的抬头 | 邮件程序显示的“发件人” | From 字段 |
三种发送方式,同一条路
一封邮件可以从三个不同的地方出发,只有旅程的开头不同:
- 邮件客户端(Thunderbird、Outlook、Apple Mail、手机上的邮件应用):它直接用电子邮件的语言 SMTP 与发送服务器对话。
- 网页邮箱(例如在浏览器中使用 Gmail 或 Outlook.com):您的浏览器用网页的语言 HTTP 与服务商的网站对话。之后再由服务商通过 SMTP 把邮件交给自己的邮件服务器。
- 服务器上的程序:用 PHP 编写的“联系我们”表单、发送发票的网店、电子报……程序把邮件交给服务器上的邮件软件,整个过程无需任何人坐在键盘前。
无论哪种情况,邮件最终都会到达一个 MTA,再到达收件人的 MDA。接下来的旅程完全相同。
大名鼎鼎的 25 端口,以及您的路由器为什么封锁它
服务器就像一栋大楼:每项服务都有自己编号的门,叫做端口。网页走 443 号门(或 80 号门),而从 1982 年起,邮件服务器之间一直通过 25 号门互相传递邮件。
而您的邮件程序通常不走这扇门:它通过 587 端口(或 465 端口)把邮件交给服务商,并用您的密码验证身份。
许多互联网接入服务商会封锁家庭宽带的出站 25 端口。原因很简单:否则,一台感染了病毒的电脑就能绕过所有检查,直接向接收服务器发送成千上万封垃圾邮件,每个家庭都可能变成垃圾邮件发送源。关上这扇门后,服务商就能迫使所有邮件经过自己的发送服务器,由它来核实发件人并限制发送数量。
这也是诈骗者更喜欢租用服务器或入侵服务器的原因:在那里,25 端口是开着的。网络钓鱼:诈骗者如何让邮件成功送达这篇指南详细介绍了这些手法。
诈骗者的邮件走的是完全相同的路
电子邮件的一切都是标准化的:全世界都遵循同样的规则,这正是任何人都能给任何人写信的原因。因此,诈骗邮件和正常邮件走的是完全相同的路线,只有起点不同:租用几天的服务器、被入侵的网站、被盗的账户。
和纸质信件一样,一边是服务器用来运送邮件的信封,另一边是信件本身,其中包含您在屏幕上看到的“发件人”字段。没有任何规则要求两者一致。所以显示的发件人才如此容易被伪造。
相反,接收服务器——尤其是您自己的服务器——添加的 Received 邮戳,如实记录了邮件的来源。Baitback 正是在这里查找发送这封邮件的服务器的 IP 地址。
您知道吗?
- 第一封电子邮件诞生于 1971 年。美国工程师雷·汤姆林森(Ray Tomlinson)在两台并排摆放的电脑之间发送了它。正是他选用了 @ 符号,用来分隔人名和机器名。
- 起初连汉字都发不了!1982 年发布的 SMTP 协议只能传送英文字符组成的纯文本:没有汉字,没有带重音的字母,没有附件,也没有图片。这些都是从 1992 年起随着 MIME 标准出现的:它把任何文件都转换成文本,好让它能够“上路”。一个有趣的后果:附件在传输途中会变大约三分之一。
- 标准本身没有规定最大体积。限制都是各服务器自己定的:通常每封邮件 20 到 50 MB,禁止某些文件类型(
.exe、.js……),每个邮箱有容量配额,每天有发送数量上限。标准唯一的要求是……每一行不能超过 998 个字符。 - 含非英文字符的地址。自 2012 年起,已有标准允许使用
josé@café.example甚至中文的邮件地址,但目前很多服务器仍然支持得不好。 - 一段明文可读的对话。服务器之间用文本命令交流,几乎可以手动输入。下面是一段简化的交流(C:发送方服务器,S:接收方服务器):
S: 220 mx.destinataire.example ESMTP
C: EHLO mail.expediteur.example
S: 250 mx.destinataire.example
C: MAIL FROM:<alice@expediteur.example>
S: 250 OK
C: RCPT TO:<bob@destinataire.example>
S: 250 OK
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: Alice <alice@expediteur.example>
C: Subject: Bonjour !
C:
C: Salut Bob !
C: .
S: 250 OK: queued
C: QUIT
MAIL FROM 和 RCPT TO 这两行构成信封;From: 这一行属于信件本身。邮件以一行只包含一个英文句点的内容结束。
- 电子邮件并不是从发件人直接到达收件人:它要经过好几台服务器,就像信件要经过分拣中心。
- 电子邮件是异步的:每台服务器先保存邮件再转交,必要时会连续几天重试。
- 邮件客户端(SMTP)、网页邮箱(HTTP)或脚本:三个可能的起点,之后只有一条路。
- 25 端口用于服务器之间的传输;许多服务商会为家庭用户封锁它,以减少垃圾邮件。
- 诈骗邮件走的也是同一条标准路线,而
Received邮戳保留了它们真实起点的痕迹。