如何访问嵌入式附件?

How to access embedded attachments?

我正在使用 MailKit/MimeKit 1.2.7(最新的 NuGet 版本)。

我正在使用 ImapClient 接收可能包含各种附件(图像、文本文件、二进制文件等)的电子邮件。

MimeMessage 的 Attachment 属性 帮助我访问所有这些附件 --- 除非使用 Apple Mail 发送的电子邮件包含图像(看起来Apple Mail 不附加带有 Content-Disposition "attachment" 的图像(阅读 here ... 最底部 Jeffrey Stedfast 的评论)。

嵌入的图像列在附件collection中。

我有哪些选择?我真的必须一个一个地遍历 body 个部分,看看里面有什么吗?或者有更简单的解决方案吗?

Working with Messages 文档列出了几种检查消息中 MIME 部分的方法,但另一个简单的选择可能是使用 [=14= 上的 BodyParts 属性 ].

首先,让我们来看看 MimeMessage.Attachments 属性 是如何工作的:

public IEnumerable<MimeEntity> Attachments {
    get { return BodyParts.Where (x => x.IsAttachment); }
}

正如您已经注意到的,此 属性 没有 return 您正在寻找的附件的原因是因为它们没有 Content-Disposition: attachment 这就是MimeEntity.IsAttachment 属性 正在检查。

另一个规则可能是检查文件名参数。

var attachments = message.BodyParts.Where (x => x.ContentDisposition != null && x.ContentDisposition.FileName != null).ToList ();

或者您可以说您只想要所有图片:

var images = message.BodyParts.OfType<MimePart> ().Where (x => x.ContentType.IsMimeType ("image", "*")).ToList ();

希望这能给你一些关于如何获得你想要的物品的想法。