Създаване и запазване на Outlook файлове
Aspose.Email поддържа създаването на Outlook съобщения (MSG) файлове. Тази статия обяснява как да:
- Създаване и запазване на Outlook съобщения
- Създаване на MSG файлове с прикачени файлове
- Създаване на MSG файлове с RTF тяло
- Записване на съобщението като чернова
Създаване и запазване на 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 файла.
Пишете следния код в събитието click на бутона в 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 (Personal Storage Table) файлове, които Microsoft Outlook използва за съхраняване на имейл съобщения и други данни. Чрез използване на компресиране на RTF при конфигуриране на тялото на съобщението, разработчиците могат да намалят количеството памет, необходимо за съхраняване на имейл съобщения, или да оптимизират мрежовата пропускателна способност при предаване на съобщения.
За тази цел са проектирани два претоварени метода:
-
MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Този метод ви позволява да зададете съдържанието на тялото на съобщението, като използвате посочения низ content и зададете типа на съдържанието (например plain text, HTML и т.н.). Опционалният параметър compression е стойност, която указва дали съдържанието трябва да бъде компресирано с RTF компресия. Ако параметърът compression е true, съдържанието ще бъде компресирано, което води до по‑малък размер на съобщението.
-
MapiMessageItemBase.SetBodyRtf(string content, bool compression): Този метод задава конкретно съдържанието на тялото на съобщението във формат RTF. Параметърът content е низ, представляващ RTF съдържанието, което ще бъде зададено като тяло на съобщението. Както и в предишния метод, параметърът compression определя дали да се приложи RTF компресия към съдържанието. Ако compression е true, 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");