כיצד להשתמש ב-GraphClient עבור Microsoft Graph
עבודה עם GraphClient
מופע של IGraphClient מחלקה זו מטפלת בבניית בקשות, שליחתן ל-Microsoft Graph API, ועיבוד התגובות.
יצירת אובייקט ITokenProvider
כדי ליצור מופע חדש של IGraphClient מחלקה, עליך לספק מופע של ITokenProvider, שיכול לאמת בקשות ל-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);
}
};
קבלת אובייקט GraphClient
לאחר שהגדרת את TokenProvider, עליך לקבל IGraphClient אובייקט לבצע בקשות לשירות. אחרי שיש לך IGraphClient לאחר שהוא מאומת, ניתן להתחיל לבצע קריאות לשירות.
IGraphClient client = GraphClient.getClient(tokenProvider);
עבודה עם תיקיות באמצעות Microsoft Graph
רשימת תיקיות
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());
}
}
רשימת תתי‑תיקיות מתיקיית Inbox
GraphFolderInfoCollection inboxFolders = client.listFolders(GraphKnownFolders.Inbox);
יצירת תיקיית שורש
GraphFolderInfo newFolder = client.createFolder("TEST_FOLDER");
יצירת תת-תיקייה
GraphFolderInfo inboxTestSubFolder1 = client.createFolder(GraphKnownFolders.Inbox, "TEST_SUBFOLDER_1");
GraphFolderInfo inboxTestSubFolder2 = client.createFolder(newFolder.getItemId(), "TEST_SUBFOLDER_2");
קבל תיקייה
GraphFolderInfo sentItemsFolder = client.getFolder(GraphKnownFolders.SentItems);
עדכון תיקייה
GraphFolderInfo originalFolder = client.createFolder("TEST_FOLDER");
originalFolder.setDisplayName("NEW_TEST_FOLDER");
GraphFolderInfo updatedFolder = client.updateFolder(originalFolder);
העתקת תיקייה ותוכן
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());
הזזת תיקייה ותוכן
GraphFolderInfo folder = client.moveFolder(parentFolder.getItemId(), testFolder.getItemId());
מחיקת תיקייה
client.delete(testFolder.getItemId());
רשימת הודעות באמצעות Microsoft Graph
GraphMessageInfoCollection messageInfoColl = client.listMessages(GraphKnownFolders.Inbox);
for (GraphMessageInfo messageInfo : messageInfoColl) {
MapiMessage message = client.fetchMessage(messageInfo.getItemId());
}
רשימת הודעות לפי תאריך שליחה
ה OrderBy התכונה משמשת לציון שההודעות צריכות להיות ממותגות בסדר עולה לפי תאריך השליחה שלהן. זאת מאפשרת ללקוח לאחזר את רשימת ההודעות מה- GraphKnownFolders.Inbox תיקייה בסדר ספציפי, במקרה זה על בסיס תאריך השליחה.
דוגמת הקוד הבאה מדגימה איך ליצור שאילתה שמציינת מיון הודעות לפי תאריך שליחה, ולאחר מכן להשתמש בשאילתה זו כדי לאחזר דף של הודעות מתיקיית Inbox באמצעות Graph API:
// 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);
אחזור הודעה
GraphMessageInfo messageInfo = messageInfoColl.get(0);
MapiMessage fetchedMessage = client.fetchMessage(messageInfo.getItemId());
דפדוף ברשימת הודעות
ה-API מספק תמיכה בדפדוף וסינון עבור רשימת הודעות. זה מאד מועיל כאשר לתיבת דואר מספר גדול של הודעות וצריך זמן רב לאחזור מידע סיכומי עליהן. דוגמת הקוד שלמטה תראה איך להשתמש בדפדוף עבור קבוצות הודעות גדולות כאשר רושמים הודעות מ-Exchange Server באמצעות 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());
}
יצירת הודעה
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);
עדכון הודעה
fetchedMessage.setSubject("Update message");
MapiMessage updatedMessage = client.updateMessage(fetchedMessage);
שליחת הודעה
client.send(message);
שליחת הודעת טיוטה
MapiMessage draftMessage = client.createMessage(GraphKnownFolders.Drafts, message);
client.send(draftMessage.getItemId());
העתקת הודעה
MapiMessage copiedMessage = client.copyMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
העברת הודעה
MapiMessage movedMessage = client.moveMessage(GraphKnownFolders.Inbox, draftMessage.getItemId());
קבצים מצורפים להודעה
MapiAttachmentCollection attachments = client.listAttachments(fetchedMessage.getItemId());
for (MapiAttachment att : attachments) {
client.deleteAttachment(att.getItemId());
}
מחיקת הודעה
client.delete(message.getItemId());
Categories API
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());
Overrides API
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());
Rules API
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());
שימוש ב-Resource לתמיכה בתיבות דואר מרובות
сlient.setResource(ResourceType.Users);
сlient.setResourceId("mailbox");
сlient.listMessages("mailfolder")
// back to the current mailbox
сlient.setResource(ResourceType.Me);