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;