Outlook-bestanden maken en opslaan

Aspose.Email ondersteunt het maken van Outlook‑bericht (MSG)‑bestanden. Dit artikel legt uit hoe je:

Maak en sla Outlook‑berichten op

De MailMessage klasse heeft de Save() methode die Outlook‑MSG‑bestanden naar schijf of stream kan opslaan. De onderstaande codefragmenten maken een exemplaar van de MailMessage klasse, stel eigenschappen in zoals from, to, subject en body. De Save() methode neemt de bestandsnaam als argument. Bovendien kunnen Outlook‑berichten worden aangemaakt met een gecomprimeerde RTF‑body met behulp van de MapiConversionOptions

  1. Maak een nieuw exemplaar van de MailMessage klasse accepteert en stelt de From-, To-, Subject- en Body‑eigenschappen in.
  2. Roep de MapiMessage klasse FromMailMessage methode die het object van de MailMessage type. De FromMailMessage methode converteert de MailMessage naar een MapiMessage (MSG).
  3. Roep de MapiMessage.Save() methode om het MSG‑bestand op te slaan.

Plaats de volgende code in de klik‑event van de knopbesturing van de Windows‑applicatie.

// 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‑bestanden maken met bijlagen

In het bovenstaande voorbeeld, hebben we een eenvoudig MSG‑bestand gemaakt. Aspose.Email ondersteunt ook het opslaan van berichtbestanden met bijlagen. Het enige wat je hoeft te doen is de bijlagen toevoegen aan de MailMessage instantie. Voeg bijlagen toe door de Add()‑methode aan te roepen op de MailMessage.Attachments collectie. Voeg een listbox toe aan het hierboven gemaakte formulier en voeg twee knoppen toe, één voor het toevoegen en één voor het verwijderen van bijlagen. De applicatie die bijlagen toevoegt werkt als volgt:

  1. Wanneer de Add Attachment‑knop wordt geklikt, wordt een Open File Dialog weergegeven om gebruikers te helpen de bijlage te bladeren en te selecteren.
  2. Wanneer een bestand is geselecteerd, wordt het volledige pad aan een lijst toegevoegd.
  3. Wanneer het MSG‑bestand wordt aangemaakt, worden de bijlage‑paden opgehaald uit de lijst en toegevoegd aan de MailMessage.Attachments collectie.

Schrijf de volgende code in het Add Attachment-knop‑klik‑event.

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

Wanneer de Remove Attachment‑knop wordt geklikt, verwijder dan de geselecteerde items uit de listbox. Schrijf de volgende code in het Remove Attachment‑knop‑klik‑event.

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

Voeg de code toe voor het toevoegen van de bijlagen aan de MailMessage instantie. De uiteindelijke code voor de Write Msg‑functie wordt als volgt geschreven.

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

Maak MSG‑bestanden met RTF‑inhoud

Je kunt ook Outlook‑bericht (MSG)‑bestanden met rich‑text (RTF)‑bodies maken met Aspose.Email. De RTF‑body ondersteunt tekstopmaak. Maak er één door de MailMessage.HtmlBody eigenschap. Wanneer je een MailMessage instantie in een MapiMessage bij een instantie wordt de HTML‑body geconverteerd naar RTF. Op deze manier blijft de opmaak van de e‑mailbody behouden.

Het volgende voorbeeld maakt een MSG‑bestand met een RTF‑body. Er is één kop, vet en onderstreept opmaak toegepast in de HTML‑body. Deze opmaak wordt behouden wanneer de HTML wordt omgezet naar 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-compressie voor MAPI‑berichtinhoud

OPMERKING: Het compressieproces kan de prestaties vertragen bij het maken van berichten. Door dit feit te begrijpen en de compressievlag in te stellen op basis van specifieke vereisten en een compromis tussen bestandsgrootte en prestaties, kunnen ontwikkelaars effectief het aanmaken van MSG‑ en PST‑bestanden beheren bij het verwerken van e‑mailberichten.

RTF-compressie is bedoeld om de grootte van een bericht te verkleinen evenals de resulterende PST‑bestanden (Personal Storage Table) die Microsoft Outlook gebruikt om e‑mailberichten en andere gegevens op te slaan. Door RTF-compressie te gebruiken bij het configureren van de berichtinhoud, kunnen ontwikkelaars de hoeveelheid geheugen die nodig is om e‑mailberichten op te slaan verminderen of de netwerkbandbreedte optimaliseren bij het verzenden van berichten.

Voor dit doel zijn twee overladen methoden ontworpen:

  • MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Deze methode laat u de berichtbodyinhoud instellen met behulp van de opgegeven string‑content en specificeert het body‑contentType (bijvoorbeeld platte tekst, HTML, enz.). De optionele parameter compression is een waarde die aangeeft of de inhoud moet worden gecomprimeerd met RTF‑compressie. Als de compressie‑parameter true is, wordt de inhoud gecomprimeerd, wat resulteert in een kleinere berichtgrootte.

  • MapiMessageItemBase.SetBodyRtf(string content, bool compression): Deze methode stelt specifiek de inhoud van de berichtbody in RTF‑formaat in. De parameter content is een string die de RTF‑inhoud representeert die als berichtbody zal worden ingesteld. Zoals in de vorige methode bepaalt de parameter compression of RTF‑compressie op de inhoud moet worden toegepast. Als compression true is, wordt de RTF‑inhoud gecomprimeerd om de grootte te verkleinen.

Het volgende codevoorbeeld toont hoe u de html‑body instelt en deze gecomprimeerd houdt:

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

Er is ook een MapiConversionOptions.UseBodyCompression eigenschap. Wanneer deze eigenschap is ingeschakeld, wordt RTF‑body‑compressie toegepast tijdens de conversie van MailMessage naar MapiMessage, wat resulteert in een kleinere MSG‑bestandsgrootte. Dit wordt getoond in het onderstaande codevoorbeeld:

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

Bericht opslaan in conceptstatus

E‑mailberichten worden opgeslagen als concepten wanneer iemand is begonnen ze te bewerken maar later wil terugkeren om ze af te ronden. Aspose.Email ondersteunt het opslaan van e‑mailberichten in conceptstatus door een berichtvlag in te stellen. Hieronder staat de voorbeeldcode om een Outlook‑e‑mailbericht (MSG) als concept op te slaan.

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