我正在使用 MailKit 获取完整的 IMessageSummaries 列表,如下所示:
var allMessages = remoteFolder.Fetch(remoteIndexList, MessageSummaryItems.Full | MessageSummaryItems.Flags | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);
Run Code Online (Sandbox Code Playgroud)
我对任何优化不感兴趣,例如下载 IMessageSummary 的部分内容等,我只想要整个数据,尽快获取。
但是使用上述方法,我无法正确读取消息正文中的 HTML,例如使用,HtmlPreviewVisitor因为Body的属性IMessageSummary是BodyPartBasic. 显然,我需要整个MimeMessage。
问题是,如果我想获得多个MimeMessages,我不能,我只能使用方法一次获得一个ImapClient.GetMessage(int index, ...)。
MimeMessage有没有一种方法可以从用于创建IMessageSummary和使用它们的原始文件中提取所有部分,而HtmlPreviewVisitor无需再次下载完整的部分MimeMessage?
你需要做的是:
foreach (var item in allMessages) {
var message = remoteFolder.GetMessage (item.UniqueId);
}
Run Code Online (Sandbox Code Playgroud)
实际上并不IMessageSummary包含消息或下载消息,它只是向 IMAP 服务器询问有关消息的各种元数据(例如消息的结构、已读/未读等标志、发件人、主题、日期、收件人、抄送、回复等)。
如果您对从 IMAP 服务器获取各个 MIME 部分不感兴趣,那么您可能希望使用一组精简的MessageSummaryItems(MessageSummaryItems.All | MessageSummaryItems.UniqueId我知道,All似乎它应该包含多个Full,但这不是 IMAP 别名的工作方式... )。
您甚至可以进一步减少MessageSummaryItems您所请求的数据,具体取决于您计划使用的数据片段。
例如,如果您不使用该IMessageSummaryItem.Envelope属性,则不需要该MessageSummaryItems.Envelope标志,并且通过不请求它,您将加快查询速度,因为 IMAP 服务器不会向您发送那么多信息。
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |