Programación con Thunderbird
Leer mensajes de MBOX
Mozilla Thunderbird es un cliente de correo de código abierto y multiplataforma, desarrollado por la Mozilla Foundation. Almacena correos en su propia estructura de archivos, gestionando índices de mensajes y subcarpetas mediante formatos de archivo propietarios. Aspose.Email puede trabajar con las estructuras de almacenamiento de correo de Thunderbird. El MboxrdStorageReader Clase que permite a los desarrolladores 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.
//Getting Marker information while reading messages from Mbox storage file
try (FileInputStream stream = new FileInputStream(dataDir + "Outlook.pst")) {
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg;
String[] fromMarker = {null};
while ((msg = reader.readNextMessage(/* out */fromMarker)) != null) {
System.out.println(fromMarker[0]);
}
}
}
Configurar opciones de carga al leer mensajes de MBOX
La API de Aspose.Email permite las siguientes manipulaciones con los mensajes al leerlos de un archivo MBOX:
Convertir mensajes de MBOX a PST preservando los adjuntos TNEF
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailStorageConverter.setMboxMessageOptions(emlLoadOptions);
// Convert messages from mbox to pst preserving tnef attachments.
PersonalStorage storage = MailStorageConverter.mboxToPst("Input.mbox", "Output.pst");
MailStorageConverter.MboxMessageOptions() propiedad - Obtiene o establece opciones de carga de correo electrónico al analizar un almacenamiento Mbox.
Leer mensajes preservando los adjuntos TNEF
MboxrdStorageReader reader = new MboxrdStorageReader("Input.mbox", new MboxLoadOptions());
// Read messages preserving tnef attachments.
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
MailMessage eml = reader.readNextMessage(emlLoadOptions);
MboxrdStorageReader.readNextMessage(EmlLoadOptions options) método - El parámetro EmlLoadOptions especifica opciones al leer un mensaje del almacenamiento Mbox.
Enumerar mensajes preservando los adjuntos TNEF
EmlLoadOptions emlLoadOptions = new EmlLoadOptions();
emlLoadOptions.setPreserveTnefAttachments(true);
// Enumerate messages preserving tnef attachments.
for (MailMessage message : reader.enumerateMessages(emlLoadOptions)) {
// do something
}
MboxrdStorageReader.enumerateMessages(EmlLoadOptions options) método - Especifica EmlLoadOptions al leer un mensaje del almacenamiento Mbox.
Extraer mensajes de MBOX por identificadores
A veces es necesario extraer mensajes seleccionados por identificadores. Por ejemplo, su aplicación almacena identificadores en una base de datos y extrae un mensaje bajo demanda. Esta es la forma eficiente de evitar recorrer todo el almacenamiento cada vez para encontrar un mensaje específico a extraer. Para implementar esta funcionalidad para archivos MBOX, Aspose.Email proporciona los siguientes métodos y clases:
- MboxMessageInfo clase con el EntryId propiedad - Obtiene el identificador de la entrada.
- enumerateMessageInfo() método del MboxStorageReader clase - Expone el enumerador, que permite la iteración de mensajes en el almacenamiento.
- extractMessage(String id) método del MboxStorageReader clase - Obtiene el mensaje de MBOX.
El siguiente ejemplo de código demuestra cómo extraer mensajes de MBOX por identificadores:
MboxStorageReader reader = MboxStorageReader.createReader("my.mbox", new MboxLoadOptions());
for (MboxMessageInfo msgInfo : reader.enumerateMessageInfo()) {
MailMessage eml = reader.extractMessage(msgInfo.getEntryId(), new EmlLoadOptions());
}
Nota: El ID del mensaje es único dentro del archivo de almacenamiento. Los IDs son creados por Aspose.Email y no pueden usarse en otras bibliotecas o aplicaciones de procesamiento MBOX de terceros.
Filtrar y buscar correos electrónicos en archivos MBOX
Aspose.Email para Java brinda la capacidad de filtrar o buscar mensajes dentro de archivos MBOX usando una consulta. Esto permite recuperar solo los mensajes que cumplen criterios específicos. De esta manera, puede mejorar el rendimiento y la usabilidad de una aplicación al trabajar con archivos MBOX grandes.
El siguiente ejemplo de código demuestra cómo implementar esta funcionalidad mediante la realización de los siguientes métodos:
-
enumerateMessages(MailQuery query)- devuelve una colección enumerable de instancias MailMessage que coinciden con la consulta especificada. -
enumerateMessageInfo(MailQuery query)- devuelve una colección enumerable de instancias MboxMessageInfo que coinciden con la consulta especificada.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
MailQueryBuilder mqb = new MailQueryBuilder();
mqb.getSubject().contains("Project Update");
mqb.getSentDate().before(new Date());
for (MailMessage message : reader.enumerateMessages(mqb.getQuery())) {
System.out.println("Subject: " + message.getSubject());
}
Recuperación paginada de mensajes de archivos MBOX
Aspose.Email para Java admite la recuperación paginada de mensajes de archivos MBOX. Esta funcionalidad permite procesar eficientemente archivos MBOX grandes recuperando los mensajes en lotes más pequeños, reduciendo el consumo de memoria y mejorando el rendimiento.
El siguiente ejemplo de código demuestra cómo implementar esta funcionalidad mediante la realización de los siguientes métodos:
-
enumerateMessages(int startIndex, int count)- recupera un número especificado de instancias MailMessage a partir de un índice dado. -
enumerateMessageInfo(int startIndex, int count)- recupera un número especificado de instancias MboxMessageInfo a partir de un índice dado.
MboxStorageReader reader = MboxStorageReader.createReader("input.mbox", new MboxLoadOptions());
int startIndex = 0;
int count = 10; // Retrieve messages in batches of 10
for (MailMessage message : reader.enumerateMessages(startIndex, count)) {
System.out.println("Subject: " + message.getSubject());
}
Escribir mensajes
El MboxrdStorageWriter Clase que brinda la capacidad de escribir nuevos mensajes en el archivo de almacenamiento de correo de Thunderbird. Para escribir mensajes:
- Abra el archivo de almacenamiento de Thunderbird en FileStream.
- Cree una instancia de la MboxrdStorageWriter clase y pase el flujo anterior al constructor.
- Prepare un nuevo mensaje usando el MailMessage clase.
- Llame al WriteMessage() método y pase lo anterior MailMessage instancia para agregar el mensaje al almacenamiento de Thunderbird.
- Cerrar todos los flujos.
El siguiente fragmento de código le muestra cómo escribir mensajes en el almacenamiento de correo de Thunderbird.
//Getting marker information while writing messages to Mbox storage file
try (FileOutputStream writeStream = new FileOutputStream(dataDir + "inbox")) {
try (MboxrdStorageWriter writer = new MboxrdStorageWriter(writeStream, false)) {
MailMessage msg = MailMessage.load(dataDir + "Message.msg");
String[] fromMarker = {null};
writer.writeMessage(msg, fromMarker);
System.out.println(fromMarker[0]);
}
}
Obtener el número total de mensajes de un archivo 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.
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader("inbox.dat", lo)) {
System.out.println("Total number of messages in Mbox file: " + reader.getTotalItemsCount());
}
Obtener el tamaño del mensaje actual
FileInputStream stream = new FileInputStream(dataDir + "ExampleMbox.mbox");
MboxLoadOptions lo = new MboxLoadOptions();
try (MboxrdStorageReader reader = new MboxrdStorageReader(stream, lo)) {
MailMessage msg = null;
while ((msg = reader.readNextMessage()) != null) {
//returns the number of bytes read
long currentDataSize = reader.getCurrentDataSize();
System.out.println("Bytes read: " + currentDataSize);
}
}
Establecer la codificación de texto preferida al cargar archivos Mbox
El setPreferredTextEncoding(Charset value) método del MboxLoadOptions Clase que obtiene o establece la codificación preferida para los mensajes. Cree un lector para el archivo Mbox con las opciones de carga especificadas y sus mensajes con contenido codificado se leerán y procesarán correctamente. El siguiente ejemplo de código muestra cómo implementar esta funcionalidad en un proyecto:
MboxLoadOptions lo = new MboxLoadOptions();
lo.setPreferredTextEncoding(Charset.forName("utf-8"));
MboxrdStorageReader reader = new MboxrdStorageReader("sample.mbox", lo);
MailMessage message = reader.readNextMessage();
Dividir el almacenamiento Mbox en partes más pequeñas
Aspose.Email proporciona los siguientes componentes diseñados para tener mayor control sobre el procesamiento del almacenamiento Mbox, permitiéndole dividir archivos grandes en partes manejables e implementar acciones personalizadas durante el proceso:
- MboxStorageReader.SplitInto(long chunkSize, String outputPath) método - Le permite dividir el almacenamiento Mbox en partes más pequeñas, facilitando la gestión y el procesamiento de archivos Mbox grandes.
MboxStorageReader.SplitInto(long chunkSize, String outputPath, String partFileNamePrefix) Una variante del método anterior, esta también le permite especificar un prefijo personalizado para los nombres de los archivos Mbox divididos.
MboxStorageReader.setEmlCopyingEventHandler Evento Este evento ocurre antes de que un correo electrónico se copie a un nuevo archivo Mbox. Puede personalizar acciones antes de que los correos sean procesados.
MboxStorageReader.setEmlCopiedEventHandler Evento Este evento ocurre después de que un correo electrónico se copie a un nuevo archivo Mbox. Puede realizar acciones de post‑procesamiento en los correos.
MboxStorageReader.setMboxFileCreatedEventHandler Evento Este evento ocurre cuando se crea un nuevo archivo Mbox. Puede manejar este evento para reaccionar a la creación del archivo.
MboxStorageReader.setMboxFileFilledEventHandler Evento Este evento ocurre cuando un nuevo archivo Mbox se llena con correos electrónicos. Puede responder a que el archivo se haya poblado con correos.
NewStorageEventHandler(Object sender, NewStorageEventArgs e) Representa un delegado para manejar eventos que ocurren después de que se crea o procesa un nuevo archivo de almacenamiento.
MimeItemCopyEventHandler(Object sender, MimeItemCopyEventArgs e) Representa un delegado para manejar eventos relacionados con la copia de elementos Mime, típicamente usado en escenarios donde un objeto MailMessage se copia de un almacenamiento a otro.
NewStorageEventArgs Representa los argumentos utilizados en eventos que se generan después de que se crea un nuevo archivo de almacenamiento o después de que se procesa.
MimeItemCopyEventArgs Representa los argumentos de evento relacionados con la copia de un objeto MailMessage de un almacenamiento a otro, ya sea antes de que comience la copia o después de que se complete.
El siguiente ejemplo de código demuestra cómo interactuar con archivos Mbox, manejar eventos relacionados con estos archivos y realizar operaciones como dividir el almacenamiento Mbox en partes más pequeñas mientras se lleva el registro del recuento de mensajes y de partes:
messageCount = 0;
partCount = 0;
// Create an instance of MboxrdStorageReader
MboxLoadOptions lo = new MboxLoadOptions();
lo.setLeaveOpen(false);
MboxrdStorageReader mbox = new MboxrdStorageReader("my.mbox", lo);
// Subscribe to events
mbox.setMboxFileCreatedEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("New Mbox file created: " + e.getFileName());
partCount++;
}
});
mbox.setMboxFileFilledEventHandler(new NewStorageEventHandler() {
public void invoke(Object sender, NewStorageEventArgs e) {
System.out.println("Mbox file filled with messages: " + e.getFileName());
}
});
mbox.setEmlCopiedEventHandler(new MimeItemCopyEventHandler() {
public void invoke(Object sender, MimeItemCopyEventArgs e) {
System.out.println("Message added to new Mbox file. Subject: " + e.getItem().getSubject());
messageCount++;
}
});
// Split the Mbox storage into smaller parts
mbox.splitInto(10000000, testOutPath, "Prefix");
// Output the final messageCount and partCount
System.out.println("Total messages added: " + messageCount);
System.out.println("Total parts created: " + partCount);