Programación con Thunderbird

Lectura de archivos MBOX

Mozilla Thunderbird es un cliente de correo electrónico multiplataforma de código abierto, desarrollado por la Fundación Mozilla. Almacena los correos electrónicos en su propia estructura de archivos, administrando los índices y subcarpetas de los mensajes a través de formatos de archivo patentados. Aspose.Email puede funcionar con las estructuras de almacenamiento de correo de Thunderbird. El MboxrdStorageReader La clase permite a los desarrolladores leer los mensajes del archivo de almacenamiento de correo Mozilla Thunderbird. Este artículo muestra cómo leer los mensajes del almacenamiento de correo electrónico de Thunderbird:

  1. Abre el archivo de almacenamiento de Thunderbird en FileStream.
  2. Crea una instancia del MboxrdStorageReader clase y pasa la secuencia anterior al constructor.
  3. Call ReadNextMessage() para recibir el primer mensaje.
  4. Usa lo mismo ReadNextMessage() en un bucle de tiempo para leer todos los mensajes.
  5. Cierra todos los canales.

El siguiente fragmento de código muestra cómo leer todos los mensajes de un almacenamiento de correo de 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);
// Crea una instancia del 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();

Recuperar las propiedades del mensaje

MboxMessageInfo La clase contiene las siguientes propiedades para recuperar información sobre un mensaje:

  • DateTime Date - Obtiene la fecha del mensaje
  • MailAddress From - Obtiene la dirección de origen
  • string Subject - Obtiene el asunto del mensaje
  • MailAddressCollection To - Obtiene la colección de direcciones que contiene los destinatarios del mensaje
  • MailAddressCollection CC - Obtiene la colección de direcciones que contiene los destinatarios del CC
  • MailAddressCollection Bcc - Obtiene la colección de direcciones que contiene los destinatarios BCC del mensaje

Ejemplo de código

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

Extraer mensajes de MBOX mediante identificadores

The MboxStorageReader la clase incluye el EnumerateMessageInfo() método, que le permite recorrer en iteración cada mensaje de un archivo MBOX. Al utilizar este método, es posible extraer mensajes individuales sin necesidad de recorrer todo el almacenamiento de forma repetida. Esto mejora el rendimiento y reduce el tiempo de procesamiento.

The MboxMessageInfo la clase proporciona la EntryId propiedad, que proporciona acceso a identificadores únicos para cada mensaje del archivo MBOX. Este identificador puede almacenarse en una base de datos o usarse como referencia para buscar y extraer rápidamente mensajes específicos cuando sea necesario.

The ExtractMessage (identificador de cadena) método en el MboxStorageReader La clase permite a los desarrolladores extraer mensajes en función de su EntryID único. Con el ExtractMessage (identificador de cadena) método, puede aprovechar el EntryID almacenado para recuperar el mensaje correspondiente y realizar operaciones adicionales con él.

El siguiente ejemplo de código muestra cómo extraer mensajes de un archivo MBOX mediante identificadores:

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

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

Configuración de las opciones de carga al leer mensajes de MBOX

Las siguientes funciones le permitirán especificar varias opciones relacionadas con la carga y el procesamiento de mensajes:

  • Propiedad MailStorageConverter.mboxMessageOptions: obtiene o establece las opciones de carga de correo electrónico al analizar un almacenamiento de Mbox.

  • Método mboxRDStorageReader.readNextMessage (opciones de emllOdOptions): el parámetro emllOdOptions especifica las opciones al leer un mensaje del almacenamiento de Mbox.

Ejemplo de código

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

Configuración de la codificación de texto preferida al cargar archivos Mbox para su lectura

La opción de codificación está disponible para la clase mboxRDStorageReader. Esto proporciona opciones adicionales para cargar el archivo mbox y garantiza que los mensajes con el contenido codificado se lean y procesen correctamente. El siguiente fragmento de código muestra cómo puede configurar la codificación del texto para que satisfaga sus necesidades:

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

Obtener el número total de mensajes del archivo MBox

The MboxrdStorageReader La clase proporciona la capacidad de leer la cantidad de elementos disponibles en un archivo MBox. Esto se puede usar para desarrollar aplicaciones que muestren el progreso de la actividad mientras se procesa dicho archivo.

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

Obtener el tamaño actual del mensaje

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

Conversión de MBOX a PST Conservar o eliminar una firma

Para eliminar la firma de un archivo durante el proceso de conversión, defina MboxToPstConversionOptions.RemoveSignature propiedad a true.

El siguiente ejemplo de código muestra cómo utilizar esta propiedad:

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

Escritura de archivos MBOX

The MboxrdStorageWriter La clase proporciona la posibilidad de escribir nuevos mensajes en el archivo de almacenamiento de correo de Thunderbird. Para escribir mensajes:

  1. Abre el archivo de almacenamiento de Thunderbird en FileStream.
  2. Crea una instancia del MboxrdStorageWriter clase y pasa la secuencia anterior al constructor.
  3. Prepare un mensaje nuevo mediante el MailMessage class.
  4. Llame al WriteMessage() método y pase lo anterior MailMessage instancia para añadir el mensaje al almacenamiento de Thunderbird.
  5. Cierra todas las transmisiones.

El siguiente fragmento de código muestra cómo escribir mensajes en el almacenamiento de correo de 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);
// Prepare un mensaje nuevo mediante el 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();