метод для сохранения вложения на диск.

Управление вложениями с помощью Aspose Outlook

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

Проверка, является ли вложение Inline или обычным

"Inline" и "Regular" вложения относятся к способу их включения в email‑сообщение. Regular вложения — это файлы, прикрепленные традиционным способом. Они обычно отображаются в списке внутри почтового клиента и могут быть загружены получателем и сохранены в локальное хранилище. Inline вложения, также известные как встроенные или inline‑изображения, обычно используются для включения изображений или другого медиа непосредственно в тело письма. Они не отображаются в отдельном списке, а показываются прямо в содержимом письма, например, в его теле. Это позволяет включать изображения или другие медиа, являющиеся частью содержимого сообщения. Пример кода ниже демонстрирует, как определить, является ли вложение inline или regular:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("message.msg")

for attachment in msg.attachments:
    print(f"{attachment.display_name}:{attachment.is_inline}")

Сохранение вложений из файла Outlook Message (MSG)

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

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

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

import aspose.email as ae

data_dir = "C://dataDir/"
file_name = "message.msg"

# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.from_file(data_dir + file_name)

# Iterate through the attachments collection
for attachment in message.attachments:
    # Save the individual attachment
    attachment.save(data_dir + attachment.file_name)

Получение вложенных почтовых вложений

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

import aspose.email as ae

eml = ae.mapi.MapiMessage.load("my.msg")

# Create a MapiMessage object from the individual attachment
get_attachment = ae.mapi.MapiMessage.from_properties(eml.attachments[0].object_data.properties)

# Create an object of type MailMessageInterpreter from the above message and save the embedded message to a file on disk
mail_message = get_attachment.to_mail_message(ae.mapi.MailConversionOptions())
mail_message.save("NestedMailMessageAttachments_out.eml", ae.SaveOptions.default_eml)

Удаление вложений

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

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

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

import aspose.email as ae

ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")

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

import aspose.email as ae

# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments(data_dir + "AttachmentsToDestroy_out.msg")

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

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

Добавить reference‑вложение к MapiMessage

"Reference attachment" обычно означает вложение, которое содержит ссылку на внешний ресурс, а не сам файл. Такие ссылки часто используют в HTML‑письмах для подключения внешних изображений или ресурсов, размещённых на удалённом сервере. Вместо встраивания полного файла, reference‑вложение содержит URL или ссылку на внешний контент.

Aspose.Email предоставляет набор инструментов для корректного отображения reference‑вложений, представленных в следующем примере кода:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("message.msg")

# Add reference attachment
msg.attachments.add("Document.pdf",
    "https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
    "https://drive.google.com/drive/my-drive",
    "GoogleDrive")

# Also, you can set additional attachment properties
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PERMISSION_TYPE, int(ae.AttachmentPermissionType.ANYONE_CAN_EDIT))
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_ORIGINAL_PERMISSION_TYPE, 0)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_IS_FOLDER, False)
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PROVIDER_ENDPOINT_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_PREVIEW_URL, "")
msg.attachments[0].set_property(ae.mapi.KnownPropertyList.ATTACHMENT_THUMBNAIL_URL, "")
# Finally save the message
msg.save("msg_with_ref_attach.msg")

Вложить сообщение в качестве вложения

Следующий фрагмент кода демонстрирует, как файлы Outlook MSG, вложенные в файл MSG, содержат PR_ATTACH_METHOD со значением 5.

import aspose.email as ae

# Create a new MapiMessage
message = ae.mapi.MapiMessage("from@test.com", "to@test.com", "Subj", "This is a message body")

# Load the attachment message
attach_msg = ae.mapi.MapiMessage.load("Message.msg")

# Add the attachment to the message
message.attachments.add("Weekly report.msg", attach_msg)

# Save the message with the embedded message attachment
message.save("WithEmbeddedMsg_out.msg")

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

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

import aspose.email as ae

file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.from_file(file_name)

# Check if the first attachment is an Outlook message
if message.attachments[0].object_data.is_outlook_message:
    # Get the embedded message as MapiMessage
    embedded_message = message.attachments[0].object_data.to_mapi_message()
    # Perform further operations with the embedded message
    # ...

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

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

Вставка в конкретное место

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

import aspose.email as ae
from io import BytesIO

file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)

# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)

# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)

# Insert the loaded attachment at index 1
message.attachments.insert(1, "new 11", get_data)

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

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

import aspose.email as ae
from io import BytesIO
file_name = "path/to/file.msg"

# Load the MapiMessage from file
message = ae.mapi.MapiMessage.load(file_name)

# Save the attachment to a memory stream
memory_stream = BytesIO()
message.attachments[2].save(memory_stream)

# Load the attachment from the memory stream
get_data = ae.mapi.MapiMessage.load(memory_stream)

# Replace the attachment at index 1 with the loaded attachment
message.attachments.replace(1, "new 1", get_data)

свойство, указывающее, нужно ли сохранять пустые даты при конвертации сообщения. Этот API появился в Aspose.Email 21.5. Ниже показан фрагмент кода, демонстрирующий, как сохранять пустые даты.

Можно изменить отображаемые имена вложений в электронных письмах, загруженных из файла. Пример кода ниже демонстрирует, как это сделать:

import aspose.email as ae

msg = ae.mapi.MapiMessage.load("message.msg")

msg.attachments[0].display_name = "New display name 1"
msg.attachments[1].display_name = "New display name 2"