区分内联附件和普通附件

在邮件正文中可能包含内联图片,同时还可能有普通附件,这是常见情形。使用 MailMessage 类提取内联附件可以从 LinkedResourceCollection 类,而普通附件可以通过 AttachmentCollection 消息的类。然而,当使用 Aspose.Email.Mapi.MapiMessage 类加载消息时,所有内联图片和普通附件都在同一个 MapiAttachmentCollection 类中可供用户访问。因此,需要设计一种方法,在使用 MapiMessage 时能够区分内联附件和普通附件。

使用 Aspose.Email 区分内联和普通附件

本文阐述了如何使用 MapiMessage 区分内联附件和普通附件。为确定这种区分,需要考虑 MapiMessage 的正文类型,如下所示:

Plain Text 正文: 文本正文类型的邮件无需检查,因为此类邮件中的所有附件始终为普通附件。

Html 正文: 对于 HTML 正文类型的邮件,附件不仅应包含 PR_ATTACH_FLAGS (0x37140003) 属性,而且其值应等于 0x00000004 才视为内联附件。如果满足此条件,则进一步依据 PR_ATTACH_CONTENT_LOCATION 和 PR_ATTACH_CONTENT_ID 标记来确定附件性质。但如果缺少 PR_ATTACH_FLAGS Mapi 标记,则检查 PR_ATTACH_DISPOSITION (0x3716001F 或 0x3716001E) 属性以确定附件类型。

Rtf 正文: 如果正文是 RTF,则所有 OLE 附件都是内联附件。所有 OLE 附件的 PR_ATTACH_METHOD 值等于 0x00000006。

以下代码示例演示如何以编程方式区分内联附件和普通附件。函数 IsInlineAttachment 接受附件和消息 BodyType 作为输入参数,如果附件是内联附件则返回 true。