将 EML 转换为 HTML

将 EML 转换为 HTML

要将电子邮件内容集成到 Web 应用程序中,EML 转 HTML 转换是正确的选择,可实现视觉上更具吸引力的邮件展示。

要将 EML 转换为 HTML,您需要以下类:

  • MailMessage 类用于创建代表电子邮件的对象。它允许访问邮件属性,例如主题、正文、发件人和收件人地址等。通过其方法,您可以创建、加载、解析、修改、保存邮件,或对其进行其他操作。
  • SaveOptions 类提供了以多种格式保存电子邮件的选项。它使用户能够自定义电子邮件在不同格式下的保存方式。使用此类,用户可以指定保存附件、头部、元数据以及电子邮件属性的选项,设置编码选项或选择是否以加密方式保存邮件。

在下面的代码示例中,这些类协同工作,加载现有的 EML 文件并将消息格式指定为 EML。随后,它们使用指定的默认 HTML 保存选项将加载的电子邮件保存为 HTML 文件:

  1. 使用 MailMessage.Load() 方法,将现有文件加载到指定消息格式的 MailMessage 对象中。
  2. 使用 保存 方法。使用 SaveOptions.DefaultHtml() 用于指定 HTML 格式的保存选项。
// Initialize and Load an existing EML file by specifying the MessageFormat
var message = MailMessage.Load("myMessage.eml");
message.Save("output.html", SaveOptions.DefaultHtml);

将 EML 资源另存为文件

Aspose.Email 提供了 ResourceRenderingMode 枚举,允许开发者在 HTML 文件中操作资源。在下面的代码示例中,此枚举用于将资源保存到文件并在 HTML 中插入指向该文件路径的 ‘src’ 标签:

  1. 使用 MapiMessage.Load 方法。
  2. 创建以下实例: HtmlSaveOptions 并指定渲染和资源选项。
  3. 使用 保存 方法,并使用 HtmlSaveOptions 参数。
var msg = MapiMessage.Load(sourceFileName);
var htmlSaveOptions = new HtmlSaveOptions
{
ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
UseRelativePathToResources = true
};
msg.Save(Path.Combine("target.html"), htmlSaveOptions);

将资源嵌入 HTML 文件

在某些情况下,需要将资源(如图像)直接嵌入到 HTML 文件中,以实现无缝分发和展示。使用 Aspose.Email for .NET,您可以轻松使用 ResourceRenderingMode 枚举:

  1. 使用 MapiMessage.Load 方法。
  2. 创建一个新的 HtmlSaveOptions 对象并将 ResourceRenderingMode 属性设置为 EmbedIntoHtml。
  3. 使用 保存 方法,指定目标文件路径并将 HtmlSaveOptions 对象作为参数传入,以将资源嵌入到 HTML 文件中。
var msg = MapiMessage.Load(sourceFileName);
var htmlSaveOptions = new HtmlSaveOptions
{
ResourceRenderingMode = ResourceRenderingMode.EmbedIntoHtml
};
msg.Save(Path.Combine("target.html"), htmlSaveOptions);

将 EML 转换为 ICS

以下代码示例演示如何从 EML 文件中提取日历事件数据并保存到单独的 ICS 文件以供进一步使用或操作。

// Load the EML file
var eml = MailMessage.Load("message.eml");
// Find the alternate view with MediaType "text/calendar" (ICS)
var icsView = eml.GetAlternateViewContent("text/calendar");
// If an ICS view is found, save it to a file
if (icsView != null)
{
    File.WriteAllText("appointment.ics", icsView);
}

自定义

Aspose.Email for .NET 提供了用于自定义从 EML(电子邮件)文件中提取的 ICS(iCalendar)内容的工具。

自定义事件详情

以下代码示例演示如何设置约会的各项详细信息,如摘要、地点和描述。代码使用了 Appointment 类,表示以 ICS(iCalendar)格式的日历约会或事件。该类提供属性和方法,以编程方式创建、修改和管理日历事件。

// Load the EML file
var eml = MailMessage.Load("message.eml");
// Find the alternate view with MediaType "text/calendar" (ICS)
var icsView = eml.GetAlternateViewContent("text/calendar");
// If an ICS view is found, load it to Appointment class object
var appointment = Appointment.Load(new MemoryStream(Encoding.UTF8.GetBytes(icsView)));

// Customize the event details
appointment.Summary = "Customized Event Summary";
appointment.Location = "Customized Location";
appointment.Description = "Customized Event Description";

// Add or modify attendees as needed
appointment.Attendees.Clear();
appointment.Attendees.Add("custom@example.com");

// Save the customized ICS content to a file
appointment.Save("customized_appointment.ics");

创建重复模式

以下代码示例演示如何为约会创建每周重复模式,其中约会每 5 周的星期六发生一次。代码使用了 重复 属性的 Appointment 类,用于获取或设置重复模式。

var pattern = new  WeeklyRecurrencePattern(5, 7);
pattern. EndDate = new DateTime(2023, 8, 7);

appointment.Recurrence = pattern;

将 EML 添加到 MBOX

MBOX 是一种常用的将多个电子邮件存储在单个文件中的格式,适用于电子邮件归档和迁移。使用 MboxrdStorageWriter 类用于将电子邮件写入 MBOX 文件。以下代码示例演示如何执行此任务:

using (var message = MailMessage.Load("inputFile.eml")){
	using (var writer = new MboxrdStorageWriter("output.mbox", false)){
			writer.WriteMessage(message);
	}
} 

将 EML 转换为 MHTML

使用 Aspose.Email for .NET,您可以轻松将 EML 文件转换为 MHTML 格式,以用于归档、兼容性、离线查看等各种目的。使用 MailMessage.Load,然后使用 MhtSaveOptions 类作为参数传递给 MailMessage.Save 方法用于在将消息另存为文件时指定输出文件格式:

// Initialize and Load an existing EML file by specifying the MessageFormat
var message = MailMessage.Load("myMessage.eml");
var mhtSaveOptions = new MhtSaveOptions;
message.Save("output.mhtml", mhtSaveOptions);

MhtSaveOptions 类提供了多种选项,以自定义输出 MHTML 文件以满足您的特定需求:

  • 保留原始日期格式。您可以选择在转换过程中保留电子邮件的原始日期格式:

    saveOptions.PreserveOriginalDate = true;
    
  • 设置输出编码。您可以指定写入输出 MHTML 文件时使用的编码:

    saveOptions.OutputEncoding = Encoding.UTF8; 
    
  • 包括附件。如果您希望在将邮件转换为 MHTML 格式时保留附件,这会很有帮助:

    saveOptions.SaveAttachments = true;
    

将 EML 转换为 MSG

无论您是需要迁移邮件数据、归档消息,还是与 Microsoft Outlook 集成,Aspose.Email 都提供了解决方案来实现您的目标。MSG 文件被 Microsoft Outlook 广泛使用。要进行 EML 到 MSG 的转换,请使用 MailMessage.Load 方法加载现有 EML 文件,指定其加载方式为 EmlLoadOptions.

以下代码示例演示如何将 EML 文件转换为 MSG 格式:

// Load mail message
using (var message = MailMessage.Load("sourceFile.eml", new EmlLoadOptions())){
// Save as MSG
var msgSaveOptions = new MsgSaveOptions;
message.Save("output.msg", MsgSaveOptions);
} 

将 EML 转换为 OFT

要将 EML 文件转换为 Outlook 模板 (OFT) 格式,请使用 MailMessage.Load 方法并使用 MailMessage.Save 指定将消息保存为 OFT 格式的默认选项:

// load the EML file to be converted
var message = MailMessage.Load("My File.eml"); 
// save EML as a OFT 
message.Save("Saved File.oft", SaveOptions.DefaultOft);

将 EML 添加到 PST

要将 EML 文件转换为个人存储表 (PST) 格式,请使用 MapiMessage.Load 方法,将输出文件创建为 PersonalStorage.Create 并使用 AddMessage:

using (var msg = MapiMessage.Load("sourceFile.eml", new EmlLoadOptions()))
{
    using (var personalStorage = PersonalStorage.Create("outputFile.pst", FileFormatVersion.Unicode))
  {
        var inbox = personalStorage.RootFolder.AddSubFolder("Inbox");
        inbox.AddMessage(msg);
  }
}

将 EML 添加到 OST

开发者可以轻松将 EML 文件转换为 Outlook 离线存储表 (OST) 格式,实现与 Microsoft Outlook 的集成。以下代码示例演示如何将 EML 消息添加到 OST 文件中:

using (var ost = PersonalStorage.FromFile("storage.ost"))
{
    // Load the EML file
    var msg = MapiMessage.Load("message.eml", new EmlLoadOptions());

    // Add the EML message to the OST file
    var folderInfo = ost.RootFolder.GetSubFolder("Inbox");
    folderInfo.AddMessage(msg);
}

EmlLoadOptions 参数指定加载 EML 文件的其他选项,例如保留嵌入的消息格式、去除签名等。

将 EML 转换为 VCF

Aspose.Email for .NET 提供将 EML 文件转换为 vCard(VCF)格式的功能,允许开发者从电子邮件中提取联系信息。为此,库提供了 GetAlternateViewContent 方法的 MailMessage 类使开发者能够访问电子邮件中的备用视图并提取嵌入在 EML 文件中的 VCF 内容以供进一步使用:

// Load the EML file
var eml = MailMessage.Load("message.eml");
// Find the alternate view with MediaType "text/vcard" (VCF)
var vcfView = eml.GetAlternateViewContent("text/vcard");
// If an VCF view is found, save it to a file
if (vcfView != null)
{
    File.WriteAllText("contact.vcf", vcfView);
}