如何从IMessageSummary获取MimeMessage?

时间:2017-10-17 14:09:24

标签: mailkit

我使用MailKit获取完整的IMessageSummaries列表,如下所示:

var allMessages = remoteFolder.Fetch(remoteIndexList, MessageSummaryItems.Full | MessageSummaryItems.Flags | MessageSummaryItems.UniqueId | MessageSummaryItems.BodyStructure);

我对下载IMessageSummary等部分的任何优化都不感兴趣,我只想要整个数据,尽可能快地得到它。

但是使用上述方法,我无法正确阅读邮件正文中的HTML,例如使用HtmlPreviewVisitor,因为Body属性IMessageSummaryBodyPartBasic。我显然需要整个MimeMessage

问题在于,如果我想获得多个MimeMessages,我就不能,我只能使用ImapClient.GetMessage(int index, ...)方法一次获得一个。

有没有办法从用于创建MimeMessage的原始IMessageSummary中提取所有部分,并将其与HtmlPreviewVisitor一起使用,而无需下载每个MimeMessage GPlusMgr::Get().GetGameServices()->Snapshots().Open(gpg::DataSource::CACHE_OR_NETWORK, Filename.ToASCII(), gpg::SnapshotConflictPolicy::MANUAL, [this](gpg::SnapshotManager::OpenResponse res) { if (res.conflict_id != "") { // Do scary conflict resolution dance. } else { // No conflict, just save to cloud. } 再次?

1 个答案:

答案 0 :(得分:2)

您需要做的是:

foreach (var item in allMessages) {
    var message = remoteFolder.GetMessage (item.UniqueId);
}

IMessageSummary实际上并不包含消息或下载消息,它只是向IMAP服务器询问有关消息的各种元数据(例如消息的结构,诸如read /之类的标志)未读,发件人,主题,日期,到,抄送,回复等)。

如果您不想从IMAP服务器获取单个MIME部分,那么您可能希望使用简化的MessageSummaryItems集合,例如MessageSummaryItems.All | MessageSummaryItems.UniqueId(我知道,All似乎它应该包含超过Full,但这不是IMAP别名的工作原理......)。

根据您计划使用的数据,您甚至可以进一步减少所请求的MessageSummaryItems

例如,如果您不使用IMessageSummaryItem.Envelope属性,那么您不需要MessageSummaryItems.Envelope标志,并且不请求它,您将加速查询,因为IMAP服务器不会向你发送尽可能多的信息。

相关问题