إنشاء وحفظ ملفات Outlook
يدعم Aspose.Email إنشاء ملفات رسائل Outlook (MSG). يشرح هذا المقال كيفية:
إنشاء وحفظ رسائل Outlook
الـ MailMessage الفئة لديها الـ Save() طريقة يمكنها حفظ ملفات Outlook MSG إلى القرص أو التدفق. مقتطفات الكود أدناه تنشئ مثيلًا من MailMessage فئة، اضبط خصائص مثل from, to, subject و body. الـ Save() الطريقة تستقبل اسم الملف كمعامل. بالإضافة إلى ذلك، يمكن إنشاء رسائل Outlook مع جسم RTF مضغوط باستخدام الـ MapiConversionOptions.
- إنشاء مثيل جديد من MailMessage الفئة وتضبط خصائص From, To, Subject و Body.
- استدعِ الـ MapiMessage فئة FromMailMessage طريقة تقبل كائن من MailMessage نوع. الـ FromMailMessage طريقة تحول الـ MailMessage إلى MapiMessage (MSG).
- استدعِ الـ MapiMessage.Save() طريقة لحفظ ملف MSG.
اكتب الشيفرة التالية في حدث النقر لزر التحكم في تطبيق Windows.
// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = "sender@domain.com";
mailMsg.To = "receiver@domain.com";
mailMsg.Subject = "This is test message";
mailMsg.Body = "This is test body";
// Create an instance of the MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
// Save the message (MSG) file
string strMsgFile = @"CreatingAndSavingOutlookMessages_out.msg";
outlookMsg.Save(dataDir + strMsgFile);
إنشاء ملفات MSG مع مرفقات
في المثال أعلاه، أنشأنا ملف MSG بسيط. يدعم Aspose.Email أيضًا حفظ ملفات الرسائل مع المرفقات. كل ما عليك هو إضافة المرفقات إلى MailMessage مثال. أضف مرفقات عن طريق استدعاء طريقة Add() على MailMessage.Attachments مجموعة. أضف ListBox إلى النموذج الذي تم إنشاؤه أعلاه وأضف زرين، واحد لإضافة المرفقات وآخر لإزالتها. يعمل التطبيق الذي يضيف المرفقات كالتالي:
- عند النقر على زر Add Attachment، يُعرض Open File Dialog لمساعدة المستخدمين في تصفح وتحديد المرفق.
- عند اختيار ملف، يُضاف المسار الكامل إلى القائمة.
- عند إنشاء ملف MSG، يتم التقاط مسارات المرفقات من القائمة وإضافتها إلى MailMessage.Attachments مجموعة.
اكتب الشيفرة التالية في حدث النقر على زر Add Attachment.
// Open a file open dialog to select the attachment
OpenFileDialog fd = new OpenFileDialog();
// If user selected the file and clicked OK, add the file name and path to the list
if (fd.ShowDialog() == DialogResult.OK)
{
lstAttachments.Items.Add(fd.FileName);
}
عند النقر على زر Remove Attachment، قم بإزالة العناصر المحددة من ListBox. اكتب الشيفرة التالية في حدث النقر على زر Remove Attachment.
// Check if the user has selected any item in the attachments listbox
if (lstAttachments.SelectedItems.Count > 0)
{
// Remove the selected attachment from the listbox
lstAttachments.Items.RemoveAt(lstAttachments.SelectedIndex);
}
أضف الشيفرة لإضافة المرفقات إلى MailMessage مثال. الكود النهائي لدالة Write Msg مكتوب كما هو أدناه.
// File name for output MSG file
string strMsgFile;
// Open a save file dialog for saving the file and Add filter for msg files
SaveFileDialog fd = new SaveFileDialog();
fd.Filter = "Outlook Message files (*.msg)|*.msg|All files (*.*)|*.*";
// If user pressed OK, save the file name + path
if (fd.ShowDialog() == DialogResult.OK)
{
strMsgFile = fd.FileName;
}
else
{
// If user did not selected the file, return
return;
}
// Create an instance of MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = txtFrom.Text;
mailMsg.To = txtTo.Text;
mailMsg.Subject = txtSubject.Text;
mailMsg.Body = txtBody.Text;
// Add the attachments
foreach (string strFileName in lstAttachments.Items)
{
mailMsg.Attachments.Add(new Attachment(strFileName));
}
// Create an instance of MapiMessage class and pass MailMessage as argument
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(strMsgFile);
إنشاء ملفات MSG بجسم RTF
يمكنك أيضًا إنشاء ملفات رسالة Outlook (MSG) بأجسام نص غني (RTF) باستخدام Aspose.Email. يدعم جسم RTF تنسيق النص. أنشئ واحدًا عن طريق تعيين الـ MailMessage.HtmlBody خاصية. عندما تقوم بتحويل MailMessage مثال إلى MapiMessage في هذه الحالة، يتم تحويل جسم HTML إلى RTF. بهذه الطريقة يتم الحفاظ على تنسيق جسم البريد الإلكتروني.
المثال التالي ينشئ ملف MSG يحتوي على جسم RTF. يوجد عنوان واحد، وتطبيق تنسيق النص العريض وتحت الخط في جسم HTML. يتم الاحتفاظ بهذا التنسيق عند تحويل HTML إلى RTF.
// Create an instance of the MailMessage class
MailMessage mailMsg = new MailMessage();
// Set from, to, subject and body properties
mailMsg.From = "from@domain.com";
mailMsg.To = "to@domain.com";
mailMsg.Subject = "subject";
mailMsg.HtmlBody = "<h3>rtf example</h3><p>creating an <b><u>outlook message (msg)</u></b> file using Aspose.Email.</p>";
MapiMessage outlookMsg = MapiMessage.FromMailMessage(mailMsg);
outlookMsg.Save(dataDir + "CreatingMSGFilesWithRTFBody_out.msg");
ضغط RTF لجسم رسالة MAPI
ملاحظة: قد يؤدي عملية الضغط إلى إبطاء الأداء عند إنشاء الرسائل. من خلال فهم هذه الحقيقة وتكوين علامة الضغط بناءً على المتطلبات المحددة والموازنة بين حجم الملف والأداء، يمكن للمطورين إدارة إنشاء ملفات MSG و PST بفعالية عند التعامل مع رسائل البريد الإلكتروني.
يهدف ضغط RTF إلى تقليل حجم الرسالة وكذلك ملفات PST (جدول التخزين الشخصي) الناتجة التي يستخدمها Microsoft Outlook لتخزين رسائل البريد الإلكتروني والبيانات الأخرى. باستخدام ضغط RTF عند تكوين جسم الرسالة، يمكن للمطورين تقليل مقدار الذاكرة المطلوبة لتخزين رسائل البريد الإلكتروني أو تحسين عرض النطاق الترددي للشبكة عند نقل الرسائل.
لهذا الغرض، تم تصميم طريقتين محملتين بالتحمل الزائد:
-
MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): تسمح لك هذه الطريقة بتعيين محتوى جسم الرسالة باستخدام السلسلة المحددة وتحديد نوع محتوى الجسم (مثلاً نص عادي، HTML، إلخ). المعلمة الاختيارية compression هي قيمة تحدد ما إذا كان يجب ضغط المحتوى باستخدام ضغط RTF. إذا كانت معلمة compression صحيحة، سيُضغط المحتوى، مما يؤدي إلى حجم رسالة أصغر.
-
MapiMessageItemBase.SetBodyRtf(string content, bool compression): تقوم هذه الطريقة بتعيين محتوى جسم الرسالة بتنسيق RTF. معلمة content هي سلسلة تمثل محتوى RTF الذي سيُعيّن كجسم الرسالة. كما في الطريقة السابقة، تحدد معلمة compression ما إذا كان يجب تطبيق ضغط RTF على المحتوى. إذا كان compression صحيحًا، سيتم ضغط محتوى RTF لتقليل الحجم.
تظهر عينة الشيفرة التالية كيفية ضبط جسم HTML وإبقائه مضغوطًا:
var htmlBody = "<html><body><h1>This is the body content</h1></body></html>";
var msg = new MapiMessage("from@domain.com", "to@domain.com", "subject", "body");
// set the html body and keep it compressed
// this will reduce the message size
msg.SetBodyContent(htmlBody, BodyContentType.Html, true);
هناك أيضًا MapiConversionOptions.UseBodyCompression خاصية. عندما تكون هذه الخاصية مفعلة، يتم تطبيق ضغط جسم RTF أثناء تحويل MailMessage إلى MapiMessage، مما ينتج حجم ملف MSG أصغر. يتم توضيحه في عينة الشيفرة أدناه:
var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);
حفظ الرسالة بحالة مسودة
يتم حفظ الرسائل كمسودات عندما يبدأ شخص ما في تحريرها لكنه يرغب في العودة إليها لإكمالها لاحقًا. يدعم Aspose.Email حفظ رسائل البريد الإلكتروني في حالة مسودة عن طريق تعيين علامة الرسالة. فيما يلي مثال على الكود لحفظ رسالة بريد إلكتروني في Outlook (MSG) كمسودة.
// Change properties of an existing MSG file
string strExistingMsg = @"message.msg";
// Load the existing file in MailMessage and Change the properties
MailMessage msg = MailMessage.Load(dataDir + strExistingMsg, new MsgLoadOptions());
msg.Subject += "NEW SUBJECT (updated by Aspose.Email)";
msg.HtmlBody += "NEW BODY (updated by Aspose.Email)";
// Create an instance of type MapiMessage from MailMessage, Set message flag to un-sent (draft status) and Save it
MapiMessage mapiMsg = MapiMessage.FromMailMessage(msg);
mapiMsg.SetMessageFlags(MapiMessageFlags.MSGFLAG_UNSENT);
mapiMsg.Save(dataDir + "SavingMessageInDraftStatus_out.msg");