Chargement et enregistrement des messages

Chargement et enregistrement des messages électroniques

Détecter un format de fichier

L’API Aspose.Email fournit la capacité de détecter le format du fichier de message fourni. Le DetectFileFormat méthode du FileFormatUtil la classe peut être utilisée pour cela. Les classes et méthodes suivantes peuvent être utilisées pour détecter le format du fichier chargé.

L’extrait de code suivant vous montre comment détecter les formats de fichier.

Charger un message électronique

Pour charger un message avec des options de chargement spécifiques, Aspose.Email fournit le LoadOptions classe qui peut être utilisée comme suit :

Préserver le format du message incorporé lors du chargement

Enregistrer et convertir les messages électroniques

Aspose.Email facilite la conversion de tout type de message vers un autre format. Pour démontrer cette fonctionnalité, le code de cet article charge trois types de messages depuis le disque et les enregistre de nouveau dans d’autres formats. La classe de base SaveOptions et les classes EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions pour des paramètres supplémentaires lors de l’enregistrement MailMessage peut être utilisé pour enregistrer des messages dans d’autres formats. L’article montre comment utiliser ces classes pour enregistrer un e‑mail d’exemple en tant que :

  • format EML.
  • Outlook MSG.
  • format MHTML.
  • format HTML.

Charger et enregistrer un message électronique

L’extrait de code suivant vous montre comment charger un message EML et l’enregistrer sur le disque dans le même format.

Charger et enregistrer un message électronique en préservant les limites originales

L’extrait de code suivant vous montre comment charger un EML et l’enregistrer en tant qu’EML en préservant les limites originales.

Enregistrement en EML en préservant les pièces jointes TNEF

L’extrait de code suivant vous montre comment enregistrer en EML en préservant les pièces jointes TNEF.

Enregistrer EML en MSG

L’extrait de code suivant vous montre comment charger un message EML et le convertir en MSG en utilisant l’option appropriée de SaveOptions.

Enregistrer EML en MSG avec dates préservées

Le MsgSaveOptions la classe vous permet d’enregistrer le message source en tant que fichier Outlook Message (MSG) en préservant les dates. L’extrait de code suivant vous montre comment enregistrer en MSG avec dates préservées.

Enregistrer EML en tant que MHTML

Différentes options de MHTML peuvent être utilisées pour obtenir les résultats souhaités. L’extrait de code suivant vous montre comment charger un message EML dans MailMessage et le convertir en MHTML avec une date de message dans le système UTC.

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

Formater les en‑têtes MHT globalement lors de l’enregistrement depuis EML

Avec Aspose.Email, vous pouvez utiliser les options de formatage globales pour l’en‑tête Mht. Les options globales définissent le formatage commun d’un en‑tête Mht pour tous les MhtSaveOptions instances. Cette fonctionnalité est conçue pour éviter de définir le formatage pour chaque instance de MhtSaveOptions.

Utilisez les méthodes suivantes de la GlobalFormattingOptions classe et l’exemple de code ci‑dessous pour définir le formatage d’un en‑tête Mht :

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

Convertir EML en MHTML avec des paramètres optionnels

Le MhtSaveOptions la classe fournit des options supplémentaires pour enregistrer des messages e‑mail au format MHTML. L’énumérateur MhtFormatOptions rend possible l’écriture d’informations e‑mail supplémentaires dans le MHTML de sortie. Les champs supplémentaires suivants peuvent être écrits :

  • WriteHeader - écrire l’en‑tête e‑mail dans le fichier de sortie.
  • WriteOutlineAttachments - écrire les pièces jointes de contour dans le fichier de sortie.
  • WriteCompleteEmailAddress - écrire l’adresse e‑mail complète dans le fichier de sortie.
  • NoEncodeCharacters - aucun encodage de transfert des caractères ne doit être utilisé.
  • HideExtraPrintHeader - masquer l’en‑tête d’impression supplémentaire en haut du fichier de sortie.
  • WriteCompleteToEmailAddress - écrire l’adresse e‑mail complète du destinataire dans le fichier de sortie.
  • WriteCompleteFromEmailAddress - écrire l’adresse e‑mail complète de l’expéditeur dans le fichier de sortie.
  • WriteCompleteCcEmailAddress - écrire les adresses e‑mail complètes de tout destinataire en copie carbone dans le fichier de sortie.
  • WriteCompleteBccEmailAddress - écrire l’adresse e‑mail complète de tout destinataire en copie cachée dans le fichier de sortie.
  • RenderCalendarEvent - écrire le texte de l’événement du calendrier dans le fichier de sortie.
  • SkipByteOrderMarkInBody - écrire les octets du Byte Order Mark (BOM) dans le fichier de sortie.
  • RenderVCardInfo - écrire le texte de la vue alternative VCard dans le fichier de sortie.
  • DisplayOutlook - afficher l’en‑tête De.
  • RenderTaskFields - écrit des champs de tâche spécifiques dans le fichier de sortie.
  • Aucun - Aucun paramètre spécifié.

L’extrait de code suivant vous montre comment convertir des fichiers EML en MHTML avec des paramètres optionnels.

Rendre les événements du calendrier lors de la conversion en MHTML

Le MhtFormatOptions.RenderCalendarEvent rend les événements du calendrier dans le MTHML de sortie. L’extrait de code suivant vous montre comment rendre les événements du calendrier lors de la conversion en MHTML.

Exporter l’e‑mail vers MHT sans images intégrées

Exporter l’e‑mail en MHT avec un fuseau horaire personnalisé

MailMessage classe fournit le setTimeZoneOffset propriété permettant de définir un fuseau horaire personnalisé lors de l’exportation en MHT. L’extrait de code suivant vous montre comment exporter un e‑mail en MHT avec un fuseau horaire personnalisé.

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

Exportation d’e‑mail en EML

L’extrait de code suivant vous montre comment exporter des e‑mails au format EML.

Enregistrer l’e‑mail en HTML

Le HtmlSaveOptions la classe vous permet d’exporter le corps du message au format HTML. L’extrait de code suivant vous montre comment enregistrer un message en HTML.

Enregistrer le message e‑mail en HTML avec un chemin relatif vers les ressources

Lors de l’exportation de messages e‑mail au format HTML, il est possible de choisir d’enregistrer les ressources des e‑mails avec des chemins relatifs. Cette fonctionnalité offre plus de flexibilité quant à la manière dont les ressources sont liées dans le fichier HTML de sortie, facilitant le partage et l’affichage des e‑mails enregistrés sur différents systèmes. Le HtmlSaveOptions.UseRelativePathToResources la propriété permet de sauvegarder les ressources avec des chemins relatifs. La valeur par défaut de la propriété est false (les ressources sont enregistrées avec des chemins absolus). Lorsqu’elle est définie sur true, les ressources sont enregistrées avec des chemins relatifs. Les fichiers HTML avec des chemins relatifs sont plus portables et peuvent être visualisés correctement quel que soit la structure de fichiers de l’environnement d’hébergement. Vous pouvez choisir entre des chemins absolus et relatifs selon les besoins. Vous pouvez définir des chemins personnalisés pour les ressources en utilisant le ResourceHtmlRenderingHandler événement.

Enregistrer avec le chemin relatif par défaut vers les ressources

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

Dans ce cas, les ressources seront enregistrées dans le dossier [nom du fichier html].files, au même emplacement que le fichier .html, et le HTML référencera les ressources via des chemins relatifs.

Enregistrer avec un chemin absolu vers les ressources

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

Comme dans le premier cas, les ressources seront enregistrées par défaut dans le dossier [nom du fichier html].files, mais le HTML référencera les ressources en utilisant des chemins absolus.

Chemin relatif personnalisé à l’aide de l’événement ResourceHtmlRenderingHandler

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

En utilisant le ResourceHtmlRenderingHandler événement, vous pouvez définir des chemins relatifs ou absolus personnalisés pour les ressources. Lors de la personnalisation des chemins avec le ResourceHtmlRenderingHandler gestionnaire d’événement, et puisque UseRelativePathToResources est définie sur true, vous devez attribuer un chemin relatif au PathToResourceFile propriété pour assurer une référence correcte.

Conserver les icônes personnalisées d’un message lors de la conversion en HTML

Parfois, le message contient des pièces jointes en ligne, qui sont affichées sous forme d’icônes dans le corps du message. De tels messages peuvent poser des problèmes lors de leur conversion en HTML, car les images d’icônes sont perdues. Cela s’explique par le fait que les icônes des pièces jointes ne sont pas stockées directement dans le message.

L’utilisateur d’Aspose.Email peut personnaliser les icônes des pièces jointes lors de la conversion du message en HTML. Pour cela, le HtmlSaveOptions.ResourceHtmlRendering l’événement est utilisé pour personnaliser le rendu des fichiers de ressources (tels que les pièces jointes) lors de l’enregistrement d’un message e‑mail sous forme de fichier HTML. Dans l’exemple de code ci‑dessous, le gestionnaire d’événement est utilisé pour définir dynamiquement le chemin vers les fichiers de ressources (icônes) en fonction du type de contenu de la pièce jointe. Cela permet un rendu personnalisé des ressources dans la sortie HTML selon leur type de fichier.


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

Définir l’heure et le fuseau horaire lors de l’enregistrement d’un EML en HTML

Les utilisateurs d’Aspose.Email peuvent définir les formats d’affichage de l’heure et du fuseau horaire dans HtmlSaveOptions. Le HeadersFormattingOptions la classe permet de spécifier les options de mise en forme des en‑têtes lors de l’enregistrement d’un MailMessage au format Mhtml ou Html. Les méthodes suivantes de la HtmlFormatOptions la classe spécifie les champs à afficher dans le fichier de sortie :

  • RenderCalendarEvent - Indique que le texte provenant de l’événement du calendrier doit être écrit dans le mhtml de sortie.
  • RenderVCardInfo - Indique que le texte provenant de la vue alternative VCard doit être écrit dans le HTML de sortie.

L’exemple de code suivant montre comment définir l’heure et le fuseau horaire lors de l’enregistrement d’un EML en HTML :

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

Enregistrement en HTML sans intégrer les ressources

Enregistrement d’un message en tant que modèle Outlook (.oft)

L’extrait de code suivant vous montre comment enregistrer un message sous forme de modèle Outlook (.oft).