如何访问嵌入式附件?

时间:2015-07-15 07:15:53

标签: c# mimekit

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

我正在使用ImapClient接收可能包含不同附件(图片,文本文件,二进制文件等)的电子邮件。

MimeMessage的Attachment属性可以帮助我访问所有这些附件 - 除非通过Apple Mail 包含图像发送电子邮件(Apple Mail似乎没有使用Content-Disposition"附加"附上图片(阅读here ...来自最底层的Jeffrey Stedfast的评论)。

“附件”集合中列出了的嵌入图像。

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

1 个答案:

答案 0 :(得分:5)

Working with Messages文档列出了一些检查邮件中MIME部分的方法,但另一个简单的选项可能是使用BodyParts上的MimeMessage属性。

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

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

正如您已经指出的那样,此属性不返回您要查找的附件的原因是因为它们没有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.Matches ("image", "*")).ToList ();

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