首页/网络/协议速查/IMAP UID 与 UIDVALIDITY

IMAP UID 与 UIDVALIDITY

UID 是邮件在信箱内的持久编号;UIDVALIDITY 是编号空间的「版本号」,一旦变化(信箱重建/迁移),客户端必须全量重新同步。

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

IMAP UID 与编号空间

UID 是邮件在信箱内的持久编号,跨会话稳定,用来长期引用某一封邮件。UIDVALIDITY 是这套编号空间的版本号,在选中信箱时下发给客户端,一旦它的值发生变化,就意味着旧编号全部作废,客户端必须全量重新同步。与之相对的是消息号:那是会话内的序号,删掉一封邮件后面的编号整体前移,只能在当次会话里用。

基本信息

UID信箱内单调递增,跨会话稳定
UIDVALIDITY编号空间的版本号,随选中信箱下发
消息号会话内从一到若干的序号,频繁变动
本地缓存键应以版本号加编号的组合作为主键
命令区分命令前加 UID 前缀即按 UID 操作
作用范围仅在同一个信箱内有效

三种标识对照

标识稳定性适用场景
消息号仅限当次会话临时批量操作
UID跨会话稳定本地数据库引用与增量同步
UIDVALIDITY变化即代表全量失效缓存有效性的判断依据

观察相关应答

观察相关应答
a3 SELECT INBOX
* OK [UIDVALIDITY 3857529045] UIDs valid   # 记录这个版本号
* 23 EXISTS                                  # 当前消息数量
a4 UID FETCH 100:110 (UID FLAGS)             # 按 UID 取信息
a5 UID SEARCH UID 200:*                      # 按 UID 范围检索

典型使用场景

  • 客户端本地缓存设计:以版本号加编号为键,避免引用错位
  • 增量同步实现:只拉取编号大于本地记录的邮件
  • 迁移后重新同步:识别版本号变化并触发全量重建
  • 排查同步异常:确认是编号空间变化还是缓存逻辑缺陷
  • 脚本安全操作:用 UID 定位目标,避免整理过程中误操作他封邮件
服务器迁移或信箱重建会让编号空间版本号发生变化,客户端因此把本地缓存全部作废并重新下载。这是协议要求的行为,不是故障;但它会带来明显的流量与耗时,迁移前应评估同步窗口,尽量避开使用高峰。

易错点

  • 拿消息号当本地数据库主键:删除或移动几次后引用全部错位
  • 忽略版本号变化继续用旧缓存,表现为邮件对不上或重复显示
  • 用 UID 跨信箱引用邮件:编号只在同一个信箱内有效,换信箱即失效
  • 脚本整理邮件时用序号定位,中途一次删除就让后续目标全部偏移
  • 把迁移后的全量重同步当成故障去反复重启客户端,反而拉长同步时间

数据来源与参考

  • RFC 3501 §2.3.1.1(UID)

相关工具

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