SMTP 协议全过程:一封邮件从点击“发送”到抵达对方收件箱的旅程

在这个瞬息万变的即时通讯时代,电子邮件(Email)依然像是一座稳固的灯塔,承载着正式商务沟通、账号验证和跨平台协作的重任。当你写完一封邮件,轻点"发送"按钮,仅仅几秒钟后,远在地球另一端的朋友就能在收件箱里看到它。

在这短短的几秒钟内,这封邮件并非瞬间移动,而是经历了一场严密的"数字接力赛"。这场竞赛的规则,就是拥有近 40 年历史、却依然老当益壮的 SMTPSimple Mail Transfer Protocol,简单邮件传输协议)

今天,我们就将拆解这封邮件的旅程,深入探索 SMTP 协议运作的每一个技术细节。


第一站:始发站――客户端与端口的选择

旅程的起点是你的邮件客户端(MUAMail User Agent),比如 OutlookGmail 或手机上的邮件 App。当你点击"发送"时,邮件首先被交给发件方服务器的"收寄处",即 MSAMail Submission Agent,邮件投递代理)

在这个环节,客户端与服务器之间需要建立连接。这里涉及到了三个至关重要的"数字大门"――端口:

  1. 端口 25:这是 SMTP 的原始端口。然而,在现代网络中,由于它不加密且极易被用于发送垃圾邮件,绝大多数互联网服务供应商(ISP)都会封禁普通用户的 25 端口。现在,它主要用于服务器与服务器之间的接力。
  2. 端口 465:这是早期的 SMTPSSMTP over SSL)标准。它在建立连接之初就要求进行加密。虽然一度被建议弃用,但在许多旧系统和大型服务商中依然广泛存在。
  3. 端口 587:这是现代邮件提交的标准端口。它默认允许明文连接,但会强制要求通过 STARTTLS 命令升级为加密连接。它是目前 MUA 提交邮件的首选路径。

第二站:初次见面――EHLO 命令与身份校验

连接建立后,发件人的客户端会向服务器发出第一个正式的"问候"。这就是 EHLOExtended HELLO 命令。

在早期的 SMTP 协议中,使用的是 HELO 命令。但随着技术发展,我们需要支持附件、加密和更大容量的邮件,于是出现了 ESMTP(扩展 SMTP。当你的客户端发送 EHLO [你的机器名] 时,服务器会回复一系列它所支持的扩展功能列表。

紧接着是身份验证(Authentication)。为了防止任何人都冒充你的邮箱发信,服务器会要求客户端提供账号密码。只有通过了验证,服务器才会允许你进行后续操作。这个过程就像在邮局寄信时,工作人员要求你出示身份证件。

第三站:封装――信封与信件的区别

SMTP 的世界里,一封邮件被分为两部分:信封(Envelope信件内容(Content

  1. MAIL FROM:这是信封上的"发件人"
  2. RCPT TO:这是信封上的"收件人"
  3. DATA:这是信件的具体内容,包括 Header(邮件头,如 SubjectToCc)和 Body(邮件正文及附件)。

技术要点: 你在邮件软件里看到的"发件人" SMTP 协议层面的 MAIL FROM 有时可能不一致。这种不一致往往被黑客利用进行钓鱼攻击,这也是为什么现代邮件系统引入了 SPF DKIM 等校验机制的原因。

第四站:寻路――DNS MX 记录

现在,发件服务器已经拿到了你的邮件,它面临着最关键的问题:对方的服务器在哪里?

假设你发往的是 receiver@example.com,发件服务器会向全球域名系统(DNS)发出查询请求,寻找 example.com 这个域名的 MX 记录(Mail Exchanger Record

MX 记录是邮件世界的地图导航。它不仅告诉发件方"谁是负责处理该域名邮件的服务器",还提供了一个优先级(Priority数值。例如,一个域名可能有多个 MX 记录:

  • mx1.example.com (优先级 10)
  • mx2.example.com (优先级 20)

发件服务器会首先尝试连接数值最小(优先级最高)的那台。如果该服务器忙碌或宕机,则尝试下一台。这种机制确保了邮件系统的高可用性。

第五站:接力――邮件中继(Relay

一旦找到了对方的 IP 地址,发件服务器(此时作为 MTAMail Transfer Agent)就会通过 端口 25 与目标服务器建立连接。

如果邮件需要跨越多个不同的网络区域,或者发件方是一个代发机构(如 SendGridMailchimp),邮件可能会经历 邮件中继(Relay

邮件中继(Relay 就像是跨国快递的转运中心。邮件从 A 服务器传给 B 服务器,再由 B 传给最终目的地 C。在 SMTP 协议中,每经过一个中继节点,服务器都会在邮件头(Header)中添加一个 Received 字段。通过查看邮件头,我们可以清晰地追踪到这封邮件走过的完整路径和时间戳。

然而,现代互联网严禁"开放中继(Open Relay"。如果一个服务器允许任何人未经认证就利用它向外转信,它很快就会被全球的反垃圾邮件组织拉入黑名单。

第六站:安检――垃圾邮件过滤与安全协议

当邮件到达目标服务器时,并不会立刻进入收件箱。目标服务器会对这封邮件进行一系列严苛的"安检"

  • 反向 DNS 查询:确认发件服务器的 IP 是否与其声明的域名匹配。
  • SPF 检查:验证发件服务器是否在域名的合法授权列表中。
  • DKIM 签名验证:利用公钥加密技术,检查邮件正文在传输过程中是否被篡改。
  • DMARC 策略:根据前两项结果,决定是接收、标记为垃圾邮件还是直接拒收。

如果这些安检都通过了,邮件就会进入最后一步。

第七站:终点站――投递(Delivery)与存储

当目标服务器的 MTA 最终确认接受这封邮件时,它会给发件方回传一个 250 OK 的代码。此时,发件服务器的使命宣告完成,它会从自己的待发送队列中删除这封邮件。

接下来,目标服务器内的 MDAMail Delivery Agent,邮件投递代理) 接管工作。它负责将邮件存放到服务器的存储阵列中(通常是以 Maildir mbox 格式存储)。

此时,这封邮件静静地躺在服务器的硬盘上,等待收件人来""

尾声:收件人如何看到邮件?

需要明确的是,SMTP 只负责""Push)邮件。当收件人打开 Outlook 或手机 App 查看邮件时,使用的不再是 SMTP,而是 POP3 IMAP 协议。

  • POP3 就像是从邮局把信取走并带回家,服务器上通常不再保留副本。
  • IMAP 就像是在邮局里查看信件,你对邮件的修改(标记已读、移动文件夹)会同步反馈到服务器上。

总结

一封邮件的旅程,是人类互联网协作精神的缩影。它从 MUA 出发,通过 587 端口开启加密对话,经过 EHLO 的握手,利用 DNS MX 记录在大海中寻找方向,通过 25 端口在 MTA 之间完成中继接力,最后通过 MDA 的安检入库。

尽管诞生于互联网的"石器时代",但 SMTP 协议通过不断引入 STARTTLSSPFDKIM 等扩展插件,在安全性与兼容性之间达成了奇迹般的平衡。下一次当你点击"发送"时,不妨想象一下那串跳动的代码,它们正跨越千山万水,在那条看不见的数字公路上,为你精准地传递着每一份讯息。

评论

此博客中的热门博文

深度解析:Xray 核心技术 REALITY、Vision、xhttp 与 anytls 的协同工作原理

重新定义流媒体:Media over QUIC (MoQ) 为何是下个时代的终解?

gemini转发国内的部署教程