我正在使用 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, ...) 一次获取一个
方法。
有没有办法从用于创建 IMessageSummary
的原始 MimeMessage
中提取所有部分,并将它们与 HtmlPreviewVisitor
一起使用,而无需必须再次下载每个完整的 MimeMessage
?
最佳答案
您需要做的是:
foreach (var item in allMessages) {
var message = remoteFolder.GetMessage (item.UniqueId);
}
IMessageSummary
实际上并不包含消息或下载消息,它只是向 IMAP 服务器询问有关消息的各种元数据(例如消息的结构、标志等)已读/未读、发件人、主题、日期、收件人、抄送、回复等)。
如果您对从 IMAP 服务器获取各个 MIME 部分不感兴趣,那么您可能需要使用一组精简的 MessageSummaryItems
,例如 MessageSummaryItems.All | MessageSummaryItems.UniqueId
(我知道,All
似乎应该包含比 Full
更多的内容,但这不是 IMAP 别名的工作方式...)。
您甚至可以进一步减少您请求的 MessageSummaryItems
,具体取决于您计划使用的数据片段。
例如,如果您不使用 IMessageSummaryItem.Envelope
属性,则不需要 MessageSummaryItems.Envelope
标志,并且通过不请求它,您可以会加快查询速度,因为 IMAP 服务器不会向您发送那么多信息。
关于mailkit - 如何从 IMessageSummary 获取 MimeMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792207/