基本上,第一条消息是否会在另一个 IMAP 会话/位置下保持第一条消息?
答案1
只要 UIDVALIDITY 不变,UID 就会永远保持不变(UIDVALIDITY 很少发生变化)
MSGNO(从 1 到“EXISTS”的序列)是此特定连接的本地 MSGNO。如果您的客户端打开多个连接,则每个连接的 MSGNO 实际上可能不同。
也就是说,MSGNO 和 UID 总是以相同的方式排序。较高的 MSGNO 总是会映射到较高的 UID。
一些 IMAP 命令可能会导致 MSGNO 发生变化 - 但您始终会看到 EXPUNGE 结果,告诉您删除了哪个消息 - 此时所有较大的数字都会减少 1。如果添加了新消息,您还会收到更新的 EXISTS 来告诉您有多少消息。
(如果您“启用 QRESYNC”并且服务器支持它,那么所有这些都会改变 - 但这是基本 IMAP 的规则)。
正如 Janne 在评论中指出的那样 - RFC3501 包含关于哪些命令被允许更改 MSGNO 以及哪些命令必须保留它的所有详细信息,即使某些 MSGNO 现在指向已删除的消息。
简而言之 - 如果您在不同的会话或同一会话内的不同连接之间进行交互,请使用命令的 UID 变体,这样您就会很安全。