IMAP4 是什么
IMAP4 是「邮件留在服务器、多端实时同步」的收信协议,取代了 POP3 的「下载即搬走」模型。客户端不必整封下载,而是先看信头、按需取正文或附件,并把标志位(已读、星标、已删除)写回服务器,所以手机、网页与桌面三端的状态能保持一致。它按文件夹组织邮件,支持服务端检索与并发命令,是移动时代的标准收信协议。
基本信息
| 端口 | 143 明文(可 STARTTLS)/ 993 隐式 TLS |
|---|---|
| 规范 | RFC 3501(IMAP4rev1)、RFC 9051(IMAP4rev2) |
| 命令模型 | 每条命令带唯一标签(a1/a2…),应答带标签状态 OK/NO/BAD |
| 数据行 | 以 * 开头的无标签数据行 |
| 标志位 | \Seen 已读、\Flagged 星标、\Answered、\Draft、\Deleted |
| 存储模型 | 服务器端持久信箱,受配额(quota)限制 |
典型使用场景
- 多设备同步收信:手机读过的邮件,桌面端不再显示未读
- 只想看信头时节省流量:先 FETCH 头部再决定是否取正文
- 服务端检索:让服务器按条件筛选,避免全量下载后本地过滤
- 保留服务器副本备份,避免换设备后邮件丢失
- 使用 IDLE 实现新邮件到达即时提醒
最小会话骨架
最小会话骨架
a1 CAPABILITY
a2 LOGIN alice ****
a3 SELECT INBOX
a4 FETCH 1:* (FLAGS)
a5 FETCH 1 (BODY.PEEK[HEADER.FIELDS (SUBJECT FROM)])
a6 SEARCH UNSEEN
a7 STORE 5 +FLAGS (\Seen)
a8 LOGOUT常用命令速查
| 命令 | 作用 | 备注 |
|---|---|---|
| CAPABILITY | 查询服务器支持的能力 | 连接后先发,决定可用特性 |
| LOGIN | 登录认证 | 明文端口务必在 TLS 后使用 |
| SELECT | 选中邮箱(文件夹)并返回状态 | 只读场景用 EXAMINE |
| FETCH | 取元数据或正文 | BODY.PEEK 不会置为已读 |
| STORE | 修改标志位 | 实现已读/星标/删除 |
| SEARCH | 服务端条件检索 | 配合 UID 更稳定 |
| IDLE | 保持连接等待服务端推送 | 新邮件即时通知的实现 |
IMAP 命令必须带唯一标签,同一连接可并发多条命令(PIPELINING),与 POP3 的严格一问一答不同;这也是 IMAP 客户端能「边收信边标记」的原因。
取正文时先用 BODY.PEEK 可以避免「只是预览一下就把邮件标记成已读」的副作用;需要顺带置已读时,再用 STORE +FLAGS (\Seen) 显式操作。