Laden und Speichern von Nachrichten

Laden und Speichern von E‑Mail‑Nachrichten

Ein Dateiformat erkennen

Aspose.Email‑API bietet die Möglichkeit, das Dateiformat der bereitgestellten Nachrichtendatei zu erkennen. Die DetectFileFormat Methode des FileFormatUtil Klasse kann hierfür verwendet werden. Die folgenden Klassen und Methoden können zum Erkennen des geladenen Dateiformats verwendet werden.

Das folgende Code‑Snippet zeigt, wie Dateiformate erkannt werden können.

Eine E‑Mail‑Nachricht laden

Um eine Nachricht mit spezifischen Ladeoptionen zu laden, stellt Aspose.Email die LoadOptions Klasse, die wie folgt verwendet werden kann:

Einbetriertes Nachrichtenformat beim Laden beibehalten

E‑Mail‑Nachrichten speichern und konvertieren

Aspose.Email erleichtert die Konvertierung beliebiger Nachrichtentypen in ein anderes Format. Um diese Funktion zu demonstrieren, lädt der Code in diesem Artikel drei Nachrichtentypen von der Festplatte und speichert sie in anderen Formaten zurück. Die Basisklasse SaveOptions und die Klassen EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions für zusätzliche Einstellungen beim Speichern MailMessage kann zum Speichern von Nachrichten in andere Formate verwendet werden. Der Artikel zeigt, wie diese Klassen verwendet werden, um eine Beispiel‑E‑Mail zu speichern als:

  • EML‑Format.
  • Outlook‑MSG.
  • MHTML‑Format.
  • HTML‑Format.

Eine E‑Mail‑Nachricht laden und speichern

Das folgende Code‑Snippet zeigt, wie eine EML‑Nachricht geladen und auf der Festplatte im selben Format gespeichert wird.

Eine E‑Mail‑Nachricht laden und speichern, wobei die ursprünglichen Grenzen erhalten bleiben

Das folgende Code‑Snippet zeigt, wie man EML lädt und als EML speichert, wobei die ursprünglichen Grenzen erhalten bleiben.

Als EML speichern, wobei TNEF‑Anhänge erhalten bleiben

Das folgende Code‑Snippet zeigt, wie man als EML speichert und dabei TNEF‑Anhänge beibehält.

EML nach MSG speichern

Das folgende Code‑Snippet zeigt, wie eine EML‑Nachricht geladen und mithilfe der entsprechenden Option aus SaveOptions.

EML nach MSG mit erhaltenen Datumsangaben speichern

Die MsgSaveOptions Klasse ermöglicht das Speichern der Quellnachricht als Outlook‑Message‑Datei (MSG) mit erhaltenen Datumsangaben. Das folgende Code‑Snippet zeigt, wie man als MSG mit erhaltenen Daten speichert.

EML als MHTML speichern

Verschiedene MHTML‑Optionen können verwendet werden, um die gewünschten Ergebnisse zu erzielen. Das folgende Code‑Snippet zeigt, wie man eine EML‑Nachricht lädt in MailMessage und in MHTML mit einem Nachrichten‑Datum im UTC‑System konvertieren.

// Set options for MHTML output
MhtSaveOptions saveOptions = SaveOptions.getDefaultMhtml();
// save a message date as UTC date
saveOptions.setPreserveOriginalDate(false);

// Initialize and load an existing EML file
try (MailMessage mailMessage = MailMessage.load(dataDir + "Message.eml")) {
    mailMessage.save(outDir + "Message_out.mhtml", saveOptions);
}

MHT‑Header global formatieren beim Speichern aus EML

Mit Aspose.Email können Sie die globalen Formatierungsoptionen für den MHT‑Header verwenden. Die globalen Optionen legen die gemeinsame Formatierung eines MHT‑Headers für alle MhtSaveOptions Instanzen. Diese Funktion soll das Festlegen von Formatierungen für jede Instanz von MhtSaveOptions.

Verwenden Sie die folgenden Methoden von GlobalFormattingOptions Klasse und das untenstehende Code‑Beispiel zum Festlegen der Formatierung eines MHT‑Headers:

// saveOptions1 and saveOptions2 have the same mht header formatting
MhtSaveOptions saveOptions1 = new MhtSaveOptions();
MhtSaveOptions saveOptions2 = new MhtSaveOptions();

EML in MHTML mit optionalen Einstellungen konvertieren

Die MhtSaveOptions Klasse stellt zusätzliche Optionen zum Speichern von E‑Mail‑Nachrichten im MHTML‑Format bereit. Der Aufzählungstyp MhtFormatOptions macht es möglich, zusätzliche E‑Mail‑Informationen in das AusgabemHTML zu schreiben. Die folgenden zusätzlichen Felder können geschrieben werden:

  • WriteHeader – schreibt den E‑Mail‑Header in die Ausgabedatei.
  • WriteOutlineAttachments – schreibt Gliederungs‑Anhänge in die Ausgabedatei.
  • WriteCompleteEmailAddress – schreibt die vollständige E‑Mail‑Adresse in die Ausgabedatei.
  • NoEncodeCharacters – es sollte keine Transfer‑Codierung von Zeichen verwendet werden.
  • HideExtraPrintHeader – verbirgt die zusätzliche Druckkopfzeile am oberen Rand der Ausgabedatei.
  • WriteCompleteToEmailAddress – schreibt die vollständige Empfänger‑E‑Mail‑Adresse in die Ausgabedatei.
  • WriteCompleteFromEmailAddress – schreibt die vollständige Absender‑E‑Mail‑Adresse in die Ausgabedatei.
  • WriteCompleteCcEmailAddress – schreibt die vollständigen E‑Mail‑Adressen aller CC‑Empfänger in die Ausgabedatei.
  • WriteCompleteBccEmailAddress – schreibt die vollständige E‑Mail‑Adresse aller BCC‑Empfänger in die Ausgabedatei.
  • RenderCalendarEvent – schreibt Text aus dem Kalenderereignis in die Ausgabedatei.
  • SkipByteOrderMarkInBody – schreibt Byte‑Order‑Mark (BOM)-Bytes in die Ausgabedatei.
  • RenderVCardInfo – schreibt Text aus der VCard‑AlternativeView in die Ausgabedatei.
  • DisplayAsOutlook – Anzeige des From‑Headers.
  • RenderTaskFields – schreibt bestimmte Aufgabenfelder in die Ausgabedatei.
  • Keine – Keine Einstellung angegeben.

Das folgende Code‑Snippet zeigt, wie EML‑Dateien mit optionalen Einstellungen in MHTML konvertiert werden.

Kalenderereignisse beim Konvertieren zu MHTML rendern

Die MhtFormatOptions.RenderCalendarEvent rendert die Kalenderereignisse in das Ausgabe‑MHTML. Das folgende Code‑Snippet zeigt, wie Kalenderereignisse beim Konvertieren zu MHTML gerendert werden.

E‑Mail nach MHT ohne Inline‑Bilder exportieren

E‑Mail nach MHT mit benutzerdefinierter Zeitzone exportieren

MailMessage class provides the setTimeZoneOffset Eigenschaft zum Festlegen einer benutzerdefinierten Zeitzone beim Exportieren nach MHT. Das folgende Code‑Snippet zeigt, wie Sie E‑Mails nach MHT mit angepasster Zeitzone exportieren.

MailMessage msg = MailMessage.load(filename, new MsgLoadOptions());
msg.setDate(new Date());

// Set the timezone offset in milliseconds
msg.setTimeZoneOffset(5*60*60*1000);

MhtSaveOptions mhtOptions = new MhtSaveOptions();
mhtOptions.setMhtFormatOptions(MhtFormatOptions.WriteHeader);
msg.save(dataDir + "ExportToMHTWithCustomTimezone_out.mhtml", mhtOptions);

Exportieren von E‑Mails nach EML

Das folgende Code‑Snippet zeigt, wie Sie E‑Mails in EML exportieren.

E‑Mail als HTML speichern

Die HtmlSaveOptions Klasse ermöglicht den Export des Nachrichtenkörpers nach HTML. Das folgende Code‑Snippet zeigt, wie Sie eine Nachricht als HTML speichern.

E‑Mail‑Nachricht als HTML mit relativem Pfad zu Ressourcen speichern

Beim Exportieren von E‑Mail‑Nachrichten ins HTML‑Format kann gewählt werden, Ressourcen mit relativen Pfaden zu speichern. Diese Funktion bietet mehr Flexibilität bei der Verknüpfung von Ressourcen in der ausgegebenen HTML‑Datei, was das Teilen und Anzeigen gespeicherter E‑Mails auf verschiedenen Systemen erleichtert. Die HtmlSaveOptions.UseRelativePathToResources Eigenschaft bietet die Möglichkeit, Ressourcen mit relativen Pfaden zu speichern. Der Standardwert ist false (Ressourcen werden mit absoluten Pfaden gespeichert). Wenn auf true gesetzt, werden Ressourcen mit relativen Pfaden gespeichert. HTML‑Dateien mit relativen Pfaden sind portabler und können korrekt angezeigt werden, unabhängig von der Dateistruktur der Hosting‑Umgebung. Sie können je nach Anforderung zwischen absoluten und relativen Pfaden wählen. Sie können benutzerdefinierte Pfade für Ressourcen mit dem ResourceHtmlRenderingHandler Ereignis.

Speichern mit dem standardmäßigen relativen Pfad zu Ressourcen

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(true);

msg.save("target.html", htmlSaveOptions);

In diesem Fall werden Ressourcen im Ordner [html dateiname].files im gleichen Pfad wie die .html‑Datei gespeichert und das HTML verweist über relative Pfade auf die Ressourcen.

Speichern mit absolutem Pfad zu Ressourcen

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

msg.save("target.html", htmlSaveOptions);

Wie im ersten Fall werden Ressourcen standardmäßig im Ordner [html dateiname].files gespeichert, das HTML verweist jedoch auf die Ressourcen mit absoluten Pfaden.

Benutzerdefinierter relativer Pfad mittels ResourceHtmlRenderingHandler‑Ereignis

MapiMessage msg = MapiMessage.load(sourceFileName);

HtmlSaveOptions htmlSaveOptions = new HtmlSaveOptions();
htmlSaveOptions.setResourceRenderingMode(ResourceRenderingMode.SaveToFile);
htmlSaveOptions.setUseRelativePathToResources(false);

htmlSaveOptions.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {
    @Override
    public void invoke(Object sender, ResourceHtmlRenderingEventArgs args) {
        if (sender instanceof AttachmentBase) {
            AttachmentBase attachment = (AttachmentBase) sender;
            // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
            args.setPathToResourceFile("images\\" + attachment.getContentType().getName());
        }
    }
});

msg.save(targetPath + "A Day in the Park.html", htmlSaveOptions);

Durch Verwendung des ResourceHtmlRenderingHandler Ereignis können Sie benutzerdefinierte relative oder absolute Pfade für Ressourcen festlegen. Beim Anpassen von Pfaden mit dem ResourceHtmlRenderingHandler Event‑Handler, und da UseRelativePathToResources auf true gesetzt ist, sollten Sie einen relativen Pfad zu dem PathToResourceFile Eigenschaft, um eine korrekte Referenzierung sicherzustellen.

Benutzerdefinierte Icons in einer Nachricht beim Konvertieren zu HTML erhalten

Manchmal enthält die Nachricht Inline‑Anhänge, die als Icon‑Bilder im Nachrichtentext angezeigt werden. Solche Nachrichten können beim Konvertieren nach HTML Probleme verursachen, da die Icon‑Bilder verloren gehen. Das liegt daran, dass die Icons der Anhänge nicht direkt in der Nachricht gespeichert sind.

Der Benutzer von Aspose.Email kann die Icons für Anhänge beim Konvertieren der Nachricht nach HTML anpassen. Dafür ist die HtmlSaveOptions.ResourceHtmlRendering Ereignis wird verwendet, um das Rendern von Ressourcendateien (wie Anhängen) beim Speichern einer E‑Mail‑Nachricht als HTML‑Datei anzupassen. Im untenstehenden Code‑Beispiel wird der Event‑Handler genutzt, um den Pfad zu Ressourcendateien (Icons) dynamisch basierend auf dem Content‑Type des Anhangs festzulegen. Dies ermöglicht ein benutzerdefiniertes Rendering von Ressourcen im HTML‑Ausgabe basierend auf deren Dateityp.


 HtmlSaveOptions options = new HtmlSaveOptions();

options.setResourceHtmlRenderingHandler(new ResourceHtmlRenderingHandler() {

   @Override

   public void invoke(Object sender, ResourceHtmlRenderingEventArgs e) {

        AttachmentBase attachment = (AttachmentBase) sender;

        e.setCaption(attachment.getContentType().getName());

       if (attachment.getContentType().getName().endsWith(".pdf")) {

            e.setPathToResourceFile("pdf_icon.png");

       } else if (attachment.getContentType().getName().endsWith(".docx")) {

            e.setPathToResourceFile("word_icon.jpg");

       } else if (attachment.getContentType().getName().endsWith(".jpg")) {

            e.setPathToResourceFile("jpeg_icon.png");

       } else {

            e.setPathToResourceFile("not_found_icon.png");

       }

   }

});

options.setResourceRenderingMode(ResourceRenderingMode.SubstituteFromFile);

String fileName = "message.msg";

MailMessage mailMessage = MailMessage.load(fileName);

mailMessage.save("fileName.html", options);

Zeit und Zeitzone beim Speichern von EML als HTML festlegen

Aspose.Email‑Benutzer können die Anzeigeformate für Zeit und Zeitzone festlegen in HtmlSaveOptions. Die HeadersFormattingOptions Klasse ermöglicht die Angabe von Optionen zur Kopfzeilenformatierung beim Speichern von MailMessage im MHTML‑ oder HTML‑Format. Die folgenden Methoden der HtmlFormatOptions Klasse gibt an, welche Felder in der Ausgabedatei angezeigt werden sollen:

  • RenderCalendarEvent - Gibt an, dass Text aus dem Kalenderevent in das Ausgab‑MHTML geschrieben werden soll.
  • RenderVCardInfo - Gibt an, dass Text aus VCard AlternativeView in das Ausgab‑HTML geschrieben werden soll.

Das folgende Beispiel zeigt, wie Sie Zeit und Zeitzone beim Speichern von EML nach HTML festlegen:

MailMessage msg = MailMessage.load("fileName");
HtmlSaveOptions options = new HtmlSaveOptions();
options.setHtmlFormatOptions(HtmlFormatOptions.WriteHeader);
options.getFormatTemplates().set_Item("DateTime", "MM d yyyy HH:mm tt");

Speichern als HTML ohne eingebettete Ressourcen

Speichern einer Nachricht als Outlook‑Vorlage (.oft) Datei

Das folgende Code‑Snippet zeigt, wie Sie eine Nachricht als Outlook‑Vorlage (.oft) speichern.