Imap 命令变得混乱

Imap Command Getting Confused

我正在使用 Imap 命令提取大量电子邮件,因此我的流程如下所示

A6 UID FETCH 960 (FLAGS UID BODY[])
* 3 FETCH (UID 960 FLAGS (\Seen) BODY[] {22655}
A6 OK UID completed

以上是我99%的情况下收到消息成功

但是还有像下面这样的1%

A72 UID FETCH 963 (FLAGS UID BODY[])
 * 7670 FETCH (FLAGS () UID 10667)

这些消息我无法阅读,它们失败了

如果我执行以下操作

    while (!sizeLine.Contains("BODY"))
    {
        sizeLine = ReadLine();
    }

我会得到类似这个例子的结果

A201 UID FETCH 1649 (FLAGS UID BODY[])
* 7670 FETCH (FLAGS () UID 10667) <--- why ?
* 7674 FETCH (FLAGS () UID 10671) <--- why ?
* 198 FETCH (UID 1649 FLAGS (\Seen) BODY[] {22386} <--- this is what I expected

所以有解决方法但不确定它是否正确?

IMAP 是一种缓存填充协议。假定您的客户端有一个缓存,当缓存中缺少某些内容时,您告诉服务器您需要什么,服务器会将您的内容发送到缓存中。

请注意,服务器可能会出于 "you asked for this" 以外的原因将您的内容发送到缓存。最常见的其他原因是 "some new mail arrived" 和 "someone else read/deleted some mail"。

服务器正常意味着"I've sent you all the stuff you asked for",也许服务器还给您发送了一些。

在这种情况下,服务器向您发送了三件东西:"The flags for UID 10667 are now an empty list"、"The flags for UID 10671 are now an empty list" 和您要求的那件。发送标志更新的通常原因是 many/most 客户端显示那些,例如一些以粗体显示看不见邮件的主题。没关系。服务器正在尝试提供帮助,但不知道它是否真正帮助了您。