加载和保存消息
加载和保存电子邮件消息
检测文件格式
Aspose.Email API 提供检测提供的邮件文件格式的功能。该 DetectFileFormat 方法的 FileFormatUtil 可以使用该类来实现此功能。以下类和方法可用于检测已加载的文件格式。
- FileFormatType 类
- FileFormatInfo 类
- FileFormatUtil 类
- FileFormatUtil.detectFileFormat(Stream) Method
- FileFormatUtil.detectFileFormat(String) Method
以下代码片段展示了如何检测文件格式。
加载电子邮件消息
要使用特定加载选项加载消息,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 头的格式:
- setPageHeaderFormat(String value) - PageHeaderFormat 用于 HeadersFormattingOptions 实例,如果未设置 DefaultPageHeaderFormat。
- setHeaderFormat(String value) - HeaderFormat 用于 HeadersFormattingOptions 实例,如果未设置 DefaultHeaderFormat。
- setBeforeHeadersFormat(String value) - BeforeHeadersFormat 用于 HeadersFormattingOptions 实例,如果未设置 BeforeHeadersFormat。
- setAfterHeadersFormat(String value) - AfterHeadersFormat 用于 HeadersFormattingOptions 实例,如果未设置 AfterHeadersFormat。
// 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)文件。