Vytváření a ukládání souborů Outlooku

Všimněte si, že ve stavu konceptu Outlook nezobrazuje žádné informace o odesílateli přiřazené k MapiMessage. Pokud potřebujeme zobrazit informace o odesílateli, měli bychom nastavit příznak MSGFLAG_READ.

Vytvořit a uložit zprávy Outlook

The MailMessage Vytváření a ukládání Outlook zpráv Save() třídy má MailMessage třídou, nastavit vlastnosti jako od, komu, předmět a tělo. Metoda, která umožňuje uložit Outlook MSG soubory na disk nebo stream. Níže uvedené úryvky kódu vytvářejí instanci Save() metoda přijímá název souboru jako argument. Navíc lze Outlook zprávy vytvořit s komprimované RTF tělo pomocí MapiConversionOptions

  1. Vytvořte novou instanci MailMessage třídy a nastaví vlastnosti From, To, Subject a Body.
  2. Zavolejte MapiMessage třída FromMailMessage metoda, která přijímá objekt MailMessage typ. Metoda, která přijímá objekt třídy FromMailMessage metoda konvertuje MailMessage do MapiMessage (MSG).
  3. Zavolejte MapiMessage.Save() metoda k uložení MSG souboru.

Umístěte následující kód do události kliknutí tlačítka ovládacího prvku ve Windows aplikaci.

// 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);

Vytvořit MSG soubory s přílohami

V příkladu výše, vytvořili jsme jednoduchý MSG soubor. Aspose.Email také podporuje ukládání souborů zpráv s přílohami. Vše, co musíte udělat, je přidat přílohy do MailMessage instance. Přidejte přílohy zavoláním metody Add() na MailMessage.Attachments kolekce. Přidejte ListBox do výše vytvořeného formuláře a přidejte dvě tlačítka, jedno pro přidání a druhé pro odebrání příloh. Aplikace přidávající přílohy funguje takto:

  1. Po kliknutí na tlačítko Add Attachment se zobrazí Open File Dialog, který uživatelům pomůže procházet a vybrat přílohu.
  2. Po výběru souboru se jeho úplná cesta přidá do seznamu.
  3. Když je MSG soubor vytvořen, cesty k přílohám jsou získány ze seznamu a přidány do MailMessage.Attachments kolekce.

Zapište následující kód do události kliknutí tlačítka 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);
}

Když je kliknuto na tlačítko Remove Attachment, odeberte vybrané položky ze seznamu. Vložte následující kód do události kliknutí tlačítka 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);
}

Přidejte kód pro přidání příloh do MailMessage instance. Konečný kód pro funkci Write Msg je napsán níže.

// 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);

Vytvořit soubory MSG s tělem RTF

Můžete také vytvářet soubory Outlook Message (MSG) s těly bohatého textu (RTF) pomocí Aspose.Email. Tělo RTF podporuje formátování textu. Vytvořte ho nastavením MailMessage.HtmlBody vlastnosti. Když konvertujete MailMessage instance do MapiMessage instance, HTML tělo je konvertováno do RTF. Tím je zachováno formátování těla e‑mailu.

Následující příklad vytvoří MSG soubor s RTF tělem. V HTML těle je jeden nadpis, tučné a podtržené formátování. Toto formátování zůstane zachováno při konverzi HTML do 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");

Komprese RTF pro tělo zprávy MAPI

POZNÁMKA: Proces komprese může zpomalit výkon při vytváření zpráv. Pochopením tohoto faktu a nastavením příznaku komprese podle konkrétních požadavků a kompromisu mezi velikostí souboru a výkonem mohou vývojáři efektivně spravovat vytváření souborů MSG a PST při práci s e‑mailovými zprávami.

Komprese RTF je určena ke snížení velikosti zprávy i výsledných souborů PST (Personal Storage Table), které Microsoft Outlook používá k ukládání e‑mailových zpráv a dalších dat. Použitím komprese RTF při konfiguraci těla zprávy mohou vývojáři snížit množství paměti potřebné k uložení e‑mailových zpráv nebo optimalizovat šířku pásma sítě při přenosu zpráv.

Za tímto účelem byly navrženy dvě přetížené metody:

  • MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Tato metoda umožňuje nastavit obsah těla zprávy pomocí zadaného řetězce a specifikovat typ obsahu těla (např. prostý text, HTML, atd.). Volitelný parametr compression je hodnota určující, zda by měl být obsah komprimován pomocí komprese RTF. Pokud je parametr compression true, obsah bude komprimován, což povede k menší velikosti zprávy.

  • MapiMessageItemBase.SetBodyRtf(string content, bool compression): Tato metoda specificky nastavuje obsah těla zprávy ve formátu RTF. Parametr content je řetězec představující RTF obsah, který bude nastaven jako tělo zprávy. Stejně jako v předchozí metodě, parametr compression určuje, zda se má na obsah použít komprese RTF. Pokud je compression true, RTF obsah bude komprimován pro zmenšení velikosti.

Následující ukázkový kód ukazuje, jak nastavit HTML tělo a zachovat jej komprimované:

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);

Existuje také MapiConversionOptions.UseBodyCompression vlastnost. Když je tato vlastnost povolena, během konverze z MailMessage na MapiMessage se použije komprese RTF těla, což vede k menší velikosti MSG souboru. Je ukázáno v následujícím ukázkovém kódu:

var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);

Uložit zprávu ve stavu konceptu

E‑maily jsou uloženy jako koncepty, když někdo zahájil jejich úpravy, ale chce se k nim později vrátit a dokončit je. Aspose.Email podporuje ukládání e‑mailových zpráv ve stavu konceptu nastavením příznaku zprávy. Níže je ukázkový kód pro uložení Outlook e‑mailové zprávy (MSG) jako konceptu.

// 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");