Microsoft graph - outlook mail - перечислите все почтовые папки (не только папки верхнего уровня)?

В настоящее время, насколько я могу судить, график Microsoft предлагает 2 основных конечных точки для почтовых папок Outlook в соответствии с https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/message

List mail folders а также List child folders То есть, просто для того, чтобы построить иерархию папок в моем приложении на панели мониторинга, мне нужно делать рекурсивные вызовы REST API - что очень медленно и очень плохо.

Есть ли способ заставить Microsoft просто вернуть все папки сразу?

4 ответа

Решение

Нет, нет Вы должны проверить childFolderCount свойство для каждой папки и только запрос, если не ноль.

Используя текущий V1.0

Вы можете получить два уровня за вызов, развернув контейнер childFolders.

https://graph.microsoft.com/v1.0/me/mailFolders?$top=250&$expand=childFolders

Использование бета-версии

Вы можете получить до 250 папок за запрос, вы получите плоскую иерархию, которая включает в себя неограниченные дочерние уровни. Бета-версия находится в бета-версии с 2015 года (насколько я могу судить), и я не могу сказать, когда / если она будет запущена в производство. В моем случае я использую бета-версию для извлечения папок и возврата к v1.0 и рекурсивного зацикливания.

Просто слегка измените ваш запрос GET. v1.0 до бета-версии. Для меня существующие токены и учетные данные аутентификации работают без каких-либо изменений. Также обратите внимание, что нет необходимости расширять childFolders с помощью конечной точки Beta.

https://graph.microsoft.com/beta/me/mailFolders?$top=250

Пример ответа...

[{
    "id": "xx-1",
    "displayName": "Inbox",
    "parentFolderId": "xx-0",
    "childFolderCount": 1,
    "unreadItemCount": 8,
    "totalItemCount": 22,
    "wellKnownName": "inbox"
  },
  {
    "id": "xx-2",
    "displayName": "Level 2",
    "parentFolderId": "xx-1",
    "childFolderCount": 1,
    "unreadItemCount": 2,
    "totalItemCount": 4,
    "wellKnownName": null
  },
  {
    "id": "xx-3",
    "displayName": "level 3",
    "parentFolderId": "xx-2",
    "childFolderCount": 1,
    "unreadItemCount": 0,
    "totalItemCount": 0,
    "wellKnownName": null
  },
  {
    "id": "xx-4",
    "displayName": "level 4",
    "parentFolderId": "xx-3",
    "childFolderCount": 0,
    "unreadItemCount": 0,
    "totalItemCount": 0,
    "wellKnownName": null
  }
]

Да, ты можешь. Просто используйте дельта-запрос, чтобы получить все папки.

Пример запроса:https://graph.microsoft.com/v1.0/users/%5Buser_id%5D/mailfolders/delta?$select=displayname visible/mailfolders/ delta? $select= displayname Вы получаете массив всех папок с дочерними папками сразу после элемента parent-folder в ответ.

Тест:
перейдите по адресу: https://developer.microsoft.com/en-us/graph/graph-explorer
Версия GET: v1.0 URL-адрес: https://graph.microsoft.com/v1.0/me/Mailfolders/delta
запрос

Обратите внимание, что в ответ также включаются папки "Internal Screens" и "Project Falcon", parentFolderId которых является идентификатором "Inbox".

Вы можете получить все списки почтовых папок в Microsoft graph API, используя CURL

      $curl = curl_init();
$accessToken = ""; //Get the access token from your database or txt file
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://graph.microsoft.com/v1.0/me/mailFolders/?includeHiddenFolders=true',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Authorization: Bearer '
  ),
 ));
   $response = curl_exec($curl);
   curl_close($curl);
   echo $response;
Другие вопросы по тегам