Управление вложениями в сообщениях Outlook
Этот Создание и сохранение сообщений Outlook (файлы MSG) в статье объяснены шаги создания и сохранения сообщений, включая файлы MSG с вложениями. Эта статья рассматривает управление вложениями Microsoft Outlook с помощью Aspose.Email. Она проведет вас через процесс доступа к вложениям и их сохранения из файла сообщения с использованием attachments свойство MapiMessage класс. Это свойство представляет собой коллекцию, принадлежащую MapiAttachmentCollection класс, позволяющий эффективно работать с вложениями.
Проверка Inline и Regular вложений
"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}")
Определение ссылочных вложений в сообщениях MAPI
API Aspose.Email включает is_reference свойство MapiAttachment класс, который позволяет разработчикам определять ссылочные вложения в сообщении. Попробуйте пример кода ниже, чтобы увидеть, как он работает в проекте на Python:
import aspose.email as ae
# Load or create a MapiMessage
msg = ae.mapi.MapiMessage.load("Message_With_Reference_Attachment.msg")
# Iterate through the attachments
for attachment in msg.attachments:
if attachment.is_reference:
# Process reference attachment
pass
Сохранение вложений из файлов MSG
Чтобы сохранить вложения из файла MSG:
- Итерируйтесь по MapiAttachmentCollection коллекцию и получайте отдельные вложения.
- Чтобы сохранить вложения, вызовите MapiAttachment класс Save() метод.
В следующем фрагменте кода показано, как сохранить вложения на локальный диск:
import aspose.email as ae
data_dir = "C://dataDir/"
file_name = "message.msg"
# Create an instance of MapiMessage from file
message = ae.mapi.MapiMessage.load(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)
Обработка вложений TNEF
Загрузка и сохранение вложений в формате TNEF
Aspose.Email предоставляет методы для работы с вложениями TNEF. Эти методы позволяют сохранять и загружать вложения в формате TNEF, часто используемом в сообщениях Outlook (winmail.dat).
- static MapiAttachment MapiAttachment.load_from_tnef(string fileName) – Загружает вложение из файла TNEF.
- static MapiAttachment MapiAttachment.load_from_tnef(Stream stream) – Загружает вложение из потока TNEF.
- void MapiAttachment.save_to_tnef(string filename) – Сохраняет вложение в файл TNEF.
- void MapiAttachment.save_to_tnef(Stream stream) – Сохраняет вложение в поток TNEF.
Следующий пример кода демонстрирует, как извлекать, сохранять и повторно добавлять вложения электронной почты в формате TNEF, управляя ими через потоки памяти или файлы:
import io
from aspose.email.mapi import MapiMessage, MapiAttachment
# Load the EML message (which contains a winmail.dat TNEF attachment)
msg = MapiMessage.load("message.eml")
# Save the first attachment as a winmail.dat file
msg.attachments[0].save_to_tnef("winmail.dat")
# Load the TNEF attachment from the file and add it back to the message
from_tnef_attachment = MapiAttachment.load_from_tnef("winmail.dat")
msg.attachments.add(from_tnef_attachment.long_file_name, from_tnef_attachment.binary_data)
# (Optional) If you also want to use a memory stream instead of the file
ms = io.BytesIO()
msg.attachments[0].save_to_tnef(ms)
# Reset the stream position to the beginning
ms.seek(0)
# Load the TNEF attachment directly from the memory stream and add it
from_tnef_attachment_from_stream = MapiAttachment.load_from_tnef(ms)
msg.attachments.add(from_tnef_attachment_from_stream.long_file_name, from_tnef_attachment_from_stream.binary_data)
Получение вложенных почтовых сообщений
Встроенные OLE (Object Linking and Embedding) вложения также появляются в коллекции вложений MapiMessage класс. Пример кода ниже демонстрирует, как разобрать файл сообщения и извлечь встроенные вложения сообщений, затем сохранить их на диск для дальнейшего использования. MapiMessage класс предлагает from_properties статический метод для создания нового сообщения из встроенного вложения. В следующем фрагменте кода показано, как получить вложения вложенных почтовых сообщений:
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.Email предоставляет возможность удалять вложения из файлов Microsoft Outlook Message (.msg). Используйте remove_attachments(path) метод, который требует путь к файлу сообщения в качестве параметра. Как публичный статический метод, его можно вызвать напрямую без необходимости создавать объект, что делает процесс простым и эффективным.
В следующем фрагменте кода показано, как удалить вложения из файлов MSG с помощью Aspose.Email:
import aspose.email as ae
ae.mapi.MapiMessage.remove_attachments("AttachmentsToRemove_out.msg")
Вы также можете вызвать статический метод destroy_attachments класса MapiMessage класс. Он работает быстрее, чем remove_attachments, потому что метод remove_attachments парсит файл сообщения.
import aspose.email as ae
# Destroy attachments in the MapiMessage
ae.mapi.MapiMessage.destroy_attachments("AttachmentsToDestroy_out.msg")
Добавление вложений MSG
Сообщение Outlook может содержать другие сообщения Microsoft Outlook во вложениях, как обычные, так и встроенные. MapiAttachmentCollection предоставляет перегруженные члены добавить метод для создания сообщений Outlook с обоими типами вложений.
Попробуйте!
Добавляйте или удаляйте вложения к письмам онлайн бесплатно Приложение Aspose.Email Editor.
Добавление ссылочных вложений в сообщения MAPI
Ссылочное вложение обычно относится к вложению, которое содержит ссылку на внешний ресурс, а не сам файл. Такие ссылки часто используют в HTML‑письмах для указания внешних изображений или ресурсов, размещённых на удалённом сервере. Вместо встраивания полного файла, ссылочное вложение включает URL или ссылку на внешний контент.
Чтобы добавить ссылочное вложение в сообщение MAPI, используйте add метод MapiAttachmentCollection class и ReferenceAttachmentOptions класс для указания:
-
URL содержимого (прямая ссылка на файл)
-
URL провайдера (ссылка на расположение файла или UI‑просмотр)
-
Имя провайдера вложений (например, "GoogleDrive")
как показано в примере кода ниже.
import aspose.email as ae
# Load or create a MapiMessage
msg = ae.mapi.MapiMessage()
msg.subject = "Email with Reference Attachment"
msg.body = "This message contains a cloud-based reference attachment."
# Create ReferenceAttachmentOptions
options = ae.mapi.ReferenceAttachmentOptions(
"https://drive.google.com/file/d/1HJ-M3F2qq1oRrTZ2GZhUdErJNy2CT3DF/",
"https://drive.google.com/drive/my-drive",
"GoogleDrive"
)
# Add the reference attachment to the message
msg.attachments.add("Document.pdf", options)
# Save the message to MSG format
msg.save("Message_With_Reference_Attachment.msg")
Встраивание сообщений как вложения
В следующем фрагменте кода показано, как встраивать файлы Outlook MSG в качестве вложений в другой файл MSG. Встроенный файл MSG содержит свойство PR_ATTACH_METHOD со значением 5, что указывает, что это вложение типа "message".
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.load(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
# ...
Вставка и замена вложений
Aspose.Email API предоставляет возможность вставлять вложения в определённый индекс внутри родительского сообщения. Кроме того, он позволяет заменять содержимое существующего вложения другим вложением сообщения. Ниже приведены фрагменты кода, демонстрирующие, как выполнить вставку и замену вложений.
Вставка вложений в определённые места
Aspose.Email API позволяет вставить вложение 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 в коллекцию, содержащую только 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)
Переименование вложений в MapiMessages
С помощью Aspose.Email вы можете легко изменить отображаемые имена вложений в email‑сообщениях, загруженных из файла. Следующий пример кода демонстрирует, как это сделать:
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"