Объект сообщения ms graph php sdk не может проверить, есть ли вложения

Я получаю сообщения из учетной записи 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 (); Я ожидал, что он вернет истину или ложь.

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

(Мы очень ценим ответы, указывающие на конкретные моменты в документации MS Graph PHP SDK.)


person iateadonut    schedule 22.03.2019    source источник


Ответы (1)


Это ожидаемое поведение, в вашем случае метод 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) {
        //...
    }
 }
person Vadim Gremyachev    schedule 22.03.2019