Фильтрация и извлечение сообщений MBOX

Роль фильтрации сообщений

При работе с большими архивами MBOX загрузка каждого сообщения в память может быть неэффективной и ненужной. В большинстве сценариев разработчикам достаточно просканировать базовые метаданные, такие как тема, отправитель, получатель или метка времени, чтобы:

  • Отображение списка сообщений в пользовательском интерфейсе
  • Применение пользовательских фильтров перед извлечением
  • Создание отчётов или резюме
  • Индексация сообщений для поиска

Фильтрация избавляет от затрат на разбор полного тела сообщения или вложений, делая приложения быстрее и более масштабируемыми.

Доступ к метаданным сообщения

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());
}

Фильтрация и поиск писем MBOX с использованием MailQuery

Aspose.Email для .NET предоставляет возможность фильтровать или искать сообщения в архивах почтовых ящиков на основе пользовательских запросов. Это позволяет разработчикам получать только те сообщения, которые соответствуют определённым критериям, улучшая производительность и удобство работы с большими файлами архивов электронной почты.

Следующий пример кода демонстрирует, как применить критерии поиска к файлу хранилища почты с помощью API MailQuery. В этом примере сообщения выбираются, если их тема содержит фразу "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");