如何访问嵌入式附件?

Ing*_*mar 4 c# mimekit

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

我正在使用ImapClient接收可能具有不同附件(图像,文本文件,二进制文件等)的电子邮件.

MimeMessage的Attachment属性帮助我访问所有这些附件 - 除非电子邮件与Apple Mail一起发送包含图像(似乎Apple Mail没有附加带有内容处置的图像"附件"(在此处阅读...来自Jeffrey Stedfast的评论)在最底部).

附件集合中列出嵌入的图像.

我有什么选择?我是否真的必须逐个穿过身体部位,看看里面是什么?或者是否有更简单的解决方案?

jst*_*ast 5

" 使用消息"文档列出了一些检查消息中MIME部分的方法,但另一个简单的选项可能是使用该BodyParts属性MimeMessage.

首先,让我们来看看该MimeMessage.Attachments属性的工作原理:

public IEnumerable<MimeEntity> Attachments {
    get { return BodyParts.Where (x => x.IsAttachment); }
}
Run Code Online (Sandbox Code Playgroud)

正如你已经注意到,这个属性不返回你正在寻找附件的原因是因为他们没有Content-Disposition: attachment这是什么MimeEntity.IsAttachment性质的检查.

备用规则可能是检查文件名参数.

var attachments = message.BodyParts.Where (x => x.ContentDisposition != null && x.ContentDisposition.FileName != null).ToList ();
Run Code Online (Sandbox Code Playgroud)

或许你可以说你只想要所有图像:

var images = message.BodyParts.OfType<MimePart> ().Where (x => x.ContentType.Matches ("image", "*")).ToList ();
Run Code Online (Sandbox Code Playgroud)

希望能为您提供有关如何获得所需物品的一些想法.