Travailler avec les messages en utilisant Microsoft Graph

Aspose.Email for Java fournit un ensemble complet d’API permettant de gérer les messages via Microsoft Graph. Vous pouvez lister, récupérer, créer, mettre à jour, déplacer, copier et supprimer des messages, ainsi que gérer la pagination et les pièces jointes. Les exemples de code ci‑dessous illustrent les opérations les plus courantes.

Lister les messages

Vous pouvez récupérer les messages d’un dossier spécifique, tel que la boîte de réception, et en extraire le contenu complet :

GraphMessageInfoCollection messageInfoColl = client.listMessages(GraphKnownFolders.Inbox);
for (GraphMessageInfo messageInfo : messageInfoColl) {
    MapiMessage message = client.fetchMessage(messageInfo.getItemId());
}

Lister les messages par date d’envoi

Pour trier les messages par date d’envoi en ordre croissant, vous pouvez utiliser le OrderBy fonctionnalité 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);

Récupérer le message

Une fois que vous avez une référence de message, vous pouvez récupérer son contenu complet :

GraphMessageInfo messageInfo = messageInfoColl.get(0);
MapiMessage fetchedMessage = client.fetchMessage(messageInfo.getItemId());

Mettre à jour un message

Après avoir récupéré un message, vous pouvez modifier son contenu et le mettre à jour sur le serveur :

fetchedMessage.setSubject("Update message");
MapiMessage updatedMessage = client.updateMessage(fetchedMessage);

Pagination dans la liste des messages

Lorsque vous travaillez avec de grandes boîtes aux lettres, vous pouvez utiliser la pagination pour récupérer les messages par lots. L’exemple ci‑dessous montre la liste des messages non lus en pages de deux éléments chacune :

// 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());
}

Créer un message

Vous pouvez créer de nouveaux messages avec un sujet, un corps et des propriétés :

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);

Envoyer le message

Vous pouvez envoyer un message directement :

client.send(message);

Ou envoyez un message brouillon après l’avoir créé dans le dossier Brouillons :

MapiMessage draftMessage = client.createMessage(GraphKnownFolders.Drafts, message);
client.send(draftMessage.getItemId());

Copier et déplacer les messages

Les messages peuvent être copiés ou déplacés entre les dossiers :

MapiMessage copiedMessage = client.copyMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
MapiMessage movedMessage = client.moveMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());

Gérer les pièces jointes

Pour lister et supprimer les pièces jointes d’un message, utilisez l’exemple de code suivant :

MapiAttachmentCollection attachments = client.listAttachments(fetchedMessage.getItemId());
for (MapiAttachment att : attachments) {
    client.deleteAttachment(att.getItemId());
}

Supprimer un message

Enfin, vous pouvez supprimer définitivement un message :

client.delete(message.getItemId());