Робота з вкладеннями повідомлень

Керування вкладеннями за допомогою Aspose Outlook

Створення та збереження Outlook Message (MSG) файлів пояснює, як створювати та зберігати повідомлення, а також створювати файли MSG з вкладеннями. У цій статті розглядається керування вкладеннями Microsoft Outlook за допомогою Aspose.Email. Вкладення з файлу повідомлення доступні та зберігаються на диск за допомогою властивості Attachments класу MapiMessage. Властивість Attachments — це колекція типу класу MapiAttachmentCollection.

Перевірка, чи є вкладення вбудованим або звичайним

"Inline" та "Regular" прикріплення відносяться до способу їх включення в електронне повідомлення. 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 з обома типами вкладень.

Додати довідкове вкладення до MapiMessage

"Довідкове вкладення" зазвичай означає вкладення, яке містить посилання або лінк на зовнішній ресурс, а не сам файл. Такі посилання часто використовуються в HTML‑поштових листах для зв’язку з зовнішніми зображеннями або ресурсами, розміщеними на віддаленому сервері. Замість вбудовування всього файлу, довідкове вкладення містить URL або посилання на зовнішній вміст.

Aspose.Email надає набір інструментів для правильного відображення довідкових вкладень, представлений у наведеному прикладі коду:

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)

Перейменувати вкладення у MapiMessage

Можливо змінювати відображувані назви вкладень у електронних листах, завантажених з файлу. Нижче наведено приклад коду, який показує, як це зробити:

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"