Программирование с Thunderbird

Чтение файлов MBOX

Мозилла Тандерберд это кроссплатформенный почтовый клиент с открытым исходным кодом, разработанный Mozilla Foundation. Он хранит электронные письма в собственной файловой структуре, управляя индексами сообщений и подпапками с помощью собственных форматов файлов. Aspose.Email может работать со структурами хранения почты Thunderbird. MboxrdStorageReader класс позволяет разработчикам читать сообщения из файла почтового хранилища Мозилла Тандерберд. В этой статье показано, как читать сообщения из хранилища электронной почты Thunderbird:

  1. Откройте файл хранилища Thunderbird в FileStream.
  2. Создайте экземпляр MboxrdStorageReader класс и передайте указанный выше поток конструктору.
  3. Call ReadNextMessage() чтобы получить первое сообщение.
  4. Используйте то же самое ReadNextMessage() через некоторое время, чтобы прочитать все сообщения.
  5. Закройте все ручьи.

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

Получение свойств сообщения

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

Извлечение сообщений из MBOX по идентификаторам

The MboxStorageReader класс включает EnumerateMessageInfo() метод, позволяющий перебирать каждое сообщение в файле MBOX. Используя этот метод, можно извлекать отдельные сообщения без необходимости многократного перемещения по всему хранилищу. Это повышает производительность и сокращает время обработки.

The MboxMessageInfo класс предоставляет EntryId свойство, обеспечивающее доступ к уникальным идентификаторам для каждого сообщения в файле MBOX. Этот идентификатор можно сохранить в базе данных или использовать в качестве справочника для быстрого поиска и извлечения определенных сообщений при необходимости.

The Извлечь сообщение (строковый идентификатор) метод в MboxStorageReader класс позволяет разработчикам извлекать сообщения на основе их уникального EntryID. С помощью Извлечь сообщение (строковый идентификатор) Метод, вы можете использовать сохраненный 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

Следующие функции позволят вам указать различные параметры, связанные с загрузкой и обработкой сообщений:

  • Свойство MailStorageConverter.mboxMessageOptions — определяет или задает параметры загрузки электронной почты при анализе хранилища Mbox.

  • Метод MboxRDStorageReader.ReadNextMessage (параметры EMLLoadOptions) — параметр 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");

Настройка предпочтительной кодировки текста при загрузке файлов 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();
    }
}

Преобразование MBOX в PST Сохранение или удаление подписи

Чтобы удалить подпись из файла в процессе преобразования, установите MboxToPstConversionOptions.RemoveSignature недвижимость для true.

В следующем примере кода показано, как использовать это свойство:

var pstDataStream = new MemoryStream();
var personalStorage = PersonalStorage.Create(pstDataStream, FileFormatVersion.Unicode);
MailStorageConverter.MboxToPst(new MboxrdStorageReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), new MboxLoadOptions()),
personalStorage,
    "Inbox",
new MboxToPstConversionOptions() { RemoveSignature = true });

Запись файлов MBOX

The MboxrdStorageWriter класс предоставляет возможность записывать новые сообщения в файл почтового хранилища Thunderbird. Чтобы писать сообщения, выполните следующие действия:

  1. Откройте файл хранилища Thunderbird в FileStream.
  2. Создайте экземпляр MboxrdStorageWriter класс и передайте указанный выше поток конструктору.
  3. Подготовьте новое сообщение, используя MailMessage class.
  4. Позвоните WriteMessage() метод и передайте вышеуказанное MailMessage экземпляр для добавления сообщения в хранилище Thunderbird.
  5. Закройте все трансляции.

В следующем фрагменте кода показано, как писать сообщения в почтовое хранилище Thunderbird.

// Open the storage file with FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);

// Initialize MboxStorageWriter and pass the above stream to it
var writer = new MboxrdStorageWriter(stream, false);
// Подготовьте новое сообщение, используя MailMessage class
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "added from Aspose.Email");
message.IsDraft = false;
// Add this message to storage
writer.WriteMessage(message);
// Close all related streams
writer.Dispose();
stream.Close();