Фильтрация и извлечение сообщений 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");