首页/网络/协议速查/IMAP 命令速查

IMAP 命令速查

IMAP 命令分四态:未认证(CAPABILITY/LOGIN/STARTTLS)、已认证(SELECT/LIST/APPEND)、已选信箱(FETCH/STORE/SEARCH)、退出(LOGOUT)。

协议速查网络更新于 2026-10-13

IMAP 的四种连接状态

IMAP 与 SMTP 不同,它有明确的状态机:未认证、已认证、已选信箱、退出。每条命令都必须带一个客户端自取的标签(如 a1),服务器在应答里回同一标签加 OK、NO 或 BAD,这样同一条连接上可以并发多条命令。理解状态划分是排查「命令被拒」的关键,多数 NO 或 BAD 都源于在不该用的状态里发了命令。

基本信息

服务端口143 明文(可 STARTTLS)、993 隐式 TLS
标签机制每条命令带唯一标签,应答以该标签开头并带 OK、NO、BAD
数据回显以星号开头的行是服务器主动送出的数据,如 EXISTS、FLAGS
常用扩展IDLE(推送)、MOVE、UIDPLUS、CONDSTORE

核心命令

命令状态阶段说明
CAPABILITY任意查询服务器能力列表
LOGIN 与 AUTHENTICATE未认证登录,口令或 SASL 机制
STARTTLS未认证升级加密通道
SELECT 与 EXAMINE已认证选信箱,可写或只读
CREATE 与 DELETE 与 RENAME已认证信箱管理,DELETE 删的是信箱
LIST 与 LSUB已认证列出信箱与订阅
FETCH已选取邮件数据,如 BODY、FLAGS、UID
STORE已选修改标志,如加已删除
SEARCH已选检索,如 UNSEEN、FROM
COPY 与 MOVE已选复制与移动,MOVE 属扩展
APPEND已认证把新邮件放入信箱
EXPUNGE已选清除已标记删除的邮件
IDLE已选等待服务器推送新事件
CLOSE 与 LOGOUT已选与任意关闭信箱与退出

典型命令与应答

典型命令与应答
a1 SELECT INBOX
* 172 EXISTS                    # 星号行是服务器主动送出的数据
* OK [UIDVALIDITY 3857529045] UIDs valid
a1 OK [READ-WRITE] SELECT completed   # 带标签的最终应答
# 只读浏览用 EXAMINE,避免误标已读
b1 FETCH 1:* (FLAGS UID)
b1 OK FETCH completed

典型使用场景

  • 用 EXAMINE 浏览归档信箱,避免把邮件标记成已读
  • 客户端同步发件箱时用 APPEND 把已发送邮件写回服务器
  • 排查「删除后邮件还在」:确认是否只做了 STORE 而漏了 EXPUNGE
  • 用 IDLE 实现新邮件即时提醒,替代高频轮询
EXAMINE 是 SELECT 的只读版:浏览不想误标已读的信箱(如归档、共享邮箱)时应该用 EXAMINE,两者返回的数据结构相同,权限不同。
UIDVALIDITY 变化意味着服务器上的 UID 被重置(重建信箱、迁移后的常见现象),客户端本地缓存必须整体失效并重新同步,否则会错位地把旧 UID 对应到新邮件。

易错点

  • DELETE 删的是信箱不是邮件:删邮件要 STORE 加 \\Deleted 再加 EXPUNGE,两阶段缺一不可,只做前一步邮件只是被标记
  • 在未选信箱的状态下发 FETCH 或 SEARCH:服务端回 BAD,看起来像客户端故障,其实是状态机用错
  • 忽略 UIDVALIDITY 变化:客户端按旧 UID 继续同步会显示错误的邮件内容
  • 明文 143 端口直接 LOGIN:凭据可被旁路窃取,应先 STARTTLS 再认证,或直接用 993

数据来源与参考

  • RFC 3501 §6(命令)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌