کار با پیوست‌های پیام

مدیریت پیوست‌ها با Aspose Outlook

ایجاد و ذخیره فایل‌های پیام Outlook (MSG) توضیح می‌دهد چگونه پیام‌ها را ایجاد و ذخیره کنیم و همچنین چگونه فایل‌های MSG با پیوست‌ها را بسازیم. این مقاله نشان می‌دهد چگونه پیوست‌های Microsoft Outlook را با Aspose.Email مدیریت کنیم. پیوست‌های یک فایل پیام با استفاده از ویژگی Attachments کلاس MapiMessage دسترسی پیدا می‌کنند و روی دیسک ذخیره می‌شوند. ویژگی Attachments یک مجموعه از نوع کلاس MapiAttachmentCollection است.

بررسی اینکه پیوست Inline است یا Regular

"Inline" و "Regular" به نوع شامل شدن پیوست در پیام ایمیل اشاره دارند. پیوست‌های Regular فایل‌هایی هستند که به‌صورت سنتی پیوست می‌شوند. معمولاً در لیستی در کلاینت ایمیل نمایش داده می‌شوند و دریافت‌کننده می‌تواند آن‌ها را دانلود و ذخیره کند. پیوست‌های Inline، که به‌عنوان تصاویر توکار یا تصاویر درون‌متن نیز شناخته می‌شوند، معمولاً برای درج تصاویر یا رسانه‌های دیگر در بدنه ایمیل استفاده می‌شوند. آن‌ها در یک لیست جداگانه نمایش داده نمی‌شوند بلکه مستقیماً در محتوای ایمیل، همانند بدنه ایمیل، نشان داده می‌شوند. این امکان را می‌دهد تا تصاویر یا رسانه‌های دیگری که بخشی از محتوای پیام هستند را درج کنید. نمونه کد زیر نشان می‌دهد چگونه تعیین کنید آیا یک پیوست به صورت in‑line است یا 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 (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 (.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

"Reference attachment" معمولاً به پیوستی اشاره دارد که شامل یک مرجع یا لینک به یک منبع خارجی است، نه خود فایل. این مرجع‌ها اغلب در ایمیل‌های 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")

جایگذاری یک پیام به‌عنوان پیوست

قطعه کد زیر نشان می‌دهد که فایل‌های MSG Outlook که در یک فایل 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 (به عنوان مثال) در مجموعه‌ای که تعداد آن 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"