邮件和 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 秒实验
- 打开手机和电脑上的邮件客户端,看同一个收件箱里的邮件状态是否一致——一致就是 IMAP,不一致多半是 POP3。
- 在邮件软件的账号设置里找端口号,看用的是 993 还是 110。
- 试着给自己发一封邮件,算一下它从点发送到收到,一共走了几次协议会话。
常见误区
- 错误:SMTP 和 POP3 是一对,一个发一个收。——纠正:这个说法过时了。今天更常见的是 SMTP 发、IMAP 收。SMTP 的搭档已经换人了,教材只是按历史顺序写的。
- 错误:加密就是加密,用哪个端口无所谓。——纠正:显式和隐式的差别是真实的。STARTTLS 有明文窗口,可能被降级;隐式 TLS 没有。RFC 8314 推荐新部署一律用 465/993/995。
- 错误: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。**- ☐ 下一节(5-6 非互联网网络:局域网、广域网、内联网)
相关笔记
- 在浏览器与Web服务器之间进行加密 —— 同一套 TLS,被邮件协议也用了一遍
- 服务器端的脚本语言 —— 服务器端软件的分工与这一节的协议分工是同一件事
- 根据端口号分配数据到应用程序 —— 端口号到底是怎么被用来分发数据的
- 增强电子邮件的安全性 —— 邮件的加密与签名
- 🕸️ Web技术原理 · 索引