Comment utiliser GraphClient pour Microsoft Graph
Travailler avec GraphClient
Une instance du IGraphClient classe gère la construction des requêtes, leur envoi à l’API Microsoft Graph et le traitement des réponses.
Créer un objet ITokenProvider
Pour créer une nouvelle instance de IGraphClient classe, vous devez fournir une instance de ITokenProvider, qui peut authentifier les requêtes vers Microsoft Graph.
ITokenProvider tokenProvider = new ITokenProvider() {
Date expirationDate = null;
@Override
public void dispose() {
}
@Override
public OAuthToken getAccessToken(boolean ignoreExistingToken) {
// Gets oAuth access token.
// If ignoreExistingToken is true, requests new token from a server. Otherwise behavior is depended on whether token exists or not.
// If token exists and its expiration date is not expired returns current token, otherwise requests new token from a server.
return null;
}
@Override
public OAuthToken getAccessToken() {
// Gets oAuth access token.
// If token exists and its expiration date is not expired returns current token, otherwise requests new token from a server.
return new OAuthToken("token", expirationDate);
}
};
Obtenir un objet GraphClient
Après avoir configuré le TokenProvider, vous devez obtenir un IGraphClient objet pour effectuer des requêtes contre le service. Après avoir un IGraphClient une fois authentifié, vous pouvez commencer à appeler le service.
IGraphClient client = GraphClient.getClient(tokenProvider);
Travailler avec les dossiers via Microsoft Graph
List Folders
GraphFolderInfoCollection folders = client.listFolders();
for (GraphFolderInfo folderInfo : folders) {
System.out.println(folderInfo.getDisplayName());
for (KeyValuePair<Long, MapiProperty> prop : folderInfo.getProperties()) {
System.out.println(prop.getValue().getDescriptor().toString() + " " + prop.getValue().getString());
}
}
List Subfolders from Inbox Folder
GraphFolderInfoCollection inboxFolders = client.listFolders(GraphKnownFolders.Inbox);
Créer un dossier racine
GraphFolderInfo newFolder = client.createFolder("TEST_FOLDER");
Créer un sous-dossier
GraphFolderInfo inboxTestSubFolder1 = client.createFolder(GraphKnownFolders.Inbox, "TEST_SUBFOLDER_1");
GraphFolderInfo inboxTestSubFolder2 = client.createFolder(newFolder.getItemId(), "TEST_SUBFOLDER_2");
Get Folder
GraphFolderInfo sentItemsFolder = client.getFolder(GraphKnownFolders.SentItems);
Update Folder
GraphFolderInfo originalFolder = client.createFolder("TEST_FOLDER");
originalFolder.setDisplayName("NEW_TEST_FOLDER");
GraphFolderInfo updatedFolder = client.updateFolder(originalFolder);
Copier le dossier et son contenu
GraphFolderInfo parentFolder = client.createFolder("PARENT_FOLDER");
GraphFolderInfo testFolder = client.createFolder("TEST_FOLDER");
GraphFolderInfo testSubFolder = client.createFolder(testFolder.getItemId(), "TEST_SUBFOLDER");
MapiMessage message = new MapiMessage();
message.setSubject("Test subject");
message.setBody("Test 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(testSubFolder.getItemId(), message);
GraphFolderInfo folderCopy = client.copyFolder(parentFolder.getItemId(), testFolder.getItemId());
GraphFolderInfoCollection folderColl = client.listFolders(parentFolder.getItemId());
// TEST_FOLDER
System.out.println(folderColl.get(0).getDisplayName());
folderColl = client.listFolders(folderColl.get(0).getItemId());
// TEST_SUBFOLDER
System.out.println(folderColl.get(0).getDisplayName());
GraphMessageInfoCollection listMessages = client.listMessages(folderColl.get(0).getItemId());
// Test subject
System.out.println(listMessages.get(0).getSubject());
Déplacer le dossier et son contenu
GraphFolderInfo folder = client.moveFolder(parentFolder.getItemId(), testFolder.getItemId());
Delete Folder
client.delete(testFolder.getItemId());
Lister les messages avec Microsoft Graph
GraphMessageInfoCollection messageInfoColl = client.listMessages(GraphKnownFolders.Inbox);
for (GraphMessageInfo messageInfo : messageInfoColl) {
MapiMessage message = client.fetchMessage(messageInfo.getItemId());
}
Lister les messages par date d’envoi
Le OrderBy la fonctionnalité est utilisée pour indiquer que les messages doivent être triés en ordre croissant selon leur date d’envoi. Cela permet au client de récupérer la liste des messages depuis le GraphKnownFolders.Inbox dossier dans un ordre spécifique, dans ce cas basé sur la date d’envoi.
L’exemple de code suivant montre comment créer une requête qui spécifie le tri des messages par date d’envoi, puis utiliser cette requête pour récupérer une page de messages du dossier Boîte de réception via l’API Graph :
// 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
GraphMessageInfo messageInfo = messageInfoColl.get(0);
MapiMessage fetchedMessage = client.fetchMessage(messageInfo.getItemId());
Pagination dans la liste des messages
L’API fournit la prise en charge de la pagination et du filtrage pour lister les messages. Ceci est très utile lorsqu’une boîte aux lettres contient un grand nombre de messages et que la récupération des informations récapitulatives prend beaucoup de temps. L’exemple de code ci‑dessous vous montre comment utiliser la pagination pour de grands ensembles de messages lors de la liste des messages depuis Exchange Server en utilisant IGraphClient :
// 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
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);
Mettre à jour le message
fetchedMessage.setSubject("Update message");
MapiMessage updatedMessage = client.updateMessage(fetchedMessage);
Envoyer le message
client.send(message);
Envoyer le message brouillon
MapiMessage draftMessage = client.createMessage(GraphKnownFolders.Drafts, message);
client.send(draftMessage.getItemId());
Copier le message
MapiMessage copiedMessage = client.copyMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
Déplacer le message
MapiMessage movedMessage = client.moveMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
Pièces jointes du message
MapiAttachmentCollection attachments = client.listAttachments(fetchedMessage.getItemId());
for (MapiAttachment att : attachments) {
client.deleteAttachment(att.getItemId());
}
Supprimer le message
client.delete(message.getItemId());
API des catégories
String categoryName = "Test Category";
int preset = CategoryPreset.Preset10;
OutlookCategory category = client.createCategory(categoryName, preset);
OutlookCategory fetchedCategory = client.fetchCategory(category.getId());
List<OutlookCategory> categories = client.listCategories();
fetchedCategory.setDisplayName("Update Category");
fetchedCategory.setPreset(CategoryPreset.Preset11);
OutlookCategory updatedCategory = client.updateCategory(fetchedCategory);
client.delete(category.getId());
API des overrides
int focusedType = ClassificationType.Focused;
ClassificationOverride override = client.createOrUpdateOverride(new MailAddress("testUser@host.com", "testUser"), focusedType);
List<ClassificationOverride> list = client.listOverrides();
for (ClassificationOverride item : list)
System.out.println(item.getSender().getAddress());
ClassificationOverride fetchedOverride = list.get(0);
fetchedOverride.setClassifyAs(ClassificationType.Other);
fetchedOverride.getSender().setDisplayName("testUser_1");
ClassificationOverride updatedOverride = client.createOrUpdateOverride(fetchedOverride);
fetchedOverride.setClassifyAs(ClassificationType.Focused);
updatedOverride = client.updateOverride(fetchedOverride);
client.delete(updatedOverride.getId());
API des règles
InboxRule rule = new InboxRule();
rule.setDisplayName("Test rule");
rule.setPriority(1);
rule.setEnabled(true);
rule.setConditions(new RulePredicates());
rule.getConditions().containsSenderStrings(new StringCollection());
rule.getConditions().containsSenderStrings().addItem("testUser");
rule.setActions(new RuleActions());
rule.getActions().setForwardToRecipients(new MailAddressCollection());
rule.getActions().getForwardToRecipients().addMailAddress(new MailAddress("testUser@host.com", "testUser", true));
rule.getActions().setStopProcessingRules(true);
InboxRule createdRule = client.createRule(rule);
List<InboxRule> listedRules = client.listRules();
for (InboxRule item : listedRules)
System.out.println(item.getDisplayName());
InboxRule fetchedRule = client.fetchRule(createdRule.getRuleId());
createdRule.setDisplayName("Test rule 1");
createdRule.setEnabled(false);
InboxRule updatedRule = client.updateRule(createdRule);
client.delete(createdRule.getRuleId());
Utiliser Resource pour prendre en charge plusieurs boîtes aux lettres
сlient.setResource(ResourceType.Users);
сlient.setResourceId("mailbox");
сlient.listMessages("mailfolder")
// back to the current mailbox
сlient.setResource(ResourceType.Me);