إدارة المرفقات في رسائل Outlook
الـ إنشاء وحفظ ملفات رسائل Outlook (MSG) المقالة شرحت الخطوات المتضمنة في إنشاء وحفظ الرسائل، بما في ذلك ملفات MSG مع المرفقات. يتعمق هذا المقال في إدارة مرفقات Microsoft Outlook باستخدام Aspose.Email. سيوجهك عبر الوصول إلى المرفقات وحفظها من ملف رسالة باستخدام attachments خاصية الـ MapiMessage الفئة. هذه الخاصية هي مجموعة تابعة لـ MapiAttachmentCollection الفئة، مما يسمح بالتعامل الفعال مع المرفقات.
التحقق من المرفقات المضمنة مقابل العادية
تشير المرفقات "المضمنة" و "العادية" إلى الطريقة التي يتم تضمينها بها في رسالة البريد الإلكتروني. المرفقات العادية هي الملفات المرفقة بالطريقة التقليدية. عادةً ما تُعرض في قائمة داخل عميل البريد ويمكن للمستلم تنزيلها وحفظها في تخزين محلي. المرفقات المضمنة، المعروفة أيضًا بالمرفقات المدمجة أو الصور المضمنة، تُستخدم عادةً لتضمين صور أو وسائط أخرى داخل نص البريد. لا تُعرض في قائمة منفصلة بل تظهر مباشرة داخل محتوى البريد، مثل جسم الرسالة. يتيح لك ذلك تضمين صور أو وسائط أخرى كجزء من محتوى الرسالة. يوضح مثال الشيفرة أدناه كيفية تحديد ما إذا كان المرفق مضمّنًا أم عادياً:
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
تتضمن Aspose.Email API الـ 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:
- التكرار عبر الـ 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 (ربط وتضمين الكائن) تظهر أيضًا في مجموعة المرفقات الخاصة بـ 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 (.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 أن تحتوي على رسائل Outlook أخرى كمرفقات إما عادية أو مدمجة. الـ MapiAttachmentCollection توفر أعضاء محملة بالمعاملات الزائدة لـ إضافة طريقة لإنشاء رسائل Outlook مع كلا نوعي المرفقات.
جرّبها!
أضف أو احذف مرفقات البريد الإلكتروني عبر الإنترنت مجانًا باستخدام Aspose.Email Editor App.
إضافة مرفقات مرجعية إلى رسائل MAPI
المرفق المرجعي عادةً ما يشير إلى مرفق يحتوي على إشارة أو رابط إلى مورد خارجي بدلاً من الملف الفعلي نفسه. تُستخدم هذه المراجع غالبًا في رسائل HTML للربط إلى صور أو موارد مستضافة على خادم بعيد. بدلاً من تضمين الملف بالكامل، يتضمن المرفق المرجعي عنوان URL أو إشارة إلى المحتوى الخارجي.
لإضافة مرفق مرجعي إلى رسالة MAPI، استخدم الـ add طريقة الـ MapiAttachmentCollection class و ReferenceAttachmentOptions الفئة لتحديد:
-
عنوان URL للمحتوى (رابط مباشر إلى الملف)
-
عنوان URL للمزود (رابط إلى موقع الملف أو واجهة المستخدم)
-
اسم مزود المرفق (مثال: "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، مما يدل على أنه مرفق من نوع "رسالة".
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 في مجموعة تحتوي فقط على مرفقين. أدناه شظية كود توضح كيفية استبدال محتويات المرفق:
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"