是通过IMAP会话中的“select”还是“检查”IMAP命令来为消息分配消息号?

基本上,第一条消息将在另一个IMAP会话/位置下保持第一位?

UID将永远保持不变,只要UIDVALIDITY不变(UIDVALIDITY改变的情况非常罕见)

MSGNO(从1到“EXISTS”的序列)对于此特定连接是本地的。 如果您的客户端打开多个连接,MSGNO实际上可以在每个不同。

也就是说,MSGNO和UID总是以相同的方式sorting。 更高的MSGNO将始终映射到更高的UID。

某些IMAP命令可能会导致MSGNO更改 – 但您将始终看到一个EXPUNGE结果,告诉您哪一个被删除 – 所有更高的数字在该点处减1。 如果新消息被添加,你会得到一个更新的EXISTS以及告诉你多less。

(所有这些变化,如果你“启用QRESYNC”和服务器支持它,但这是基本的IMAP规则)。

正如Janne在评论中指出的那样–RFC3501包含了关于哪些命令被允许改变MSGNO,哪些命令必须保留它的所有细节,即使一些MSGNO现在指向被删除的消息。

简而言之,如果您在同一会话中的不同会话或不同连接之间进行交互,请使用这些命令的UID变体,这样您就会安全无虞。