加载和保存消息

加载和保存电子邮件消息

检测文件格式

Aspose.Email API 提供检测提供的邮件文件格式的功能。该 DetectFileFormat 方法的 FileFormatUtil 可以使用该类来实现此功能。以下类和方法可用于检测已加载的文件格式。

以下代码片段展示了如何检测文件格式。

加载电子邮件消息

要使用特定加载选项加载消息,Aspose.Email 提供了 LoadOptions 可按如下方式使用的类:

在加载期间保留嵌入的消息格式

保存并转换电子邮件消息

Aspose.Email 让将任何消息类型转换为其他格式变得轻松。为演示此功能,本文的代码从磁盘加载三种类型的消息并将它们保存为其他格式。基类 SaveOptions 以及这些类 EmlSaveOptions, MsgSaveOptions, MhtSaveOptions, HtmlSaveOptions 用于保存时的额外设置 MailMessage 可用于将消息保存为其他格式。本文展示了如何使用这些类将示例电子邮件保存为:

  • EML 格式。
  • Outlook MSG。
  • MHTML 格式。
  • HTML 格式。

加载并保存电子邮件消息

以下代码片段展示了如何加载 EML 消息并以相同格式保存到磁盘。

加载并保存电子邮件消息,保留原始边界

以下代码片段展示了如何加载 EML 并保存为 EML,同时保留原始边界。

保存为 EML,保留 TNEF 附件

以下代码片段展示了如何保存为 EML,同时保留 TNEF 附件。

将 EML 保存为 MSG

以下代码片段展示了如何加载 EML 消息并使用相应选项将其转换为 MSG SaveOptions.

将 EML 保存为保留日期的 MSG

MsgSaveOptions 该类允许您将源消息保存为 Outlook Message 文件(MSG),并保留日期。以下代码片段展示了如何保存为保留日期的 MSG。

将 EML 保存为 MHTML

可以使用不同的 MHTML 选项来获得期望的结果。以下代码片段展示了如何将 EML 消息加载到 MailMessage 并将其转换为带有 UTC 系统消息日期的 MHTML。

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

从 EML 保存时全局格式化 MHT 头

使用 Aspose.Email,您可以为 MHT 头使用全局格式选项。全局选项为所有 MhtSaveOptions 实例。此功能旨在避免为每个实例设置格式 MhtSaveOptions.

使用以下方法的 GlobalFormattingOptions 类和下面的代码示例用于设置 MHT 头的格式:

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

使用可选设置将 EML 转换为 MHTML

MhtSaveOptions 该类提供将电子邮件消息保存为 MHTML 格式的额外选项。枚举 MhtFormatOptions 使得可以将额外的电子邮件信息写入输出 MHTML。可以写入以下附加字段:

  • WriteHeader - 将电子邮件头写入输出文件。
  • WriteOutlineAttachments - 将大纲附件写入输出文件。
  • WriteCompleteEmailAddress - 将完整的电子邮件地址写入输出文件。
  • NoEncodeCharacters - 不应使用字符的传输编码。
  • HideExtraPrintHeader - 隐藏输出文件顶部的额外打印头。
  • WriteCompleteToEmailAddress - 将收件人的完整电子邮件地址写入输出文件。
  • WriteCompleteFromEmailAddress - 将发送者的完整电子邮件地址写入输出文件。
  • WriteCompleteCcEmailAddress - 将所有抄送收件人的完整电子邮件地址写入输出文件。
  • WriteCompleteBccEmailAddress - 将所有密送收件人的完整电子邮件地址写入输出文件。
  • RenderCalendarEvent - 将日历事件的文本写入输出文件。
  • SkipByteOrderMarkInBody - 将字节顺序标记 (BOM) 写入输出文件。
  • RenderVCardInfo - 将 VCard AlternativeView 的文本写入输出文件。
  • DisplayAsOutlook - 显示 From 头。
  • RenderTaskFields - 将特定任务字段写入输出文件。
  • None - 未指定设置。

以下代码片段展示了如何使用可选设置将 EML 文件转换为 MHTML。

在转换为 MHTML 时渲染日历事件

MhtFormatOptions.RenderCalendarEvent 将日历事件渲染到输出 MHTML。以下代码片段展示了在转换为 MHTML 时渲染日历事件的方法。

导出电子邮件为 MHT(无内嵌图像)

使用自定义时区导出电子邮件为 MHT

MailMessage class 提供了 setTimeZoneOffset 属性用于在导出为 MHT 时设置自定义时区。以下代码片段展示了如何使用自定义时区导出电子邮件为 MHT。

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

导出电子邮件为 EML

以下代码片段展示了如何将电子邮件导出为 EML。

将电子邮件保存为 HTML

HtmlSaveOptions 类允许您将消息正文导出为 HTML。以下代码片段展示了如何将消息保存为 HTML。

使用相对路径保存电子邮件为 HTML

在将电子邮件导出为 HTML 格式时,可以选择使用相对路径保存电子邮件资源。此功能在输出 HTML 文件中链接资源的方式上提供了更大的灵活性,使得在不同系统之间共享和显示已保存的电子邮件更加方便。该 HtmlSaveOptions.UseRelativePathToResources 属性提供使用相对路径保存资源的功能。默认属性值为 false(资源以绝对路径保存)。设置为 true 时,资源将以相对路径保存。使用相对路径的 HTML 文件更具可移植性,无论托管环境的文件结构如何,都能正确显示。您可以根据需求在绝对路径和相对路径之间进行选择。您可以使用 ResourceHtmlRenderingHandler 事件。

使用默认相对路径保存资源

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

在此情况下,资源将保存在 [html 文件名].files 文件夹中,位于 .html 文件相同的路径下,HTML 将通过相对路径引用这些资源。

使用绝对路径保存资源

MapiMessage msg = MapiMessage.load(sourceFileName);

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

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

如同第一种情况,资源默认会保存在 [html 文件名].files 文件夹中,但 HTML 会使用绝对路径引用资源。

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

通过使用 ResourceHtmlRenderingHandler 事件,您可以为资源设置自定义的相对或绝对路径。在使用 ResourceHtmlRenderingHandler 事件处理程序,而且由于 UseRelativePathToResources 设置为 true 时,您应为 PathToResourceFile 属性用于确保正确的引用。

在将消息转换为 HTML 时保留自定义图标

有时,消息包含内联附件,这些附件会以图标图像显示在消息正文中。此类消息在转换为 HTML 时可能会出现问题,因为图标图像会丢失。这是因为附件的图标并未直接保存在消息中。

Aspose.Email 的用户可以在将消息转换为 HTML 时自定义附件的图标。为此, HtmlSaveOptions.ResourceHtmlRendering 事件用于在将电子邮件保存为 HTML 文件时自定义资源文件(如附件)的呈现方式。在下面的代码示例中,事件处理程序根据附件的内容类型动态设置资源文件(图标)的路径。这使得可以根据文件类型在 HTML 输出中自定义资源的呈现。


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

在将 EML 保存为 HTML 时设置时间和时区

Aspose.Email 用户可以在其中设置时间和时区的显示格式 HtmlSaveOptions。该 HeadersFormattingOptions 类允许在将 MailMessage 保存为 MHTML 或 HTML 格式时指定标题格式选项。以下方法的 HtmlFormatOptions 类指定要在输出文件中显示的字段:

  • RenderCalendarEvent - 表示应将来自日历事件的文本写入输出的 MHTML。
  • RenderVCardInfo - 表示应将来自 VCard AlternativeView 的文本写入输出的 HTML。

以下代码示例展示了在将 EML 保存为 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");

以不嵌入资源的方式保存为 HTML

将消息保存为 Outlook 模板(.oft)文件

以下代码片段展示了如何将消息保存为 Outlook 模板(.oft)文件。