管理 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 方法。
为消息转换和加载设置超时
以下功能让您可以为转换和加载过程设置毫秒级超时:
-
MailConversionOptions.Timeout 属性 - 限制在转换消息时的毫秒数。
-
MailConversionOptions.TimeoutReached - 在转换为 MailMessage 时,如果超时则抛出。
-
MsgLoadOptions.Timeout - 在转换消息时限制毫秒数的时间。
-
MsgLoadOptions.TimeoutReached - 在转换为 MailMessage 时,如果超时则抛出。
下面的代码示例将展示如何在转换消息时设置超时:
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 有两种方式:
-
使用 MsgLoadOptions.PreserveRtfContent 属性的 MsgLoadOptions class;
-
使用 MailConversionOptions.PreserveRtfContent 属性的 MailConversionOptions class;
这两个属性用于获取或设置是否在 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 进行进一步的更新/验证。
在下面的代码示例中,我们:
- 使用以下方式加载模板 MailMessage 类。
- 更新部分属性。
- 以 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 对象的签名。
- SecureEmailManager 用于检查安全电子邮件签名的类。
- SmimeResult 用于存储检查结果的类。
- SecureEmailManager.CheckSignature(MapiMessage msg) 方法。
- SecureEmailManager.CheckSignature(MapiMessage msg, X509Certificate2 certificateForDecrypt) 方法。
- SecureEmailManager.CheckSignature(MapiMessage msg, X509Certificate2 certificateForDecrypt, X509Store store) 方法。
下面的代码示例展示了如何在项目中实现这些功能:
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 的以下功能可能会有帮助:
- MapiMessage.IsEncrypted - 获取一个值,指示消息是否已加密。
- MapiMessage.Decrypt() - 解密此消息(方法会在当前用户和计算机的 My 存储区搜索适当的证书和私钥)。
- MapiMessage.Decrypt(X509Certificate2 certificate) - 使用证书解密此消息。
以下代码片段展示了如何处理加密的 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.
- AddCategory 接受 MapiMessage 以及颜色类别字符串,例如 “Purple Category” 或 “Red Category”,作为参数。
- RemoveCategory 接受 MapiMessage 以及要从邮件中移除的颜色类别字符串。
- ClearCategories 用于从邮件中移除所有颜色类别。
- GetCategories 用于检索特定邮件中的所有颜色类别。
以下示例执行了如下任务:
- 添加颜色类别。
- 添加另一个颜色类别。
- 检索所有类别的列表。
- 移除所有类别。
访问 MSG 文件中的后续信息
Aspose.Email API 提供了从已发送或已接收的邮件中获取后续信息的功能。它可以从邮件文件中检索已阅读、投递阅读回执和投票结果信息。
检索已读和送达回执信息
以下代码片段展示了如何检索已阅读和投递回执信息。
创建转发和回复消息
Aspose.Email API 提供创建和格式化转发及回复消息的功能。 ReplyMessageBuilder 和 ForwardMessageBuilder API 的类分别用于创建回复和转发消息。回复或转发消息可以使用以下任意模式创建: OriginalMessageAdditionMode 枚举。此枚举具有以下值:
- OriginalMessageAdditionMode.None - 原始消息不包含在回复消息中。
- OriginalMessageAdditionMode.Attachment - 原始消息作为附件包含在回复消息中
- OriginalMessageAdditionMode.Textpart - 原始消息以文本形式包含在回复消息的正文中
创建回复消息
以下代码片段展示了如何创建回复消息。
创建转发消息
以下代码片段展示了如何创建转发消息。