Lectura de archivos MBOX
Capacidades de lectura de Aspose.Email
Mozilla Thunderbird es un cliente de correo electrónico de código abierto y multiplataforma, desarrollado por la Fundación Mozilla. Almacena los correos en su propia estructura de archivos, gestionando índices de mensajes y subcarpetas mediante formatos de archivo propietarios. Thunderbird crea un archivo .mbox por cada carpeta de correo (p. ej., Bandeja de entrada, Enviados, Papelera) y guarda estos archivos en el directorio de perfil del usuario. Cada archivo contiene todos los mensajes de esa carpeta de forma concatenada.
Aspose.Email para .NET proporciona API para leer mensajes de archivos .mbox de Thunderbird usando el MboxrdStorageReader clase que permite a los desarrolladores:
- Abrir y leer mensajes secuencialmente, uno a uno
- Recuperar metadatos como Asunto, De, Para, Fecha, etc., sin cargar el contenido completo
- Extraer mensajes individuales usando identificadores únicos (EntryId)
- Preservar la codificación, los adjuntos TNEF y el formato
- Leer archivos de forma asíncrona para un mejor rendimiento en archivos grandes
Leer archivos MBOX de forma sincrónica
leer mensajes del archivo de almacenamiento de correo de Mozilla Thunderbird. Este artículo muestra cómo leer los mensajes del almacenamiento de correo de Thunderbird:
- Abra el archivo de almacenamiento de Thunderbird en FileStream.
- Cree una instancia de la MboxrdStorageReader clase y pase el flujo anterior al constructor.
- Llame a ReadNextMessage() para obtener el primer mensaje.
- Use el mismo ReadNextMessage() en un bucle while para leer todos los mensajes.
- Cerrar todos los flujos.
El siguiente fragmento de código le 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);
// 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();
Leer archivos MBOX de forma asíncrona
Para mejorar el rendimiento y la capacidad de respuesta al procesar archivos MBOX grandes, Aspose.Email para .NET ofrece lectura asíncrona de MBOX a través del CreateReaderAsync método. Esta característica es especialmente útil en aplicaciones que manejan grandes archivos de correo o ejecutan operaciones I/O en hilos en segundo plano o servicios web. El siguiente ejemplo de código muestra cómo leer mensajes de correo electrónico de un archivo MBOX de forma asíncrona usando un lector de almacenamiento 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}");
}
}
Leer mensajes de correo electrónico en lotes con soporte de paginación
Obtén acceso paginado a los mensajes almacenados en archivos de buzón. Esta característica permite a los desarrolladores procesar grandes archivos de correo de manera más eficiente al recuperar mensajes en porciones más pequeñas, mejorando el rendimiento y reduciendo la carga de memoria. Usa los siguientes métodos del MboxStorageReader clase:
-
EnumerateMessages(int startIndex, int count) - Devuelve una colección enumerable de instancias MailMessage, comenzando desde el índice especificado y limitado al recuento indicado.
-
EnumerateMessageInfo(int startIndex, int count) - Devuelve una colección enumerable de objetos MboxMessageInfo solo con metadatos, también paginada por índice y recuento.
El siguiente ejemplo de código muestra cómo leer un rango específico de mensajes de un archivo de correo definiendo un índice inicial y un tamaño de lote. En el ejemplo, el método recupera 10 mensajes a partir del í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);
}
Establecer la codificación de texto preferida al cargar archivos MBOX para lectura
La opción de codificación está disponible para MboxrdStorageReader clase. Esto proporciona opciones adicionales para cargar el archivo mbox y asegura que los mensajes con contenido codificado se lean y procesen correctamente. El siguiente fragmento de código muestra cómo puedes establecer la codificación de texto que satisfaga tus necesidades:
var reader = new MboxrdStorageReader("sample.mbox", new MboxLoadOptions() { PreferredTextEncoding = Encoding.UTF8});
var message = reader.ReadNextMessage();
Obtener el número total de mensajes de archivos MBOX
El MboxrdStorageReader Clase que proporciona la capacidad de leer el número de elementos disponibles en un archivo MBox. Esto puede usarse 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 del mensaje actual
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();
}
}