繁体   English   中英

Mimekit / mailkit下载邮件正文?

[英]Mimekit/mailkit download message body?

我最近一直在制作自己的邮件客户端,并添加了一个接收选项,我使用mimekit和mailkit作为插件,并且能够使用应该显示内容的阅读器下载我的大部分邮件(现在它显示主题,来自,来自, ,日期)

我下载主题的方式是,...是msg.envelope.subject,msg.envelope.to但我无法下载这样的身体:(当做msg.body,msg.textbody,msg.bodyparts ,. ..他们都导致了NOTHING,它应该是空的地方,我无法下载:(

谁能帮我?

获取邮件正文有两种方法:

1.下载整个消息

这种方法可能是最简单的方法。

要做到这一点,您需要做的就是致电:

var message = folder.GetMessage (uid);

要么

var message = folder.GetMessage (index);

我建议始终使用消息的UniqueId 由于您已经在使用Fetch方法,因此要确保您拥有消息的UniqueId ,您需要做的就是在获取请求中包含MessageSummaryItems.UniqueId

var messages = folder.Fetch (0, -1, MessageSummaryItems.UniqueId |
    MessageSummaryItems.Envelope | ...);

收到消息后,您可以随心所欲地做任何事情。

为了呈现消息,我建议您查看MimeKit GitHub存储库中包含的MessageReader示例。

它将向您展示如何正确呈现MimeMessage

2.仅下载您需要的内容

这种方法有点难,但网络带宽的使用而言可能更有效。

您需要做的第一件事是确保在Fetch方法中包含MessageSummaryItems.BodyStructure位标志。 例如:

var messages = folder.Fetch (0, -1, MessageSummaryItems.Envelope | 
    MessageSummaryItems.BodyStructure);

(您可能需要其他字段,但这只是一个示例,向您展示如何按位或标记一起请求多个消息摘要项)。

通过请求消息的BodyStructure ,您将能够使用msg.Body属性。

每个msg.Body都是一个BodyPart对象,它是一个抽象类。 2个主要的子类是BodyPartMultipartBodyPartBasic 您可以使用as cast或is关键字来确定它是哪一个:

var multipart = msg.Body as BodyPartMultipart;

if (multipart != null) {
    // the top-level body part is a multi-part
} else {
    // the body is a basic singleton part
}

这是你如何迭代BodyPartMultipart的子部分:

foreach (var part in multipart.BodyParts) {
    // each part will either be a BodyPartMultipart
    // or a BodyPartBasic, just like before...
}

还有2个BodyPartBasic子类: BodyPartTextBodyPartMessage BodyPartText是基于文本的MIME部分(意味着它具有MIME类型text/* ),而BodyPartMessage是嵌入式消息(并且将具有MIME类型的message/rfc822 )。

由于MIME是递归的,因此您需要实现一个递归函数来遍历MIME树结构以查找您要查找的任何MIME部分。

为方便起见, IMessageSummary界面上的TextBodyHtmlBody属性将分别定位并返回text/plaintext/html正文部分。

但是应该注意,这些属性仅适用于消息结构遵循标准约定的情况(注意我所说的约定 ,没有正式标准规定消息文本在MIME层次结构中的位置)。

还应该注意的是,如果您的邮件客户端将呈现HTML正文,则HTML正文部分可能是一组相关MIME部分(即multipart/related的子HtmlBody )的一部分,但HtmlBody属性将无法返回它,因此实现自己的递归逻辑将是一个更好的选择。

有关如何执行此ImapClientDemo示例,请查看MailKit GitHub存储库中的ImapClientDemo示例。 逻辑当前位于MainWindow.cs代码中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM