微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在使用 Mailkit,并且想要获取所有 UniqueId 大于指定值的邮件

根据接受的答案 here,“如果您的客户端程序在前一个会话中看到的最后一个 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 将不会包含在返回的 ID 列表中。

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

谢谢

解决方法

IMAP 规范中有一些关于消息范围的微妙之处。

首先,a:bb:a 是相同的:a 和 b 的 id 之间的所有消息,以任一顺序。最小的数字是第一还是第二并不重要。 2:55:2 是同一个意思。

其次,* UID 表示“当前文件夹中最大的数字”,因此如果您的最大消息是 20,则表示 20。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。