MailKit从IMAP服务器获取指定范围Uid的搜索查询实现方法
MailKit 获取指定数量UID的实现方案
不需要先获取全量UID再本地截取,MailKit 原生支持在服务端侧限制返回UID的数量,能大幅减少不必要的带宽消耗和性能损耗。
最优实现方案
直接使用 SortAsync 自带的分页重载方法,参数分别为偏移量、返回最大条数、查询条件、排序规则,示例代码如下:
// 从最新的邮件开始,取前10条的UID var uids = await client.Inbox.SortAsync(0, 10, SearchQuery.All, new [] { OrderBy.ReverseDate });
该方法会直接让IMAP服务端返回符合要求的10条UID,无需本地二次处理。
兼容旧版本的降级方案
如果你使用的MailKit版本较老,不支持上述分页重载,可以临时使用全量获取后截取的方案,仅建议在邮箱内邮件数量较少的场景下使用:
var allUids = await client.Inbox.SortAsync(SearchQuery.All, new [] { OrderBy.ReverseDate }); var top10Uids = allUids.Take(10).ToList();
拉取邮件正文结构
拿到10条UID后,直接批量拉取对应邮件的结构即可:
// 按需调整要拉取的邮件字段 var messageSummaries = await client.Inbox.FetchAsync(top10Uids, MessageSummaryItems.Full | MessageSummaryItems.BodyStructure);
内容的提问来源于stack exchange,提问作者Muhammad Jamali
相关产品推荐
相关产品推荐

