Imap命令感到困惑

时间:2018-10-19 12:31:46

标签: c# imap

我正在使用Imap Commands提取一堆电子邮件,因此我的流程就像下面的

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

因此可以解决,但不确定是否正确吗?

1 个答案:

答案 0 :(得分:3)

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

请注意,服务器可能会出于“您要求这样做”以外的其他原因向您发送要缓存的内容。其他最常见的原因是“收到了一些新邮件”和“其他人已读/删除了一些邮件”。

服务器的正常状态表示“我已将您要求的所有内容发送给您”,也许服务器也向您发送了更多内容。

在这种情况下,服务器向您发送了三件事:“ UID 10667的标志现在为空列表”,“ UID 10671的标志现在为空列表”和您所要求的。发送标记更新的通常原因是许多/大多数客户端都显示这些标记,例如,某些客户端以粗体显示未见邮件的主题。没关系服务器正在尝试提供帮助,但不知道它是否真的对您有所帮助。

相关问题