ms graph php sdk объект сообщения не может проверить наличие вложений - PullRequest
0 голосов
/ 22 марта 2019

Я получаю сообщения из учетной записи Outlook.Я пытаюсь получить встроенные файлы и вложения из этих сообщений.

$graph = new Graph();
$graph->setAccessToken($this->getAccessToken());

$messageQueryParams = array (
    "\$select" => "subject,receivedDateTime,from,sentDateTime,body,toRecipients,sender,uniqueBody,ccRecipients,bccRecipients,attachments",
    "\$orderby" => "receivedDateTime DESC",
    "\$top" => "200" 
);

$url = '/me/mailfolders/' . $folder . '/messages/delta';
$url_combiner = '?';

$getMessagesUrl = $url . $url_combiner . http_build_query($messageQueryParams);
$response = $graph->createRequest('GET', $getMessagesUrl)->execute();

$messages = $response->getResponseAsObject( \Microsoft\Graph\Model\Message::class );

foreach($messages as $msg) {
     echo $msg->getHasAttachments();
}

Этот код возвращает 'null' для $ msg-> getHasAttachments ();Я ожидаю, что он вернет true или false.

Сообщения, которые я загружаю из этой папки, содержат как встроенные, так и почтовые вложения, поэтому я ищу решение для обоих.

(Ответы, которые указывают на определенные моменты в документации MS Graph PHP SDK, очень приветствуются.)

1 Ответ

1 голос
/ 22 марта 2019

Это ожидаемое поведение, в вашем случае метод getHasAttachments() возвращает null, поскольку hasAttachments не включен в параметр запроса $select и, следовательно, не запрашивается с сервера . Это должно быть явно включено, например:

$messageQueryParams = array (
    "\$select" => "hasAttachments,...",
    //another params are omitted for clarity
);

Тогда, будет ли сообщение содержать вложения или нет, можно определить так:

foreach($messages as $msg) {
    if($msg->getHasAttachments() == true){
        //...
}

В приведенном примере есть еще одна проблема: для получения Message.attachments ссылочного свойства (или свойства отношения) его необходимо указать с помощью $expand параметра строки запроса вместо $select (см. официальная документация для более подробной информации), например:

$messageQueryParams = array (
     "\$expand" => "attachments",
    //another params are omitted for clarity
); 

Тогда коллекция вложений может быть повторена так:

 foreach($messages as $msg) {
    foreach($msg->getAttachments() as $attachment) {
        //...
    }
 }
...