我使用MailKit获得如下所示的完整IMessageSummaries列表:
var allMessages = remoteFolder.Fetch(remoteIndexList, MessageSummaryItems.Full | MessageSummaryItems.Flags | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);
我对任何优化都不感兴趣,比如下载IMessageSummary的部分等等,我只想尽可能快地获得全部数据。
但是使用上述方法,我无法正确读取消息正文中的HTML,例如使用HtmlPreviewVisitor
,因为IMessageSummary
的Body
属性是BodyPartBasic
。显然,我需要整个MimeMessage
。
问题是,如果我想获得多个MimeMessages
,我不能,我只能使用ImapClient.GetMessage(int index, ...)
方法一次得到一个。
是否有一种方法可以从用于创建MimeMessage
的原始IMessageSummary
中提取所有部件,并与HtmlPreviewVisitor
一起使用它们,而不必再次下载每个完整的MimeMessage
?
发布于 2017-10-17 20:50:33
你需要做的是:
foreach (var item in allMessages) {
var message = remoteFolder.GetMessage (item.UniqueId);
}
IMessageSummary
实际上并不包含消息或下载消息,它只要求IMAP服务器提供有关消息的各种元数据(例如消息的结构、标记(如读/未读、发送方、主题、日期、to、cc、答复-to等))。
如果您对从IMAP服务器中获取单个MIME部件没有兴趣,那么您可能希望使用一组简化的MessageSummaryItems
,如MessageSummaryItems.All | MessageSummaryItems.UniqueId
(我知道,All
似乎应该包含比Full
更多的内容,但这不是IMAP别名的工作方式…)。
根据您计划使用的数据片段,您甚至可以进一步减少所请求的MessageSummaryItems
。
例如,如果您不使用IMessageSummaryItem.Envelope
属性,那么您就不需要MessageSummaryItems.Envelope
标志,并且通过不请求它,您将加快查询速度,因为IMAP服务器不会向您发送那么多信息。
https://stackoverflow.com/questions/46792207
复制相似问题