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:
- Abre el archivo de almacenamiento de Thunderbird en FileStream.
- Crea una instancia del MboxrdStorageReader clase y pasa la secuencia anterior al constructor.
- Call ReadNextMessage() para recibir el primer mensaje.
- Usa lo mismo ReadNextMessage() en un bucle de tiempo para leer todos los mensajes.
- 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:
- Abre el archivo de almacenamiento de Thunderbird en FileStream.
- Crea una instancia del MboxrdStorageWriter clase y pasa la secuencia anterior al constructor.
- Prepare un mensaje nuevo mediante el MailMessage class.
- Llame al WriteMessage() método y pase lo anterior MailMessage instancia para añadir el mensaje al almacenamiento de Thunderbird.
- 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();