IMAP 标志是什么
IMAP 把邮件的状态保存在服务器上,用标志(flag)来表达:已读、已回复、星标、待删除、草稿、新到。多个客户端之所以能同步「哪些邮件读过了」,靠的就是读写这些标志,而不是把状态存在本机。系统标志以反斜杠开头,由协议固定;在服务器支持的情况下还可以使用自定义关键字标志来做更细的分类。
基本信息
| 存储位置 | 服务器端的邮箱状态里 |
|---|---|
| 系统标志 | 以反斜杠开头,如 \Seen、\Deleted |
| 自定义标志 | 用户关键字,需服务器支持 |
| 同步实质 | 客户端读写标志并解析变化 |
| 命令 | STORE 写入,FETCH 读取,EXPUNGE 生效删除 |
| 权限 | 需要邮箱的读写权限,只读账号只能查看 |
标志含义与来源
| 标志 | 含义 | 通常由谁设置 |
|---|---|---|
| \Seen | 已读 | 客户端,或 FETCH 正文时自动置位 |
| \Answered | 已回复 | 客户端 |
| \Flagged | 星标,标记为重要 | 客户端 |
| \Deleted | 待删除,等 EXPUNGE 生效 | 客户端 |
| \Draft | 草稿 | 客户端 |
| \Recent | 本会话新到,只读 | 服务器 |
读写与生效
读写与生效
a1 STORE 7 +FLAGS (\Seen) # 追加标志
a2 STORE 7 -FLAGS (\Flagged) # 去掉标志
a3 STORE 7 FLAGS (\Deleted) # 替换式赋值
* 7 FETCH (FLAGS (\Deleted)) # 服务器回显确认
a4 EXPUNGE # 真正删除已标记的邮件典型使用场景
- 排查「手机读过了电脑还是未读」:检查客户端是否被设为只读或未同步标志
- 容量清理:确认 \Deleted 是否已被 EXPUNGE,未生效的邮件仍占服务器空间
- 自动化归档:脚本按 \Flagged 或自定义关键字挑选邮件再移动
- 迁移与备份:工具会读取并重放标志,遗漏会导致迁移后全是未读
- 权限验证:用只读账号登录后尝试写标志,应被服务器拒绝
两个容易踩的点:\Recent 是会话级状态,客户端不能设置;EXPUNGE 会永久删除邮件并可能改变消息序号,稳定的引用应该用 UID 而不是序号。自动化脚本操作前先 FETCH 一遍确认目标,避免删错。另外不同客户端对「移动到文件夹」的实现并不一致:有的用复制加删除,有的依赖服务器扩展,迁移工具选型前先验证标志能否完整重放。