Моя компания запускает веб-приложение, которое считывает общий почтовый ящик и показывает контент пользователям. До сих пор он был основан на PHP-EWS. Поскольку мы перемещаем почтовый ящик в облако, мы должны перенести это приложение в MS-Graph. Я уже перенес львиную долю приложения, но теперь я сталкиваюсь с проблемой, когда пытаюсь получить MIME-версию сообщения.
Получение обработанной версии сообщения вообще не проблема. Запрос на это будет выглядеть примерно так:
GET /users/{mailbox-id}/mailfolders/inbox/messages/{message-id}
Согласно документации, я должен добавить "/ $ value" в конце "обычного" запроса, чтобы получить mime-версию сообщения. Это прекрасно работает на веб-сайте Microsoft Graph-Tester. В моем приложении я также могу без проблем запросить MIME-версию сообщения ATTACHED (работает с тем же трюком "/ $ value"). Но если я запрашиваю MIME-версию (обычного) сообщения NOT-ATTACHED, я получаю следующую ошибку:
Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `GET https://graph.microsoft.com/v1.0/users/{mailbox-id}/mailfolders/inbox/messages/{message-id}/%24value`
resulted in a `405 Method Not Allowed` response: { "error": { "code": "ErrorInvalidRequest", "message": "The OData request is not supported.", "innerEr (truncated...) in D:\wwwroot\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php:113
Stack trace: #0 D:\wwwroot\vendor\guzzlehttp\guzzle\src\Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response))
#1 D:\wwwroot\vendor\guzzlehttp\promises\src\Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 D:\wwwroot\vendor\guzzlehttp\promises\src\Promise.php(156): GuzzleHttp\Promise\Promise::callHand in D:\wwwroot\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 113
Я использовал следующий код:
$graph = new Graph();
$graph->setAccessToken($tokenCache->getAccessToken());
/** @var $contentStream GuzzleHttp\Psr7\Stream */
$getMessageContentUrl = '/users/' . $mailbox . '/mailfolders/inbox/messages/' . $messageId.'/%24value';
try {
$contentStream = $graph->createRequest('GET', $getMessageContentUrl)
->setReturnType("GuzzleHttp\Psr7\Stream")
->execute();
} catch (GraphException $e) {
[...]
}
return $contentStream->getContents();
То же самоекод работает, если я запрашиваю MIME-версию прикрепленного сообщения.
Я думал о проблемах urlencoding, поэтому я попытался "/ $ value" и "/% 24value", тот же результат.
Не думаю, что это проблема с разрешениями. OAUTH_SCOPES:
'openid profile offline_access User.Read Mail.Read Mail.Read.Shared Mail.ReadWrite Mail.ReadWrite.Shared Calendars.Read Calendars.Read.Shared'
Так что я думаю, что учетная запись должна иметь более чем достаточно разрешений для выполнения этой задачи.
Я понятия не имею, если я делаю что-то неправильно или этопроблема Graph-API или Graph-PHP-SDK или Guzzle-Http-Client. Я использую следующие версии:
"name": "microsoft / microsoft-graph", "version": "1.11.0",
"name": "guzzlehttp / guzzle"," версия ":" 6.3.3 ",
" имя ":" guzzlehttp / psr7 "," версия ":" 1.6.1 ",
Я был бы очень рад, есликто-то может помочь мне или, по крайней мере, поставить меня на правильный путь.