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

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

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

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

Текстовое тело в виде обычного текста:  Сообщения электронной почты с текстовым типом текста проверять не нужно, так как все вложения в таких сообщениях всегда являются обычными вложениями.

Тело 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 принимает вложение и Message BodyType в качестве входных параметров и возвращает значение true, если вложение является встроенным вложением.