Управление вложениями сообщения

Работа с вложениями в Outlook

Создание и сохранение сообщений Outlook (файлы MSG) объясняет, как создавать и сохранять сообщения, а также как создавать файлы MSG со вложениями. Эта статья объясняет, как работать с вложениями Microsoft Outlook с помощью Aspose.Email. Вложения из файла сообщения получаются и сохраняются на диск с использованием MapiMessage класс Вложения свойства. The Вложения свойство является коллекцией типа MapiAttachmentCollection класс.

Проверка типа вложения (Встроенное или обычное)

Встроенные и обычные вложения служат разным целям. Встроенные вложения визуально интегрированы в электронное письмо и обычно представляют собой изображения или медиафайлы. Обычные вложения — это отдельные файлы, прикрепленные к письму, и могут включать различные типы файлов. The MapiAttachment.IsInline свойство MapiAttachment Проверить, является ли вложение встроенным или обычным

Следующий пример кода извлекает и отображает информацию о каждом вложении в загруженном MapiMessage, включая их отображаемые имена и информацию о том, являются ли они встроенными вложениями.

var message = MapiMessage.Load(fileName);

foreach (var attach in message.Attachments)
{
    Console.WriteLine($"{attach.DisplayName0} : {attach.IsInline)}");
}

Проверка типа вложения (IsReference)

Этот MapiAttachment класс включает IsReference свойство, позволяющее разработчикам идентифицировать ссылочные вложения в сообщении. С помощью следующего примера кода можно проверить, является ли вложение ссылочным:

foreach (var attachment in msg.Attachments)
{
    if (attachment.IsReference)
    {
        // Process reference attachment
    }
}

Сохранение вложений из файлов MSG

Чтобы сохранить вложения из файла MSG:

  1. Итерируйтесь по MapiAttachmentCollection коллекцию и получайте отдельные вложения.
  2. Чтобы сохранить вложения, вызовите метод Save() класса MapiAttachment.

Следующий фрагмент кода показывает, как сохранить вложения на локальный диск.

Извлечение вложений из MSG‑файлов, отформатированных как RTF

Для сообщений, отформатированных как RTF, следующий код может использоваться для различения и извлечения вложений, которые являются либо встроенными, либо отображаются как значок в теле сообщения. Следующий фрагмент кода показывает, как идентифицировать и извлечь встроенное вложение из MSG, отформатированного как RTF.


var eml = MapiMessage.Load("MSG file with RTF Formatting.msg");

foreach (var attachment in eml.Attachments)
{
    if (IsAttachmentInline(attachment))
    {
        try
        {
            SaveAttachment(attachment, Data.Out/new Guid().ToString());
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

static bool IsAttachmentInline(MapiAttachment attachment)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "\x0003ObjInfo")
        {
            var odtPersist1 = BitConverter.ToUInt16(property.Data, 0);
            return (odtPersist1 & (1 << (7 - 1))) == 0;
        }
    }
    return false;
}

static void SaveAttachment(MapiAttachment attachment, string fileName)
{
    foreach (var property in attachment.ObjectData.Properties.Values)
    {
        if (property.Name == "Package")
        {
            using var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            fs.Write(property.Data, 0, property.Data.Length);
        }
    }
}

Получить вложенные почтовые сообщения

Встроенные OLE‑вложения также появляются в MapiMessage класс коллекции Attachment. Следующий пример кода разбирает файл сообщения в поисках вложенных сообщений и сохраняет их на диск. The MapiMessage статический метод FromProperties() класса может создать новое сообщение из вложенного вложения. Следующий фрагмент кода показывает, как получить вложения вложенных почтовых сообщений.

Удалить вложения

Библиотека Aspose Outlook предоставляет возможность удалять вложения из файлов Microsoft Outlook Message (.msg):

  • Вызовите метод RemoveAttachments(). Он принимает путь к файлу сообщения в качестве параметра. Реализован как публичный статический метод, поэтому создавать объект не требуется.

Следующий фрагмент кода показывает, как удалять вложения.

Также можно вызвать MapiMessage статический метод класса DestroyAttachment(). Работает быстрее, чем RemoveAttachment(), потому что метод RemoveAttachment() разбирает файл сообщения.

Добавление вложений MSG

Сообщение Outlook может содержать другие сообщения Microsoft Outlook во вложениях, как обычные, так и встроенные. The MapiAttachmentCollection предоставляет перегруженные варианты метода Add для создания сообщений Outlook с обоими типами вложений.

Добавление ссылочных вложений к MapiMessages

Этот ReferenceAttachmentOptions класс упрощает добавление ссылочных вложений, инкапсулируя все необходимые свойства в один объект.

Параметры ReferenceAttachmentOptions:

  • sharedLink: Полный общий ссылочный URL к вложению, предоставленный веб‑сервисом, где хранится файл.
  • url: расположение файла или URL ресурса.
  • providerName: имя поставщика ссылочного вложения (например, Google Drive, Dropbox).
  • Пример: Добавление ссылочного вложения с помощью ReferenceAttachmentOptions
var options = new ReferenceAttachmentOptions(
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive");

// Add reference attachment
msg.Attachments.Add("Document.pdf", options);

Встраивание сообщений как вложения

Следующий фрагмент кода показывает, как вложить файл MSG в сообщение.

Чтение встроенных сообщений из вложений

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

Вставка и замена вложения

метод. Однако его нельзя использовать для вставки вложения с PR_ATTACH_NUM = 4 (например) в коллекцию, где collection.Count = 2.

Вставка вложений в определённые места

API Aspose.Email предоставляет возможность вставить MSG‑вложение в родительский MSG с помощью метода Insert коллекции MapiAttachmentCollection: MapiAttachmentCollection Insert(int index, string name, MapiMessage msg). Следующий фрагмент кода показывает, как вставить вложение в определённое место.

Заменить содержимое вложения

Это можно использовать для замены содержимого встроенного вложения новыми данными с помощью метода Replace. Однако нельзя использовать это для вставки вложения с PR_ATTACH_NUM = 4 (например) в коллекцию, где collection.Count = 2. Следующий фрагмент кода показывает, как заменить содержимое вложения.

Переименование вложений в MapiMessage

Можно изменить значение свойства DisplayName во вложениях MapiMessage.

var msg = MapiMessage.Load(fileName);
msg.Attachments[0].DisplayName = "New display name 1";
msg.Attachments[1].DisplayName = "New display name 2";

Сохранение вложений из цифрово подписанных сообщений

В следующем примере кода загружается сообщение электронной почты из файла, после чего извлекается информация о вложениях, в частности выводится отображаемое имя каждого вложения и является ли оно встроенным в сообщение или нет: