Skapa och spara Outlook‑filer
Aspose.Email stöder att skapa Outlook‑meddelanden (MSG). Denna artikel förklarar hur man:
- Skapa och spara Outlook‑meddelanden
- Skapa MSG-filer med bilagor
- Skapa MSG-filer med RTF‑kropp
- Spara meddelande i utkaststatus
Skapa och spara Outlook‑meddelanden
Den MailMessage klassen har Save() metod som kan spara Outlook MSG‑filer till disk eller ström. Kodschnipporna nedan skapar en instans av MailMessage klass, sätt egenskaper som from, to, subject och body. Den Save() metod tar filnamnet som argument. Dessutom kan Outlook‑meddelanden skapas med en komprimerad RTF‑kropp med hjälp av MapiConversionOptions.
- Skapa en ny instans av MailMessage klassen och ställer in From, To, Subject och Body‑egenskaperna.
- Anropa MapiMessage klass FromMailMessage metod som accepterar objektet av MailMessage typ. Metoden FromMailMessage metod konverterar MailMessage till en MapiMessage (MSG).
- Anropa MapiMessage.Save() metod för att spara MSG‑filen.
Skriv följande kod i klick‑händelsen för knappkontrollen i Windows‑applikationen.
// 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);
Skapa MSG-filer med bilagor
I exemplet ovan, skapade vi en enkel MSG‑fil. Aspose.Email stöder också att spara meddelandefiler med bilagor. Allt du behöver göra är att lägga till bilagorna till MailMessage instans. Lägg till bilagor genom att anropa Add()‑metoden på MailMessage.Attachments samling. Lägg till en listbox på formuläret som skapades ovan och lägg till två knappar, en för att lägga till och en för att ta bort bilagor. Applikationen som lägger till bilagor fungerar så här:
- När Add Attachment‑knappen klickas visas en Open File Dialog för att hjälpa användare att bläddra och välja bilagan.
- När en fil har valts läggs hela sökvägen till i en lista.
- När MSG‑filen skapas hämtas bilagornas sökvägar från listan och läggs till i MailMessage.Attachments samling.
Skriv följande kod i Lägg till bilaga-knappens klick‑händelse.
// 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);
}
När Ta bort bilaga‑knappen klickas, tas de markerade objekten bort från listboxen. Skriv följande kod i Ta bort bilaga‑knappens klick‑händelse.
// 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);
}
Lägg till koden för att lägga till bilagorna till MailMessage instans. Den slutgiltiga koden för Write Msg‑funktionen skrivs som nedan.
// 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);
Skapa MSG‑filer med RTF‑kropp
Du kan också skapa Outlook‑meddelanden (MSG) med rik text (RTF) i kroppen med Aspose.Email. RTF‑kroppen stöder textformatering. Skapa en genom att ange MailMessage.HtmlBody egenskap. När du konverterar en MailMessage instans till en MapiMessage instans, konverteras HTML‑kroppen till RTF. På så sätt bevaras formateringen av e‑postens kropp.
Följande exempel skapar en MSG‑fil med en RTF‑kropp. Det finns en rubrik samt fet och understruken formatering i HTML‑kroppen. Denna formatering behålls när HTML konverteras till 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-komprimering för MAPI‑meddelandetext
OBS! Komprimeringsprocessen kan sakta ner prestandan vid skapande av meddelanden. Genom att förstå detta och konfigurera komprimeringsflaggan utifrån specifika krav och avvägning mellan filstorlek och prestanda kan utvecklare effektivt hantera skapandet av MSG‑ och PST‑filer när de arbetar med e‑postmeddelanden.
RTF-komprimering är avsedd att minska storleken på ett meddelande samt de resulterande PST‑filerna (Personal Storage Table) som Microsoft Outlook använder för att lagra e‑postmeddelanden och annan data. Genom att använda RTF‑komprimering när meddelandetexten konfigureras kan utvecklare minska mängden minne som behövs för att lagra e‑postmeddelanden eller optimera nätverksbandbredden vid överföring av meddelanden.
För detta ändamål har två överlagrade metoder utformats:
-
MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Denna metod låter dig ange meddelandekroppens innehåll med den angivna stränginnehållet och ange hur kroppens innehållstyp är (t.ex. vanlig text, HTML etc.). Den valfria parametern compression är ett värde som specificerar om innehållet ska komprimeras med RTF‑komprimering. Om compression är true komprimeras innehållet, vilket ger en mindre meddelandestorlek.
-
MapiMessageItemBase.SetBodyRtf(string content, bool compression): Denna metod anger specifikt innehållet i meddelandekroppen i RTF‑format. parametern content är en sträng som representerar RTF‑innehållet som ska sättas som meddelandekropp. Precis som i föregående metod bestämmer parametern compression om RTF‑komprimering ska tillämpas på innehållet. Om compression är true komprimeras RTF‑innehållet för att minska storleken.
Följande kodexempel visar hur du ställer in HTML‑kropp och behåller den komprimerad:
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);
Det finns också en MapiConversionOptions.UseBodyCompression egenskap. När denna egenskap är aktiverad tillämpas RTF‑kroppskomprimering under konvertering från MailMessage till MapiMessage, vilket ger en mindre MSG‑filstorlek. Det visas i kodexemplet nedan:
var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);
Spara meddelande i utkaststatus
E-post sparas som utkast när någon har börjat redigera dem men vill återgå till dem för att slutföra dem senare. Aspose.Email stöder att spara e-postmeddelanden i utkaststatus genom att sätta ett meddelandeflagga. Nedan är exempelkoden för att spara ett Outlook‑e‑postmeddelande (MSG) som ett utkast.
// 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");