Створення та збереження файлів Outlook

Aspose.Email підтримує створення файлів Outlook message (MSG). У цій статті пояснюється, як:

Створити та зберегти повідомлення Outlook

The MailMessage клас має Save() метод, який може зберігати файли Outlook MSG на диск або в потік. Наведені нижче фрагменти коду створюють екземпляр MailMessage клас, встановлює властивості, такі як from, to, subject і body. Метод Save() метод приймає ім’я файлу як аргумент. Крім того, повідомлення Outlook можна створювати з стиснене тіло RTF використовуючи MapiConversionOptions

  1. Створіть новий екземпляр MailMessage класу та встановлює властивості From, To, Subject і Body.
  2. Викличте MapiMessage клас FromMailMessage метод, який приймає об’єкт MailMessage тип. FromMailMessage метод конвертує MailMessage у MapiMessage (MSG).
  3. Викличте 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 до форми, створеної вище, і додайте дві кнопки, по одній для додавання та видалення вкладень. Додаток, який додає вкладення, працює так:

  1. Коли натискається кнопка Add Attachment, відображається Open File Dialog, який допомагає користувачам переглядати та вибирати вкладення.
  2. Після вибору файлу його повний шлях додається до списку.
  3. Коли створюється 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 натиснута, видаліть вибрані елементи зі списку. Напишіть наступний код у обробнику кліку кнопки 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 Message (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 і вказуючи тип вмісту тіла (наприклад, простий текст, 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");