Analizando Archivos de Mensaje de Outlook

Aspose.Email para Java proporciona la clase MapiMessage que se utiliza para abrir y analizar un archivo MSG. Dado que puede haber muchos destinatarios en un archivo MSG, la clase MapiMessage expone el método getRecipients() que devuelve una MapiRecipientCollection que representa una colección de objetos MapiRecipient. El objeto MapiRecipient expone además métodos para trabajar con atributos del destinatario.

La siguiente secuencia de pasos sirve a este propósito:

  1. Cree una instancia de la clase MapiMessage para cargar un archivo MSG desde el método estático Load.
  2. Muestre el nombre del remitente, el asunto y el cuerpo del archivo MSG utilizando los métodos getSenderName(), getSubject() y getBody().
  3. Llame al método getRecipients() expuesto por la clase MapiRecipient para obtener una referencia a la colección de objetos MapiRecipient asociados con el archivo MSG.
  4. Recorra la colección MapiRecipientCollection para mostrar el contenido de cada objeto MapiRecipient a través de sus métodos públicos.
// La ruta al directorio de recursos.
String dataDir = Utils.getSharedDataDir(ParsingOutlookMessageFiles.class) + "outlook/";
//Instanciar un archivo MSG para cargar un archivo MSG del disco
MapiMessage outlookMessageFile = MapiMessage.fromFile(dataDir + "message.msg");
//Mostrar el nombre del remitente
System.out.println("Sender Name : " + outlookMessageFile.getSenderName());
//Mostrar Asunto
System.out.println("Subject : " + outlookMessageFile.getSubject());
//Mostrar Cuerpo
System.out.println("Body : " + outlookMessageFile.getBody());
//Mostrar información del Destinatario
System.out.println("Recipients : \n");
//Recorrer la colección de destinatarios asociada con el objeto MapiMessage
for (int i = 0; i < outlookMessageFile.getRecipients().size(); i++) {
	//Establecer una referencia al objeto MapiRecipient
	MapiRecipient rcp = (MapiRecipient) outlookMessageFile.getRecipients().get_Item(i);
	//Mostrar la dirección de correo electrónico del destinatario
	System.out.println("Email : " + rcp.getEmailAddress());
	//Mostrar el nombre del destinatario
	System.out.println("Name : " + rcp.getDisplayName());
	//Mostrar el tipo de destinatario
	System.out.println("Recipient Type : " + rcp.getRecipientType());
}

Obtener un Tipo de Elemento de un Mensaje MAPI

Aspose.Email ofrece un enum MapiItemType que representa un tipo de elemento. Se puede usar para la conversión de un mensaje en un objeto de una clase correspondiente derivada de la interfaz IMapiMessageItem. Esto evita que los usuarios verifiquen el valor de la propiedad MessageClass antes de la conversión del mensaje.

El siguiente ejemplo de código demuestra cómo iterar a través de los mensajes en una carpeta y convertir cada mensaje MAPI en un tipo de elemento MAPI correspondiente, dependiendo del tipo del mensaje:

for (MessageInfo messageInfo : folder.enumerateMessages()) {
    MapiMessage msg = pst.extractMessage(messageInfo);

    switch (msg.getSupportedType()) {
        // Tipo no soportado. MapiMessage no se puede convertir en un tipo de elemento apropiado.
        // Solo usar en formato MSG.
        case MapiItemType.None:
            break;
        // Un mensaje de correo electrónico. No se requiere conversión.
        case MapiItemType.Message:
            break;
        // Un elemento de contacto. Se puede convertir a MapiContact.
        case MapiItemType.Contact:
            MapiContact contact = (MapiContact) msg.toMapiMessageItem();
            break;
        // Un elemento de calendario. Se puede convertir a MapiCalendar.
        case MapiItemType.Calendar:
            MapiCalendar calendar = (MapiCalendar) msg.toMapiMessageItem();
            break;
        // Una lista de distribución. Se puede convertir a MapiDistributionList.
        case MapiItemType.DistList:
            MapiDistributionList dl = (MapiDistributionList) msg.toMapiMessageItem();
            break;
        // Una entrada de diario. Se puede convertir a MapiJournal.
        case MapiItemType.Journal:
            MapiJournal journal = (MapiJournal) msg.toMapiMessageItem();
            break;
        // Una nota adhesiva. Se puede convertir a MapiNote.
        case MapiItemType.Note:
            MapiNote note = (MapiNote) msg.toMapiMessageItem();
            break;
        // Un elemento de tarea. Se puede convertir a MapiTask.
        case MapiItemType.Task:
            MapiTask task = (MapiTask) msg.toMapiMessageItem();
            break;
    }
}