كيفية استخدام 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());
}
}
قائمة المجلدات الفرعية من مجلد الوارد
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 المجلد بترتيب محدد، في هذه الحالة، بناءً على تاريخ الإرسال.
العينة البرمجية التالية توضح كيفية إنشاء استعلام يحدد ترتيب الرسائل حسب تاريخ الإرسال، ثم استخدام هذا الاستعلام لجلب صفحة من الرسائل من مجلد البريد الوارد باستخدام 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 باستخدام 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());
فئات 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());
تجاوزات 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());
قواعد 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());
استخدام المورد لدعم عدة صناديق بريد
сlient.setResource(ResourceType.Users);
сlient.setResourceId("mailbox");
сlient.listMessages("mailfolder")
// back to the current mailbox
сlient.setResource(ResourceType.Me);