Trabajar con mensajes usando Microsoft Graph
Aspose.Email para Java ofrece un conjunto amplio de API para gestionar mensajes a través de Microsoft Graph. Puedes listar, obtener, crear, actualizar, mover, copiar y eliminar mensajes, además de manejar paginación y adjuntos. Los ejemplos de código a continuación son ejemplos de las operaciones más comunes.
Listar mensajes
Puedes recuperar mensajes de una carpeta específica, como la Bandeja de entrada, y obtener su contenido completo:
GraphMessageInfoCollection messageInfoColl = client.listMessages(GraphKnownFolders.Inbox);
for (GraphMessageInfo messageInfo : messageInfoColl) {
MapiMessage message = client.fetchMessage(messageInfo.getItemId());
}
Listar mensajes por fecha de envío
Para ordenar los mensajes por fecha de envío en orden ascendente, puedes usar el OrderBy característica de GraphQueryBuilder:
// create orderby messages query 'ASC'
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.getSentDate().orderBy(true);
MailQuery query = builder.getQuery();
GraphMessagePageInfo pageInfo = client.listMessages(GraphKnownFolders.Inbox, new PageInfo(10), query);
Obtener mensaje
Una vez que tienes una referencia al mensaje, puedes obtener su contenido completo:
GraphMessageInfo messageInfo = messageInfoColl.get(0);
MapiMessage fetchedMessage = client.fetchMessage(messageInfo.getItemId());
Actualizar un mensaje
Después de obtener un mensaje, puedes modificar su contenido y actualizarlo en el servidor:
fetchedMessage.setSubject("Update message");
MapiMessage updatedMessage = client.updateMessage(fetchedMessage);
Paginación en listado de mensajes
Al trabajar con buzones grandes, puedes usar paginación para obtener mensajes en bloques. El siguiente ejemplo muestra cómo listar mensajes no leídos en páginas de dos elementos cada una:
// send ping test messages
for (int i = 0; i < 5; i++) {
MailMessage eml = new MailMessage(user.EMail, user.EMail, "ping" + i, "test body");
client.send(MapiMessage.fromMailMessage(eml));
}
// waiting for inbox
Thread.sleep(10000);
// paging option
int itemsPerPage = 2;
// create unread messages filter
GraphQueryBuilder builder = new GraphQueryBuilder();
builder.isRead().equals(false);
MailQuery query = builder.getQuery();
// list messages
GraphMessagePageInfo pageInfo = client.listMessages(GraphKnownFolders.Inbox, new PageInfo(itemsPerPage), query);
GraphMessageInfoCollection messages = pageInfo.getItems();
while (!pageInfo.getLastPage())
{
pageInfo = client.listMessages(GraphKnownFolders.Inbox, pageInfo.getNextPage(), query);
// add next page items to common collection
messages.addRange(pageInfo.getItems());
}
// set messages state as read
for (GraphMessageInfo message : messages) {
client.setRead(message.getItemId());
}
Crear un mensaje
Puedes crear nuevos mensajes con asunto, cuerpo y propiedades:
MapiMessage message = new MapiMessage();
message.setSubject("Subject");
message.setBody("Body");
message.setProperty(KnownPropertyList.DISPLAY_TO, "to@host.com");
message.setProperty(KnownPropertyList.SENDER_NAME, "from");
message.setProperty(KnownPropertyList.SENT_REPRESENTING_EMAIL_ADDRESS, "from@host.com");
MapiMessage createdMessage = client.createMessage(GraphKnownFolders.Inbox, message);
Enviar mensaje
Puedes enviar un mensaje directamente:
client.send(message);
O envía un mensaje borrador después de crearlo en la carpeta Borradores:
MapiMessage draftMessage = client.createMessage(GraphKnownFolders.Drafts, message);
client.send(draftMessage.getItemId());
Copiar y mover mensajes
Los mensajes pueden copiarse o moverse entre carpetas:
MapiMessage copiedMessage = client.copyMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
MapiMessage movedMessage = client.moveMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
Gestionar archivos adjuntos
Para listar y eliminar archivos adjuntos de un mensaje, usa el siguiente ejemplo de código:
MapiAttachmentCollection attachments = client.listAttachments(fetchedMessage.getItemId());
for (MapiAttachment att : attachments) {
client.deleteAttachment(att.getItemId());
}
Eliminar un mensaje
Finalmente, puedes eliminar un mensaje permanentemente:
client.delete(message.getItemId());