Различие между встроенными и обычными вложениями

Это распространённый сценарий, когда письмо может содержать встроенные изображения в теле, а также связанные с ним обычные вложения. Используя MailMessage класс, встроенные вложения можно извлечь из LinkedResourceCollection класс, тогда как обычные вложения можно получить/извлечь с помощью AttachmentCollection класс сообщения. Однако ситуация меняется, когда сообщение загружается с помощью класса Aspose.Email.Mapi.MapiMessage, так как все встроенные изображения и обычные вложения доступны пользователю в одном классе MapiAttachmentCollection. Поэтому необходимо разработать метод, позволяющий различать встроенное и обычное вложение при использовании MapiMessage.

Использование Aspose.Email для различения встроенных и обычных вложений

В этой статье объясняется, как различать встроенные и обычные вложения с помощью MapiMessage. Для определения различия учитывается тип тела MapiMessage следующим образом:

Тело Plain Text: Для сообщений с типом тела 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‑вложения являются встроенными. Значение PR_ATTACH_METHOD для всех OLE‑вложений равно 0x00000006.

Ниже приведённый пример кода демонстрирует программное различие между встроенными и обычными вложениями. Функция IsInlineAttachment принимает вложение и тип тела сообщения в качестве входных параметров и возвращает true, если вложение является встроенным.