← RFC Reference

RFC 1939: POP3 — 邮局协议第3版

Standards Track Mail Access Protocols Published March 2026
ELI5: POP3 就像检查实体邮箱。你走到邮局,打开你的箱子,把所有信件带回家,箱子现在是空的。你在自己的书桌上离线阅读所有内容。这很简单而且有效——但如果你从第二个位置检查邮件,那些信件已经消失了。POP3 下载消息,并且(默认情况下)从服务器删除它们。

存在原因

在互联网早期,大多数用户没有持久连接。拨号连接速度慢且昂贵。电子邮件架构分为两个角色:

POP3 弥补了这个差距。它为客户端提供了一种简单、无状态的方式来身份验证、列出消息、下载消息,以及可选地从服务器删除消息。它的设计目标是在低资源机器上用最少的代码实现 — 并且成功了。POP3 仍然是地球上支持最广泛的邮件访问协议之一。

工作原理

连接和状态

POP3 会话经过三个顺序状态:

  1. 授权:客户端连接(端口 110 或用于隐式 TLS 的端口 995)并使用用户名和密码进行身份验证。
  2. 交互:客户端发出命令以列出、检索和标记消息以供删除。
  3. 更新:客户端发送 QUIT。服务器执行所有待删除项并关闭连接。

典型的 POP3 会话

-- 客户端连接到端口 995 (POP3S) --
+OK POP3 服务器已就绪
USER alice@example.com
+OK
PASS s3cretP@ss
+OK 已登录。
-- 现在处于交互状态 --
STAT
+OK 3 12400                          ← 3 条消息,共 12400 个八位字节
LIST
+OK 3 条消息
1 4200
2 3800
3 4400
.
RETR 1                                ← 下载消息 1
+OK 4200 个八位字节
(完整的 RFC 5322 消息内容...)
.
DELE 1                                ← 标记消息 1 以供删除
+OK 已删除。
QUIT
+OK 再见。                              ← 服务器现在删除消息 1

核心 POP3 命令

命令 状态 用途
USER / PASS 授权 使用用户名和密码进行身份验证
APOP 授权 质询-响应身份验证(避免以明文形式发送密码)
STAT 交互 获取消息计数和总大小
LIST 交互 列出消息号和大小
RETR 交互 按号码检索完整消息
DELE 交互 标记消息以供删除
NOOP 交互 保持会话活动
RSET 交互 取消标记所有标记为删除的消息
TOP 交互 检索标题加 n 行正文
UIDL 交互 获取唯一 ID 列表(用于跟踪已下载的消息)
QUIT 任意 结束会话;触发更新状态

关键技术细节

下载并删除与保留在服务器上

POP3 的默认模型是下载并删除:客户端使用 RETR 检索每条消息,然后用 DELE 标记它,服务器在 QUIT 时删除它。许多客户端提供"将消息保留在服务器上"选项,这只是跳过 DELE 步骤。UIDL 命令提供唯一 ID,以便客户端可以跟踪已下载的消息,而无需重新下载。

锁定

POP3 需要对邮箱的独占锁。一次只有一个客户端可以访问 POP3 邮箱。如果第二个客户端试图在第一个客户端处于交互状态时连接,它将被拒绝。这使 POP3 不适合多设备访问。

无文件夹、无标志、无搜索

POP3 将邮箱视为编号消息的平面列表。没有文件夹、标签、已读/未读标志或服务器端搜索的概念。服务器纯粹是消息存储;所有组织都在客户端上进行。这是 POP3 和 IMAP 之间的根本区别。

安全性:APOP 和 TLS

原始的 USER/PASS 身份验证以明文形式发送密码。APOP 使用共享密钥 MD5 质询来避免这种情况,但 MD5 现在被认为在加密上已破裂。现代 POP3 应始终在隐式 TLS 端口 995 上运行(根据 RFC 8314)或作为备选方案使用 STLS(POP3 等效于 STARTTLS)。

常见错误

可递送性影响

Related RFCs