Erstellen und Speichern von Outlook‑Dateien
Aspose.Email unterstützt das Erstellen von Outlook‑Message‑(MSG‑)Dateien. Dieser Artikel erklärt, wie man:
- Outlook‑Nachrichten erstellen und speichern
- MSG‑Dateien mit Anhängen erstellen
- MSG‑Dateien mit RTF‑Body erstellen
- Nachricht im Entwurfsstatus speichern
Outlook‑Nachrichten erstellen und speichern
Die MailMessage Klasse hat die Save() Methode, die Outlook‑MSG‑Dateien auf Festplatte oder Stream speichern kann. Die Code‑Snippets unten erstellen eine Instanz der MailMessage Klasse, setzen Sie Eigenschaften wie from, to, subject und body. Die Save() Methode nimmt den Dateinamen als Argument. Zusätzlich können Outlook‑Nachrichten mit einem komprimierter RTF‑Body unter Verwendung der MapiConversionOptions.
- Erstellen Sie eine neue Instanz von MailMessage Klasse akzeptiert und die From-, To-, Subject‑ und Body‑Eigenschaften festlegt.
- Rufen Sie die MapiMessage Klasse FromMailMessage Methode, die das Objekt des MailMessage Typ. Die FromMailMessage Methode konvertiert das MailMessage in ein MapiMessage (MSG).
- Rufen Sie die MapiMessage.Save() Methode, um die MSG‑Datei zu speichern.
Fügen Sie den folgenden Code im Click‑Ereignis der Schaltflächen‑Steuerung der Windows‑Anwendung ein.
// 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‑Dateien mit Anhängen erstellen
Im obigen Beispiel, haben wir eine einfache MSG‑Datei erstellt. Aspose.Email unterstützt außerdem das Speichern von Nachrichten‑Dateien mit Anhängen. Alles, was Sie tun müssen, ist, die Anhänge zur MailMessage Instanz. Anhänge hinzufügen, indem die Add()‑Methode auf dem MailMessage.Attachments Sammlung. Fügen Sie dem oben erstellten Formular eine Listbox hinzu und zwei Schaltflächen, je eine zum Hinzufügen und Entfernen von Anhängen. Die Anwendung, die Anhänge hinzufügt, funktioniert folgendermaßen:
- Wenn die Schaltfläche Add Attachment geklickt wird, erscheint ein Open File Dialog, um Benutzern das Durchsuchen und Auswählen des Anhangs zu ermöglichen.
- Nachdem eine Datei ausgewählt wurde, wird der vollständige Pfad einer Liste hinzugefügt.
- Wenn die MSG‑Datei erstellt wird, werden die Anhangspfade aus der Liste übernommen und zum MailMessage.Attachments Sammlung.
Schreiben Sie den folgenden Code in das Klick‑Ereignis des Add Attachment‑Buttons.
// 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);
}
Wenn der Remove Attachment‑Button geklickt wird, entfernen Sie die ausgewählten Elemente aus der Listbox. Schreiben Sie den folgenden Code in das Klick‑Ereignis des Remove Attachment‑Buttons.
// 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);
}
Fügen Sie den Code zum Hinzufügen der Anhänge zu dem MailMessage Instanz. Der endgültige Code für die Write‑Msg‑Funktion ist unten geschrieben.
// 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‑Dateien mit RTF‑Body erstellen
Sie können mit Aspose.Email auch Outlook‑Message‑(MSG‑)Dateien mit Rich‑Text‑(RTF‑)Body erstellen. Der RTF‑Body unterstützt Textformatierung. Erstellen Sie einen, indem Sie die MailMessage.HtmlBody Eigenschaft. Wenn Sie ein MailMessage Instanz in ein MapiMessage In diesem Fall wird der HTML‑Body in RTF konvertiert. Auf diese Weise bleibt die Formatierung des E‑Mail‑Bodies erhalten.
Das folgende Beispiel erstellt eine MSG‑Datei mit einem RTF‑Body. Im HTML‑Body gibt es eine Überschrift sowie fette und unterstrichene Formatierungen. Diese Formatierungen bleiben erhalten, wenn das HTML in RTF konvertiert wird.
// 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‑Komprimierung für MAPI‑Nachrichtenkörper
HINWEIS: Der Komprimierungsprozess kann die Leistung beim Erstellen von Nachrichten verlangsamen. Durch das Verständnis dieses Umstands und die Konfiguration des Komprimierungsflags basierend auf spezifischen Anforderungen und dem Kompromiss zwischen Dateigröße und Leistung können Entwickler die Erstellung von MSG‑ und PST‑Dateien beim Umgang mit E‑Mail‑Nachrichten effektiv steuern.
Die RTF-Komprimierung soll die Größe einer Nachricht sowie die resultierenden PST‑Dateien (Personal Storage Table) reduzieren, die Microsoft Outlook zur Speicherung von E‑Mail‑Nachrichten und anderen Daten verwendet. Durch die Verwendung der RTF‑Komprimierung beim Konfigurieren des Nachrichtenkörpers können Entwickler den für die Speicherung von E‑Mail‑Nachrichten benötigten Speicher reduzieren oder die Netzwerkbandbreite beim Übertragen von Nachrichten optimieren.
Zu diesem Zweck wurden zwei überladene Methoden entwickelt:
-
MapiMessageItemBase.SetBodyContent(string content, BodyContentType contentType, bool compression): Diese Methode ermöglicht das Festlegen des Nachrichtenkörpers mit dem angegebenen String‑Content und Angabe des body‑contentType (z. B. Klartext, HTML usw.). Der optionale Parameter compression ist ein Wert, der angibt, ob der Inhalt mit RTF‑Kompression komprimiert werden soll. Ist compression true, wird der Inhalt komprimiert, was zu einer kleineren Nachrichtengröße führt.
-
MapiMessageItemBase.SetBodyRtf(string content, bool compression): Diese Methode setzt speziell den Inhalt des Nachrichtenkörpers im RTF‑Format. Der Parameter content ist ein String, der den RTF‑Inhalt darstellt, der als Nachrichtenkörper festgelegt wird. Wie bei der vorherigen Methode bestimmt der Parameter compression, ob RTF‑Kompression auf den Inhalt angewendet werden soll. Ist compression true, wird der RTF‑Inhalt komprimiert, um die Größe zu reduzieren.
Das folgende Codebeispiel zeigt, wie man den HTML‑Body setzt und komprimiert hält:
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);
Es gibt auch ein MapiConversionOptions.UseBodyCompression Eigenschaft. Wenn diese Eigenschaft aktiviert ist, wird bei der Konvertierung von MailMessage zu MapiMessage eine RTF‑Body‑Kompression angewendet, was zu einer kleineren MSG‑Dateigröße führt. Im folgenden Codebeispiel wird dies gezeigt:
var message = MailMessage.Load(fileName);
var options = new MapiConversionOptions();
options.UseBodyCompression = true;
var msg = MapiMessage.FromMailMessage(message, options);
Nachricht im Entwurfsstatus speichern
E‑Mails werden als Entwürfe gespeichert, wenn jemand mit deren Bearbeitung begonnen hat, aber später zurückkehren möchte, um sie fertigzustellen. Aspose.Email unterstützt das Speichern von E‑Mail‑Nachrichten im Entwurfsstatus durch Setzen eines Nachrichten‑Flags. Unten steht ein Beispielcode, um eine Outlook‑E‑Mail‑Nachricht (MSG) als Entwurf zu speichern.
// 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");