如何访问嵌入的附件

本文关键字:何访问 访问 | 更新日期: 2023-09-27 18:02:57

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

我正在使用ImapClient接收可以具有各种附件(图像,文本文件,二进制文件等(的电子邮件。

MimeMessage的Attachment属性可帮助我访问所有这些附件---,除非电子邮件是使用Apple Mail发送并且包含图像(似乎Apple Mail不会附加带有内容处置"附件"的图像(阅读此处...杰弗里·斯特德法斯特在最底部的评论(。

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

我有哪些选择?我真的必须一个接一个地遍历身体部位,看看里面有什么吗?还是有更简单的解决方案?

如何访问嵌入的附件

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

首先,让我们看一下 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.IsMimeType ("image", "*")).ToList ();

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