Четене на MBOX файлове
Възможности за четене с Aspose.Email
Mozilla Thunderbird е отворен код, крос‑платформен имейл клиент, разработен от Mozilla Foundation. Той съхранява имейлите в собствена файлова структура, управлявайки индекси на съобщенията и подпапките чрез патентовани файлови формати. Thunderbird създава един .mbox файл за всяка имейл папка (например Inbox, Sent, Trash) и съхранява тези файлове в директорията на потребителския профил. Всеки файл съдържа всички съобщения от съответната папка в конкатенирана форма.
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 метод. Тази функция е особено полезна в приложения, които работят с големи имейл архиви или изпълняват I/O‑спрямо операции в фонови нишки или уеб услуги. Следният примерен код демонстрира как да четете имейл съобщения от 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 файлове
Този 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();
}
}