管理 Outlook 消息

将电子邮件保存为 HTML

Aspose.Email 在将消息导出为 HTML 格式时,使得可以使用相对路径保存电子邮件资源。此功能在输出 HTML 文件中链接资源时提供了更大的灵活性,便于在不同系统上共享和显示已保存的电子邮件。要使用相对路径保存资源,请使用 HtmlSaveOptions.UseRelativePathToResources 属性。默认属性值为 false(资源以绝对路径保存)。设置为 true 时,资源将以相对路径保存。

使用相对路径的 HTML 文件更具可移植性,无论托管环境的文件结构如何都能正确显示。您可以根据需求在绝对路径和相对路径之间进行选择。可使用 ResourceHtmlRendering 事件。

以下代码示例演示了如何 使用默认相对路径保存电子邮件及其资源

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

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

下面的代码示例演示了如何 使用绝对路径保存资源

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = false
};

msg.Save(Path.Combine("target_files"), htmlSaveOptions);

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

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

以下代码示例演示了如何使用 ResourceHtmlRendering 事件 自定义相对路径

var msg = MapiMessage.Load(sourceFileName);

var htmlSaveOptions = new HtmlSaveOptions
{
    ResourceRenderingMode = ResourceRenderingMode.SaveToFile,
    UseRelativePathToResources = true
};

htmlSaveOptions.ResourceHtmlRendering += (o, args) =>
{
    if (o is AttachmentBase attachment)
    {
	    // Since UseRelativePathToResources = true, you should assign a relative path to the PathToResourceFile property.
        args.PathToResourceFile = $@"images\{attachment.ContentType.Name}";
    }
};

msg.Save(Path.Combine(targetPath, "A Day in the Park.html"), htmlSaveOptions);

将 MSG 转换为 MIME 消息

Aspose.Email API 提供使用以下方式将 MSG 文件转换为 MIME 消息的功能: ToMailMessage 方法。

为消息转换和加载设置超时

以下功能让您可以为转换和加载过程设置毫秒级超时:

下面的代码示例将展示如何在转换消息时设置超时:

var options = new MailConversionOptions();
// Set the timeout to 5 seconds
options.Timeout = 5000;

options.TimeoutReached += (object sender, EventArgs args) =>
{
    string subj = (sender as MailMessage).Subject;
	 // Set a flag indicating the timeout was reached
    isTimedOut = true;
};

var mailMessage = mapiMessage.ToMailMessage(options);

MSG 转 EML(保留 RTF 正文)

将 MSG 文件转换为保留 RTF 正文的 EML 有两种方式:

这两个属性用于获取或设置是否在 MailMessage 中保留 rtf 正文的值。

以下代码片段展示了如何将 MSG 文件转换为 EML 并保留 RTF 正文:

var loadOptions = new MsgLoadOptions
{
    PreserveRtfContent = true
};

var eml = MailMessage.Load("my.msg", loadOptions);
var conversionOptions = new MailConversionOptions
{
    PreserveRtfContent = true
};

var msg = MapiMessage.Load("my.msg");

var eml = msg.ToMailMessage(conversionOptions);

处理 Outlook 模板文件(.OFT)

Outlook 模板在需要反复发送相似邮件时非常有用。您不必每次都从头准备邮件,而是先在 Outlook 中编写邮件并保存为 Outlook 模板(OFT)。之后,每当需要发送该邮件时,您可以从模板创建,省去在正文或主题行中重复编写相同文字、设置格式等的时间。Aspose.Email 的 MailMessage 类可用于加载和读取 Outlook 模板(OFT)文件。一旦在实例中加载了 Outlook 模板, MailMessage 类,您可以更新发件人、收件人、正文、主题及其他属性。更新属性后:

  • 使用以下方式发送电子邮件 SmtpClient 类或
  • 将邮件保存为 MSG 并使用 Microsoft Outlook 进行进一步的更新/验证。

在下面的代码示例中,我们:

  1. 使用以下方式加载模板 MailMessage 类。
  2. 更新部分属性。
  3. 以 MSG 格式保存邮件。

以下代码片段展示了如何加载 OFT 文件,更新消息并以 MSG 格式保存。

将 MSG 文件保存为模板

以下代码片段展示了如何将 Outlook MSG 文件保存为模板。

确定 MAPI 消息类型(OFT 或 MSG)

从文件加载 MapiMessage 对象时,您可能需要判断加载的消息是模板文件还是普通电子邮件文件。通过使用 IsTemplate 属性的 MapiMessage 使用此类,您可以准确检测电子邮件是否为模板。在处理和加工各种电子邮件文件时,此功能非常有价值。

下面的代码示例演示如何判断 MapiMessage 是 OFT 还是 MSG:

var msg = MapiMessage.Load("message.msg");
var isOft = msg.IsTemplate; // returns false

var msg = MapiMessage.Load("message.oft");
var isOft = msg.IsTemplate; // returns true

以 OFT 格式保存 MapiMessage 或 MailMessage

SaveOptions 此类允许您在将 MailMessage 或 MapiMessage 保存为特定格式时指定额外选项。

以下代码示例演示如何将消息保存为 OFT 格式:

// Save the MailMessage to OFT format
using (var eml = MailMessage.Load("message.eml"))
{
    eml.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    eml.Save("message.oft", saveOptions);

}

// Save the MapiMessage to OFT format
using (var msg = MapiMessage.Load("message.msg"))
{
    msg.Save("message.oft", SaveOptions.DefaultOft);
	
	// or alternative way #2
	var saveOptions = new MsgSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
	
	// or alternative  way #3
	saveOptions = SaveOptions.CreateSaveOptions(MailMessageSaveType.OutlookTemplateFormat);
    msg.Save("message.oft", saveOptions);
}

管理数字签名的消息

Aspose.Email 实现了完整的 S/MIME 邮件对象算法。这使得 API 在不同格式之间转换消息时能够完整保留数字签名。

在 EML 到 MSG 转换期间保留签名

Aspose.Email 在将 EML 转换为 MSG 时会保留数字签名。以下代码片段展示了如何从 EML 转换为 MSG。

将 S/MIME 消息从 MSG 转换为 EML

如以下代码片段所示,Aspose.Email 在将 MSG 转换为 EML 时会保留数字签名。

检查安全电子邮件的签名

以下功能可用于检查 MapiMessage 对象的签名。

下面的代码示例展示了如何在项目中实现这些功能:

var msg = MapiMessage.Load(fileName, new EmlLoadOptions());
var result = new SecureEmailManager().CheckSignature(msg);

var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var eml = MapiMessage.Load(fileName);
var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

var result = new SecureEmailManager().CheckSignature(eml, cert, store);

从 MapiMessage 中移除签名

为了更好的兼容性, MapiMessage.RemoveSignature 方法和 MapiMessage.IsSigned 属性用于从消息中移除数字签名。

以下代码片段展示了如何在项目中实现这些功能:

var msg = MapiMessage.Load(fileName);

if (msg.IsSigned)
{
    var unsignedMsg = msg.RemoveSignature();
}

使用证书解密 MapiMessage

如果您拥有加密的 MAPI 消息且需要使用存储在证书中的私钥进行解密,Aspose.Email 的以下功能可能会有帮助:

以下代码片段展示了如何处理加密的 MAPI 消息:

var privateCert = new X509Certificate2(privateCertFile, "password");
var msg = MapiMessage.Load("encrypted.msg");

if (msg.IsEncrypted);
{
    var decryptedMsg = msg.Decrypt(privateCert);
}

为 MSG 文件设置颜色类别

颜色类别用于标记电子邮件的某种重要性或类别。Microsoft Outlook 允许用户分配颜色类别以区分邮件。要处理颜色类别,请使用 FollowUpManager。它包含以下函数: AddCategory, RemoveCategory, ClearCategories 和 GetCategories.

以下示例执行了如下任务:

  1. 添加颜色类别。
  2. 添加另一个颜色类别。
  3. 检索所有类别的列表。
  4. 移除所有类别。

访问 MSG 文件中的后续信息

Aspose.Email API 提供了从已发送或已接收的邮件中获取后续信息的功能。它可以从邮件文件中检索已阅读、投递阅读回执和投票结果信息。

检索已读和送达回执信息

以下代码片段展示了如何检索已阅读和投递回执信息。

创建转发和回复消息

Aspose.Email API 提供创建和格式化转发及回复消息的功能。 ReplyMessageBuilderForwardMessageBuilder API 的类分别用于创建回复和转发消息。回复或转发消息可以使用以下任意模式创建: OriginalMessageAdditionMode 枚举。此枚举具有以下值:

  • OriginalMessageAdditionMode.None - 原始消息不包含在回复消息中。
  • OriginalMessageAdditionMode.Attachment - 原始消息作为附件包含在回复消息中
  • OriginalMessageAdditionMode.Textpart - 原始消息以文本形式包含在回复消息的正文中

创建回复消息

以下代码片段展示了如何创建回复消息。

创建转发消息

以下代码片段展示了如何创建转发消息。