Lendo Arquivos MBOX

Recursos de Leitura do Aspose.Email

Mozilla Thunderbird é um cliente de e‑mail de código aberto e multiplataforma, desenvolvido pela Mozilla Foundation. Ele armazena e‑mails em sua própria estrutura de arquivos, gerenciando índices de mensagens e subpastas por meio de formatos de arquivo proprietários. O Thunderbird cria um arquivo .mbox para cada pasta de e‑mail (por exemplo, Caixa de Entrada, Enviados, Lixeira) e armazena esses arquivos no diretório de perfil do usuário. Cada arquivo contém todas as mensagens daquela pasta em forma concatenada.

Aspose.Email para .NET fornece APIs para ler mensagens de arquivos .mbox do Thunderbird usando o MboxrdStorageReader classe que permite aos desenvolvedores:

  • Abrir e ler mensagens sequencialmente, uma a uma
  • Recuperar metadados como Assunto, De, Para, Data, etc., sem carregar o conteúdo completo
  • Extrair mensagens individuais usando identificadores exclusivos (EntryId)
  • Preservar codificação, anexos TNEF e formatação
  • Ler arquivos de forma assíncrona para melhor desempenho em arquivos grandes

Ler Arquivos MBOX Síncronamente

ler mensagens do arquivo de armazenamento de correio do Mozilla Thunderbird. Este artigo mostra como ler as mensagens do armazenamento de e‑mail do Thunderbird:

  1. Abra o arquivo de armazenamento do Thunderbird em FileStream.
  2. Crie uma instância do MboxrdStorageReader classe e passe o stream acima ao construtor.
  3. Chame ReadNextMessage() para obter a primeira mensagem.
  4. Use o mesmo ReadNextMessage() em um loop while para ler todas as mensagens.
  5. Feche todos os streams.

O trecho de código a seguir mostra como ler todas as mensagens de um armazenamento de email do 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();

Ler Arquivos MBOX Assincronamente

Para melhorar o desempenho e a capacidade de resposta ao processar arquivos MBOX grandes, o Aspose.Email para .NET oferece leitura assíncrona de MBOX através do CreateReaderAsync método. Esse recurso é especialmente útil em aplicativos que lidam com grandes arquivos de e‑mail ou executam operações de I/O em threads de segundo plano ou serviços web. O exemplo de código a seguir demonstra como ler mensagens de e‑mail de um arquivo MBOX de forma assíncrona usando um leitor de armazenamento 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}");
        }
    }

Ler Mensagens de E‑mail em Lotes com Suporte a Paginação

Obtenha acesso paginado às mensagens armazenadas em arquivos de caixa de correio. Esse recurso permite que os desenvolvedores processem grandes arquivos de e‑mail de forma mais eficiente, recuperando mensagens em porções menores – melhorando o desempenho e reduzindo a carga de memória. Use os seguintes métodos do MboxStorageReader classe:

O exemplo de código abaixo demonstra como ler um intervalo específico de mensagens de um arquivo de correio definindo um índice inicial e o tamanho do lote. No exemplo, o método recupera 10 mensagens a partir do índice 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);
}

Definir Codificação de Texto Preferida ao Carregar Arquivos MBOX para Leitura

Opção de codificação está disponível para MboxrdStorageReader classe. Isso fornece opções adicionais para carregar o arquivo mbox e garante que mensagens com conteúdo codificado sejam lidas e processadas corretamente. O trecho de código a seguir mostra como você pode definir a codificação de texto que atenda às suas necessidades:

var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();

Obter Número Total de Mensagens de Arquivos MBOX

O MboxrdStorageReader classe fornece a capacidade de ler o número de itens disponíveis em um arquivo MBox. Isso pode ser usado para desenvolver aplicativos que exibam o progresso da atividade ao processar tal arquivo.

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

Obter Tamanho da Mensagem Atual

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