如何在不下载附件的情况下获取邮件正文

本文关键字:情况下 正文 获取 下载 | 更新日期: 2023-09-27 17:57:02

我正在使用名为:MailKit的IMAP4客户端。它工作得很好,但是我在不下载附件的情况下获取消息正文时遇到了问题。我想显示邮件的正文以及附件,但前提是当用户单击附件时,我想实际下载附件。

我试过:

var message = inbox.GetMessage(uid, cancel.Token);

但这得到了整个信息。

还尝试过:

uids[0] = uid;
var ms = inbox.Fetch(uids, MessageSummaryItems.BodyStructure , cancel.Token);  
var bp1 = inbox.GetBodyPart(uid, ms.First().Body, cancel.Token);

但同样会下载附件。

如何在不下载附件的情况下获取邮件正文

使用示例代码,您将下载整个消息,因为您正在请求消息的顶级正文部分。

MIME是"身体部位"的树形结构。您要做的是遍历毫秒。第一()。正文以查找所需的部件,然后使用 GetBodyPart() 方法单独下载它们。

看看MailKit.BodyPartMultipart,MailKit.BodyPartMessage,MailKit.BodyPartBasic和MailKit.BodyPartText。

BodyPartMultipart 包含其他身体部位。

BodyPartMessage 部件包含一条消息(该消息还将包含正文部件)。

BodyPartBasic 是一个基本的叶节点身体部分 - 通常是一个"附件"。

BodyPartText 是一个文本部分(BodyPartBasic 的子类),它可以是附加的文本部分,也可以是您可能认为是消息的主要文本。

要确定 BodyPartBasic 是要内联显示还是作为附件显示,您需要做的是:

if (part.ContentDisposition != null && part.ContentDisposition.IsAttachment)
    // it is an attachment
else
    // it is meant to be shown to the user as part of the message
    // (if it is an image, it is meant to be displayed with the text)

我可能应该在 BodyPartBasic 中添加一个名为 IsAttachment 的便利属性,以使其更简单(我今天将尝试添加它)。

希望有帮助。

更新:我刚刚在 git master 中添加了 BodyPartBasic.IsAttachment 便利属性,因此下一版本的 MailKit 将具有它。

此 IMAP 命令将仅返回文本正文。

     a1 uid fetch <uid> (body.peek[text])

-瑞克