如何获取邮件正文而不下载附件

问题描述 投票:0回答:2

我正在使用名为: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);

但是再次下载附件。

c# .net imap mailkit
2个回答
2
投票

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

MIME是“正文部分”的树结构。你想要做的是遍历ms.First()。正文以找到你想要的部分,然后使用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的下一个版本将拥有它。


0
投票

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

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

-Rick

© www.soinside.com 2019 - 2024. All rights reserved.