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

این ایجاد و ذخیره فایل‌های پیام Outlook (MSG) مقاله مراحل ایجاد و ذخیره پیام‌ها، از جمله فایل‌های MSG با پیوست‌ها را توضیح داد. این مقاله به مدیریت پیوست‌های Microsoft Outlook با استفاده از Aspose.Email می‌پردازد. شما را راهنمایی می‌کند تا با استفاده از attachments ویژگی MapiMessage کلاس. این ویژگی یک مجموعه متعلق به 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}")

شناسایی پیوست‌های مرجع در پیام‌های MAPI

API Aspose.Email شامل is_reference ویژگی MapiAttachment کلاسی که به توسعه‌دهندگان امکان شناسایی پیوست‌های مرجع در یک پیام را می‌دهد. نمونه کد زیر را امتحان کنید تا ببینید چگونه در یک پروژه پایتون کار می‌کند:

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:

  1. درون MapiAttachmentCollection مجموعه را فراخوانی کنید و پیوست‌های جداگانه را دریافت کنید.
  2. برای ذخیره پیوست‌ها، متد 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) استفاده می‌شود.

نمونه کد زیر نشان می‌دهد چگونه پیوست‌های ایمیل با فرمت 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) متدی که مسیر فایل پیام را به عنوان پارامتر نیاز دارد. به عنوان یک متد استاتیک عمومی، می‌توانید آن را مستقیماً فراخوانی کنید بدون نیاز به ایجاد نمونه‌ای از شی، که فرآیند را ساده و کارآمد می‌سازد.

قطعه کد زیر نشان می‌دهد چگونه با استفاده از Aspose.Email پیوست‌ها را از فایل‌های MSG حذف کنید:

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 با هر دو نوع پیوست.

افزودن پیوست‌های مرجع به پیام‌های MAPI

پیوست مرجع معمولاً به پیوستی اشاره دارد که حاوی یک مرجع یا لینک به منبع خارجی است نه خود فایل. این مرجع‌ها اغلب در ایمیل‌های HTML برای لینک به تصاویر یا منابع میزبانی‌شده در سرورهای خارجی استفاده می‌شوند. به‌جای جاسازی کل فایل، یک پیوست مرجع شامل URL یا مرجعی به محتوای خارجی می‌شود.

برای افزودن پیوست مرجع به یک پیام MAPI، از add متد از MapiAttachmentCollection کلاس و 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
    # ...

درج و جایگزینی پیوست‌ها

API Aspose.Email قابلیت درج پیوست‌ها در یک ایندکس خاص در پیام والد را فراهم می‌کند. علاوه بر این، امکان جایگزین کردن محتوای یک پیوست موجود با پیوست پیام دیگری را نیز می‌دهد. در زیر قطعه کدهایی نشان می‌دهد چگونه درج و جایگزینی پیوست‌ها را انجام دهید.

درج پیوست‌ها در مکان‌های خاص

API Aspose.Email به شما امکان می‌دهد یک پیوست MSG را با استفاده از متد Insert در یک MSG والد وارد کنید. 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 در یک مجموعه که تنها ۲ پیوست دارد استفاده شود. در ادامه یک قطعه کد نشان داده شده است که نحوه جایگزینی محتوای پیوست را نشان می‌دهد:

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 می‌توانید به‌راحتی نام‌های نمایش پیوست‌ها در پیام‌های ایمیل که از فایل بارگذاری شده‌اند را تغییر دهید. نمونه کد زیر نشان می‌دهد چگونه این کار را انجام دهید:

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"