🕸️ 第五章 不同于Web的系统
📄 一句话概括

邮件和 Web 共用同一张网,却说自己的话;二十年来【收】这条腿已经悄悄换过一次。

📝 本节和前面几节的关系

前几节讲的都是 Web 系统本身。这一节讲一个和 Web 同龄、共用一张网、但走自己协议的老前辈。教材 5-5 的并列关键词是【SMTP】和【POP3】。

一、三个协议,各管一段

邮件的整套流程由三个协议分工完成,它们不是竞争关系,而是三段路:

SMTP(简单邮件传输协议):负责【投】。既管你点发送之后从客户端交到自己的发信服务器,也管服务器与服务器之间的中转投递,一直到收件人的收件服务器。

POP3(邮局协议第 3 版):负责【取】。把邮件从收件服务器下载到本地,默认取走之后服务器上就不留了。

IMAP(互联网消息访问协议):也是负责【取】,但邮件留在服务器上,多台设备之间同步读没读、分了哪个文件夹。

教材 5-5 只写了 SMTP 和 POP3,是因为它们是最早的一对搭档。 但今天第三个协议才是主流——下一节讲为什么。

二、端口:同一件事,明文一个口、加密一个口

每个协议都有一个【老口】和一个【安全口】:

SMTP:25(服务器之间用)、465(隐式 TLS)、587(STARTTLS),另有 2525 作为备选。

POP3:110(明文)、995(加密)。

IMAP:143(明文)、993(加密)。

25 端口还有一条特殊规矩:绝大多数住宅宽带都把它封了。 因为开放 25 会被垃圾邮件发送者利用——这个端口从设计那天起就没有认证机制,是【历史遗留问题】的典型代表。

三、两种加密方式,差别比名字大得多

STARTTLS(显式加密):客户端先用明文打招呼,再说一句【我们加密吧】,然后同一根连接升级成 TLS。用在 587、143、110 上。

它的风险很具体:如果中间人把这句【我们加密吧】掐掉,双方就都以为对方不支持加密,连接一直是明文的。 这叫降级攻击。

隐式 TLS:从第一个字节开始就是加密的,没有明文窗口。用在 465、993、995 上。

RFC 8314(2018 年)的建议是:所有新部署都用隐式 TLS(465/993/995),只为了兼容老客户端才保留 587。

这一条和第 3 章讲的 TLS 是同一个东西——同一个加密技术,被三个不同的协议各用了一遍。

四、POP3 正在退场

2026 年 IMAP 覆盖了大约 95% 的使用场景,POP3 保留下来只为了几种特定情况:只有一台设备收信、服务器配额极小、或者需要完整的本地归档。

服务商的态度很明确:Gmail 从 2025 年 1 月起对新账号不再提供 POP3 访问,Yahoo 也在跟进。POP3 这个协议本身从 1996 年以后就没再改过了。

原因只有一个:【取走即删】这个设计,和多设备时代是正面冲突的。 手机取走了,电脑上就没了。

所以教材 5-5 把 SMTP 和 POP3 并排放在【与 Web 兼容的邮件服务器】这一节:分工二十年没变,变的是【取】这条腿的走法。

五、动手 Demo:多设备时代,POP3 要多下载多少

把【好几种设备收同一批邮件】这件事算成流量:一台设备、三台设备,用 POP3 和 IMAP 分别是多少。

people, per_day, kb = 100, 20, 50
total = people * per_day
print("  收信总量 = %d × %d = %d 封/天" % (people, per_day, total))

print("  POP3 单设备:%d × %d KB = %d MB/天" % (total, kb, total * kb // 1000))
print("  POP3 三设备:%d × %d KB = %d MB/天"
      % (total * 3, kb, total * 3 * kb // 1000))

header = 2
open_rate = 0.3
each = header + open_rate * kb
print("  IMAP 每封每台:头部 %d KB + 打开时才拉正文 %.1f KB = %.1f KB"
      % (header, open_rate * kb, each))
print("  IMAP 三设备:%d × 3 × %.1f KB = %.0f MB/天"
      % (total, each, total * 3 * each / 1000))

实跑输出:

--------------------------------------------------------------------
D5 邮件为什么还活着:SMTP 与 POP3
--------------------------------------------------------------------
  教材 5-5 说,邮件是【与 Web 系统兼容】的老前辈——它和 Web 共用同一张网,
  但说自己的话。先看端口:同一件事,明文一个口、加密一个口。

  协议        干什么                              明文端口    加密端口
  --------------------------------------------------------------------------
  SMTP        发信、服务器之间中转投递            25          465 / 587
  POP3        收信,取走并(默认)从服务器删除    110         995
  IMAP        收信,信留在服务器上多端同步        143         993

  两种加密方式,差别很大:

  ----------------------------------------------------------------------------------------
    STARTTLS(显式)  先明文打招呼,再说【我们加密吧】然后升级
                      用在 587 / 143 / 110
                      风险:中间人把这句掐掉,连接就一直是明文
    隐式 TLS          第一个字节就加密,没有明文窗口
                      用在 465 / 993 / 995
                      RFC 8314 推荐所有新部署都用这一条
  ----------------------------------------------------------------------------------------

  邮件协议现在的格局:

  项目                          现状
  ----------------------------------------------------------------------------------
  IMAP 占 2026 年使用场景       约 95%
  POP3 的处境                   被主流服务商退场(Gmail 2025-01 起对新账号停用)
  住宅宽带能不能连 25 端口      不能,绝大多数 ISP 封掉,为的是拦垃圾邮件

  算一笔【多设备】的账。一家 100 人的公司,每人每天收 20 封、每封 50 KB:

    收信总量 = 100 × 20 = 2000 封/天

  做法                每封信被下载几次              一天下载量
  ------------------------------------------------------------------------------------
  POP3 单设备         1 次                          2000 × 50 KB = 100 MB
  POP3 三设备         3 次(每台各拉一份)          6000 × 50 KB = 300 MB
  IMAP 三设备         只拉头部,打开才拉正文        约 102 MB

  结论:**POP3 的死穴不是慢,是【取走即删】——三台设备就打架。**
  所以教材把 POP3 和 SMTP 并排放在【与 Web 兼容的邮件服务器】这一节:
  SMTP 负责投,POP3 负责取,分工二十年不变;
  变的是【取】这条腿,今天已经换成了 IMAP。

看前两行:同样一批邮件,POP3 单设备 100 MB、三设备 300 MB。多出来的 200 MB 不是内容变多了,是同一封信被完整下载了三遍。 再看最后两行:IMAP 只多下头部,正文打开才拉——同样三台设备,大约 102 MB。差距就是这么来的。 不过真实世界里 IMAP 的优势不止流量:POP3 取走即删,你在手机上读过的信,电脑上还是未读状态;IMAP 同步的不只是邮件本身,还有【读没读、在哪个文件夹】这些状态。多设备时代,状态同步比省流量重要得多。

30 秒实验

  1. 打开手机和电脑上的邮件客户端,看同一个收件箱里的邮件状态是否一致——一致就是 IMAP,不一致多半是 POP3。
  2. 在邮件软件的账号设置里找端口号,看用的是 993 还是 110。
  3. 试着给自己发一封邮件,算一下它从点发送到收到,一共走了几次协议会话。

常见误区

  1. 错误:SMTP 和 POP3 是一对,一个发一个收。——纠正:这个说法过时了。今天更常见的是 SMTP 发、IMAP 收。SMTP 的搭档已经换人了,教材只是按历史顺序写的。
  2. 错误:加密就是加密,用哪个端口无所谓。——纠正:显式和隐式的差别是真实的。STARTTLS 有明文窗口,可能被降级;隐式 TLS 没有。RFC 8314 推荐新部署一律用 465/993/995。
  3. 错误:POP3 落后,应该停用。——纠正:它取决于你有几台设备。只有一台设备收信、或者需要彻底本地归档的场景,POP3 依然合适,而且更省服务器空间。
自测三问(点开对答案) 1. SMTP、POP3、IMAP 各管什么? —— **SMTP 管投递**(客户端到服务器、服务器到服务器),**POP3 和 IMAP 管接收**——POP3 取走后默认删服务器上的副本,**IMAP 把邮件留在服务器上与多台设备同步**。 2. 为什么说 25 端口是【历史遗留问题】? —— 因为**它的设计里根本没有认证机制**,任何一台机器都能往任何一台服务器投信。结果是垃圾邮件泛滥,**绝大多数住宅宽带都直接封掉 25 端口**,它现在只用于服务器之间的投递。 3. STARTTLS 和隐式 TLS 差在哪里? —— **STARTTLS 会先明文打招呼再升级**(587、143、110),中间人可以把升级请求掐掉,让连接停在明文;**隐式 TLS 从第一个字节就加密**(465、993、995),没有明文窗口。**RFC 8314 推荐新部署都用隐式 TLS。**

相关笔记