Programação com Thunderbird

Lendo arquivos MBOX

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 através de formatos de arquivo proprietários. Aspose.Email pode trabalhar com estruturas de armazenamento de e-mail do Thunderbird. A classe MboxrdStorageReader permite que os desenvolvedores leiam mensagens do arquivo de armazenamento de e-mail 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 no FileStream.
  2. Crie uma instância da classe MboxrdStorageReader e passe o stream acima para o 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 seguinte trecho de código mostra como ler todas as mensagens de um armazenamento de e-mail do Thunderbird.

// O caminho para o diretório de arquivos.
var dataDir = RunExamples.GetDataDir_Thunderbird();

// Abra o arquivo de armazenamento com FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Read);
// Crie uma instância da classe MboxrdStorageReader e passe o stream
var reader = new MboxrdStorageReader(stream, false);
// Comece a ler mensagens
var message = reader.ReadNextMessage();

// Leia todas as mensagens em um loop
while (message != null)
{
    // Manipule a mensagem - mostre o conteúdo
    Console.WriteLine("Assunto: " + message.Subject);
    // Salve esta mensagem no formato EML ou MSG
    message.Save(message.Subject + ".eml", SaveOptions.DefaultEml);
    message.Save(message.Subject + ".msg", SaveOptions.DefaultMsgUnicode);

    // Obtenha a próxima mensagem
    message = reader.ReadNextMessage();
}

// Feche os streams
reader.Dispose();
stream.Close();

Recuperando propriedades da mensagem

A classe MboxMessageInfo contém as seguintes propriedades para recuperar informações sobre uma mensagem:

  • DateTime Date - Obtém a data da mensagem
  • MailAddress From - Obtém o endereço do remetente
  • string Subject - Obtém o assunto da mensagem
  • MailAddressCollection To - Obtém a coleção de endereços que contém os destinatários da mensagem
  • MailAddressCollection CC - Obtém a coleção de endereços que contém os destinatários em CC
  • MailAddressCollection Bcc - Obtém a coleção de endereços que contém os destinatários em BCC da mensagem

Exemplo de código

MboxStorageReader reader = MboxStorageReader.CreateReader(fileName, new MboxLoadOptions());

foreach (var mboxMessageInfo in reader.EnumerateMessageInfo())
{
    Console.Writeline($"Assunto: {mboxMessageInfo.Subject}");
    Console.Writeline($"Data: {mboxMessageInfo.Date}");
    Console.Writeline($"De: {mboxMessageInfo.From}");
    Console.Writeline($"Para: {mboxMessageInfo.To}");
    Console.Writeline($"CC: {mboxMessageInfo.CC}");
    Console.Writeline($"Bcc: {mboxMessageInfo.Bcc}");
}

Extraindo mensagens do MBOX por Identificadores

A classe MboxStorageReader inclui o método EnumerateMessageInfo(), que permite iterar através de cada mensagem em um arquivo MBOX. Usando este método, é possível extrair mensagens individuais sem a necessidade de percorrer todo o armazenamento repetidamente. Isso melhora o desempenho e reduz o tempo de processamento.

A classe MboxMessageInfo fornece a propriedade EntryId que fornece acesso a identificadores únicos para cada mensagem no arquivo MBOX. Este identificador pode ser armazenado em um banco de dados ou usado como referência para encontrar e extrair mensagens específicas rapidamente quando necessário.

O método ExtractMessage(string id) na classe MboxStorageReader permite que os desenvolvedores extraiam mensagens com base em seu EntryId único. Com o método ExtractMessage(string id), você pode aproveitar o EntryId armazenado para recuperar a mensagem correspondente e realizar operações adicionais com ela.

O seguinte exemplo de código demonstra como extrair mensagens de um arquivo MBOX usando identificadores:

MboxStorageReader reader = MboxStorageReader.CreateReader("my.mbox", new MboxLoadOptions());

foreach (MboxMessageInfo msgInfo in reader.EnumerateMessageInfo())
{
    MailMessage eml = reader.ExtractMessage(msgInfo.EntryId, new EmlLoadOptions());
}

Configurando as opções de carregamento ao ler mensagens do MBOX

Os seguintes recursos permitirão que você especifique várias opções relacionadas ao carregamento e processamento de mensagens:

  • Propriedade MailStorageConverter.MboxMessageOptions - Obtém ou define opções de carregamento de e-mail ao analisar um armazenamento Mbox.

  • Método MboxrdStorageReader.ReadNextMessage(EmlLoadOptions options) - O parâmetro EmlLoadOptions especifica opções ao ler a mensagem do armazenamento Mbox.

Exemplo de código

var reader = new MboxrdStorageReader(fileName, new MboxLoadOptions());
// Leia mensagens preservando anexos tnef.
var eml = reader.ReadNextMessage(new EmlLoadOptions {PreserveTnefAttachments = true});
MailStorageConverter.MboxMessageOptions(new EmlLoadOptions {PreserveTnefAttachments = true});
// Converta mensagens de mbox para pst preservando anexos tnef.
var pst = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");

Definindo a Codificação de Texto Preferida ao Carregar Arquivos Mbox para Leitura

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

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

Obtendo o Número Total de Mensagens do Arquivo MBox

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

// O caminho para o diretório de arquivos.
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("Número total de mensagens no arquivo Mbox: " + reader.GetTotalItemsCount());
}

Obter o Tamanho Atual da Mensagem

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

Convertendo MBOX para PST Preservando ou Removendo uma Assinatura

Para remover a assinatura de um arquivo durante o processo de conversão, defina a propriedade MboxToPstConversionOptions.RemoveSignature como true.

O seguinte exemplo de código mostra como utilizar essa propriedade:

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,
    "Caixa de Entrada",
new MboxToPstConversionOptions() { RemoveSignature = true });

Escrevendo arquivos MBOX

A classe MboxrdStorageWriter fornece a capacidade de escrever novas mensagens no arquivo de armazenamento de e-mail do Thunderbird. Para escrever mensagens:

  1. Abra o arquivo de armazenamento do Thunderbird no FileStream.
  2. Crie uma instância da classe MboxrdStorageWriter e passe o stream acima para o construtor.
  3. Prepare uma nova mensagem usando a classe MailMessage.
  4. Chame o método WriteMessage() e passe a instância MailMessage acima para adicionar a mensagem ao armazenamento do Thunderbird.
  5. Feche todos os streams.

O seguinte trecho de código mostra como escrever mensagens no armazenamento de e-mail do Thunderbird.

// Abra o arquivo de armazenamento com FileStream
var stream = new FileStream(dataDir + "ExampleMbox.mbox", FileMode.Open, FileAccess.Write);

// Inicialize MboxStorageWriter e passe o stream acima para ele
var writer = new MboxrdStorageWriter(stream, false);
// Prepare uma nova mensagem usando a classe MailMessage
var message = new MailMessage("from@domain.com", "to@domain.com", Guid.NewGuid().ToString(), "adicionado de Aspose.Email");
message.IsDraft = false;
// Adicione esta mensagem ao armazenamento
writer.WriteMessage(message);
// Feche todos os streams relacionados
writer.Dispose();
stream.Close();