Читання файлів MBOX
Можливості читання Aspose.Email
Mozilla Thunderbird це відкритий, крос‑платформений клієнт електронної пошти, розроблений Mozilla Foundation. Він зберігає листи у власній файловій структурі, керуючи індексами повідомлень та підпапками за допомогою пропрієтарних форматів файлів. Thunderbird створює один .mbox файл для кожної папки електронної пошти (наприклад, Вхідні, Надіслані, Видалені) і зберігає ці файли в каталозі профілю користувача. Кожен файл містить усі повідомлення з цієї папки у злитій формі.
Aspose.Email для .NET надає API для читання повідомлень з .mbox файлів Thunderbird, використовуючи MboxrdStorageReader клас, який дозволяє розробникам:
- Відкривати та читати повідомлення послідовно, по одному
- Отримати метадані, такі як Тема, Від, Кому, Дата тощо, без завантаження повного вмісту
- Витягнути окремі повідомлення, використовуючи унікальні ідентифікатори (EntryId)
- Зберігати кодування, вкладення TNEF та форматування
- Читати файли асинхронно для кращої продуктивності на великих архівах
Синхронне читання MBOX файлів
читати повідомлення з файлу сховища пошти Mozilla Thunderbird. У цій статті показано, як читати повідомлення зі сховища електронної пошти Thunderbird:
- Відкрийте файл сховища Thunderbird у FileStream.
- Створіть екземпляр MboxrdStorageReader класу і передайте вищезгаданий потік у конструктор.
- Викличте ReadNextMessage() щоб отримати перше повідомлення.
- Використайте той самий ReadNextMessage() у циклі while, щоб прочитати всі повідомлення.
- Закрийте всі потоки.
Наведений фрагмент коду показує, як прочитати всі повідомлення зі сховища пошти Thunderbird.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Create an instance of the MboxrdStorageReader class and pass the stream
var reader = new MboxrdStorageReader(stream, false);
// Start reading messages
var message = reader.ReadNextMessage();
// Read all messages in a loop
while (message != null)
{
// Manipulate message - show contents
Console.WriteLine("Subject: " + message.Subject);
// Save this message in EML or MSG format
message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);
// Get the next message
message = reader.ReadNextMessage();
}
// Close the streams
reader.Dispose();
stream.Close();
Асинхронне читання MBOX файлів
Щоб підвищити продуктивність та швидкість реакції при обробці великих MBOX файлів, Aspose.Email для .NET забезпечує асинхронне читання MBOX через CreateReaderAsync метод. Ця можливість особливо корисна в застосунках, які обробляють великі архіви електронної пошти або виконують операції, пов’язані з ввід/вивід, у фонових потоках або веб‑службах. Нижчеподаний приклад коду демонструє, як асинхронно читати електронні повідомлення з MBOX файлу за допомогою читача сховища Aspose.Email:
string mboxFilePath = "emails.mbox";
// Create a reader for the MBOX file asynchronously
using (var reader = await MboxrdStorageReader.CreateReaderAsync(mboxFilePath, CancellationToken.None))
{
Console.WriteLine("MBOX reader initialized.");
// Read messages from the MBOX file
while (reader.ReadNextMessage() is var message && message != null)
{
Console.WriteLine($"Subject: {message.Subject}");
}
}
Читати електронні повідомлення пакетами з підтримкою пагінації
Отримайте посторінковий доступ до повідомлень, збережених у файлах поштових скриньок. Ця можливість дозволяє розробникам ефективніше обробляти великі архіви електронної пошти, отримуючи повідомлення меншими порціями — покращуючи продуктивність та зменшуючи навантаження на пам’ять. Використовуйте наступні методи MboxStorageReader клас:
-
EnumerateMessages(int startIndex, int count) - Повертає перелічувану колекцію екземплярів MailMessage, починаючи з вказаного індексу та обмежену заданою кількістю.
-
EnumerateMessageInfo(int startIndex, int count) - Повертає перелічувану колекцію об’єктів MboxMessageInfo лише з метаданими, також посторінково за індексом та кількістю.
Нижченаведений приклад коду демонструє, як читати певний діапазон повідомлень із поштового архіву, визначивши початковий індекс і розмір пакету. У прикладі метод отримує 10 повідомлень, починаючи з індексу 0.
using Aspose.Email.Storage.Mbox;
using Aspose.Email;
var reader = MboxStorageReader.CreateReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
foreach (var message in reader.EnumerateMessages(startIndex, count))
{
Console.WriteLine("Subject: " + message.Subject);
}
Встановити бажане кодування тексту при завантаженні MBOX файлів для читання
Опція кодування доступна для MboxrdStorageReader клас. Це забезпечує додаткові параметри завантаження файлу mbox і гарантує, що повідомлення з закодованим вмістом будуть правильно прочитані та оброблені. Наведений нижче фрагмент коду показує, як можна встановити кодування тексту, що відповідає вашим потребам:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Отримати загальну кількість повідомлень у файлах MBOX
The MboxrdStorageReader клас забезпечує можливість читати кількість елементів, доступних у файлі MBox. Це можна використати для розробки застосунків, які показують прогрес дії під час обробки такого файлу.
// The path to the File directory.
var dataDir = RunExamples.GetDataDir_Thunderbird();
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
Console.WriteLine("Total number of messages in Mbox file: " + reader.GetTotalItemsCount());
}
Отримати поточний розмір повідомлення
using (var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read))
using (var reader = new MboxrdStorageReader(stream, false))
{
MailMessage msg;
while ((msg = reader.ReadNextMessage()) != null)
{
long currentDataSize = reader.CurrentDataSize;
msg.Dispose();
}
}