Управление вложениями в Outlook MSG‑файлах

Aspose.Email for C++ предоставляет обширный API для доступа, сохранения, удаления и внедрения вложений при работе с файлами Microsoft Outlook MSG. Вложениями управляют через MapiMessage класс, используя его Attachments свойство, которое раскрывает MapiAttachmentCollection.

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

Для извлечения и сохранения вложений из MSG‑файла:

  1. Загрузить сообщение с помощью MapiMessage::Load.
  2. Итерируйтесь по MapiAttachmentCollection.
  3. Сохраните каждое вложение, используя MapiAttachment::Save() метод.
// Create an instance of MapiMessage from file
System::SharedPtr<MapiMessage> message = MapiMessage::Load(fileName);
    
// Iterate through the attachments collection
    
{
    auto attachment_enumerator = (message->get_Attachments())->GetEnumerator();
    decltype(attachment_enumerator->get_Current()) attachment;
    while (attachment_enumerator->MoveNext() && (attachment = attachment_enumerator->get_Current(), true))
    {
        // Save the individual attachment
        attachment->Save(dataDir + attachment->get_FileName());
    }
}

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

Aspose.Email for C++ предлагает два способа удаления вложений из MSG‑файлов:

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

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

Это работает быстрее, потому что удаляет вложения без полного разбора MSG‑файла.

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

MSG‑файлы могут содержать другие MSG‑файлы как стандартные, так и встроенные вложения. Используйте перегруженный Add методы в MapiAttachmentCollection для встраивания сообщений Outlook.

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

System::SharedPtr<MapiMessage> message = System::MakeObject<MapiMessage>(L"from@test.com", L"to@test.com", L"Subj", L"This is a message body");
System::SharedPtr<MapiMessage> attachMsg = MapiMessage::Load(L"Message.msg");
message->get_Attachments()->Add(L"Weekly report.msg", attachMsg);
message->Save(dataDir + L"WithEmbeddedMsg_out.msg");