mailkit - 如何从 IMessageSummary 获取 MimeMessage?

标签 mailkit

我正在使用 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/

相关文章:

email - Mailkit 不使用凭据进行身份验证

c# - 使用 MailKit 的单个 SMTP 事务向多个收件人发送电子邮件

c# - DKIM 签名失败,正文哈希未验证 Mimekit 1.10.1.0,Mailkit 1.10.2.0

c# - 检索 IMAP 子文件夹

azure - 如何将 MailKit 与 IMAP for Exchange 结合使用,将 OAuth2 用于守护程序/非交互式应用程序

c# - Mailkit:获取消息并将它们复制到 MySQL,附件到驱动器

c# - MailKit:如何迭代最近的电子邮件以获取具有给定主题的电子邮件

c# - 使用 MailKit (C#) 转发电子邮件