Mailkit folder.Search 方法包括最后一封电子邮件,即使其 ID 小于指定的 ID

Mailkit folder.Search method includes the last email, even if its ID is less that specified

我正在使用 Mailkit,并希望获取所有 UniqueId 大于指定值的邮件。

根据已接受的答案 ,“如果您的客户端程序在上一个会话中看到的最后一个 UID 是 123456,您实际上希望搜索以 UID 开头123457”,所以我应该使用这样的代码...

var range = new UniqueIdRange (new UniqueId ((uint) 123457), UniqueId.MaxValue);

好吧,我正在这样做,但是当我这样做时返回的 ID 列表...

var uids = inbox.Search(range, SearchQuery.All).ToList();

包括文件夹中最后一封邮件的 ID,即使它小于 123457。换句话说,搜索包括 123456。

这似乎只有在自 123456 以来没有任何新消息时才会发生。如果有,则 123456 将不会包含在 returned ID 列表中。

我是不是做错了什么?我复制的代码是包作者自己贴出来的,所以我猜应该是正确的。那为什么我得到的是我已经拥有的 ID?如果没有任何 ID 大于 123456 的消息,我会期望 Search 到 return 一个空列表。

谢谢

IMAP 规范中的消息范围有些微妙。

首先,a:bb:a 是相同的:所有消息都在 a 和 b 的 ID 之间,顺序不限。最小的数字是第一个还是第二个都没有关系。 2:55:2 意思相同。

其次,* UID的意思是“文件夹中当前最大的数字”,所以如果你最大的消息是20条,那就是20条。

组合,这意味着如果您搜索 123457:* 并且 123456 是您最大的邮件,这意味着您搜索的是 123457:123456,即从 123456 到 123457 的任何邮件。由于这包括你的最后一条消息,它被退回。你应该把它过滤掉。

如果您有新消息,例如您的最高消息现在是 123460,则搜索的意思是 123457:123460,它将执行您想要的操作。