过滤和提取 MBOX 消息

邮件过滤的作用

在处理大型 MBOX 归档时,将每封邮件加载到内存中可能低效且没有必要。在大多数情况下,开发者只需扫描诸如主题、发件人、收件人或时间戳等基本元数据,以:

  • 在 UI 中显示邮件列表
  • 提取前应用自定义过滤器
  • 生成报告或摘要
  • 为搜索对邮件建立索引

过滤避免了解析完整邮件正文或附件的开销,使应用程序更快且更具可扩展性。

访问邮件元数据

Aspose.Email 提供了 MboxMessageInfo 类,旨在在不读取完整 MailMessage 内容的情况下访问基本的邮件元数据。它作为摘要对象,在调用时返回 MboxStorageReader.EnumerateMessageInfo().

以下是由 MboxMessageInfo 要检索关于邮件的信息,包括:

  • DateTime Date - 获取邮件日期
  • MailAddress From - 获取发件人地址
  • string Subject - 获取邮件主题
  • MailAddressCollection To - 获取包含邮件收件人的地址集合
  • MailAddressCollection CC - 获取包含 CC 收件人的地址集合
  • MailAddressCollection Bcc - 获取包含邮件 BCC 收件人的地址集合
MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());

foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
    Console.Writeline($"Subject: {mboxMessageInfo.Subject}");
    Console.Writeline($"Date: {mboxMessageInfo.Date}");
    Console.Writeline($"From: {mboxMessageInfo.From}");
    Console.Writeline($"To: {mboxMessageInfo.To}");
    Console.Writeline($"CC: {mboxMessageInfo.CC}");
    Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}

按 EntryId 提取邮件

MboxStorageReader 类包含了 EnumerateMessageInfo() 方法,使您能够遍历 MBOX 文件中的每条消息。使用此方法可以在不重复遍历整个存储的情况下提取单个消息,从而提升性能并减少处理时间。

MboxMessageInfo class 提供了 EntryId 属性,提供对 MBOX 文件中每条消息唯一标识符的访问。该标识符可以存储在数据库中,或用作快速查找并提取特定消息的引用。

ExtractMessage(string id) 方法位于 MboxStorageReader 类使开发者能够基于唯一的 EntryId 提取消息。使用 ExtractMessage(string id) 方法,您可以利用存储的 EntryId 检索相应的消息并对其执行其他操作。

以下代码示例演示了如何使用标识符从 MBOX 文件中提取消息:

MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());

foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
    MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}

使用 MailQuery 过滤和搜索 MBOX 邮件

Aspose.Email for .NET 提供基于自定义查询过滤或搜索邮箱归档中邮件的能力。这使开发者能够仅检索符合特定条件的邮件,从而在处理大型邮件归档文件时提升性能和可用性。

以下代码示例演示如何使用 MailQuery API 为邮件存储文件应用搜索条件。在本例中,若邮件主题包含 “Project Update” 且发送日期早于今天,则会被选中。

using Aspose.Email.Storage.Mbox;
using Aspose.Email;

var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
var mqb = new MailQueryBuilder();
mqb.Subject.Contains("Project Update");
mqb.SentDate.Before(DateTime.Today);

foreach (var message in reader.EnumerateMessages(mqb.GetQuery()))
{
    Console.WriteLine("Subject: " + message.Subject);
}

读取 MBOX 消息时配置加载选项

以下功能允许您指定与加载和处理消息相关的各种选项:

  • MailStorageConverter.MboxMessageOptions 属性 - 获取或设置解析 Mbox 存储时的电子邮件加载选项。

  • MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) 方法 - EmlLoadOptions 参数指定读取 Mbox 存储中消息时的选项。

var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Read messages preserving tnef attachments.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Convert messages from mbox to pst preserving tnef attachments.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");