Как отправить идентификаторы сообщений в Gmail для пакетного изменения вызова API в клиентской библиотеке php - PullRequest
0 голосов
/ 06 апреля 2019

Я все настроил и работает отлично, В качестве тестирования я пытаюсь взять несколько отфильтрованных писем и обновить их как прочитанные. Разовое обновление работает с кодом ниже

            $mods = new Google_Service_Gmail_ModifyMessageRequest();
            $mods->setRemoveLabelIds('UNREAD');
            foreach ($messages as $message) {
                try {
                    $message = $service->users_messages->modify($userId, $messageId, $mods);
                    print 'Message with ID: ' . $messageId . ' successfully modified.';
                } catch (Exception $e) {
                    print 'An error occurred: ' . $e->getMessage();
                }
                print 'Message with ID: ' . $message->getId() . '<br/>';
            }

Я попытался обратиться к документации, чтобы узнать, как установить параметры для функции пакетной модификации. но нет подробностей об этом. поэтому я прочитал исходные файлы в клиентской библиотеке Google и обнаружил, что она принимает только три параметра, как показано ниже.

класс Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resource

public function batchModify($userId, Google_Service_Gmail_BatchModifyMessagesRequest $postBody, $optParams = array())

Так что я попробовал ниже код

        $mods = new Google_Service_Gmail_BatchModifyMessagesRequest();
        $mods->setRemoveLabelIds(['UNREAD']);
        $msgIdString = '';
        foreach ($messages as $message) {
            $id = $message->getId();
            $msgIdString .= " $id";
        }
        echo $msgIdString;
        try {
            $message = $service->users_messages->batchModify($user, $mods);   
        } catch (Exception $e) {
            print 'An error occurred: ' . $e->getMessage();
        }

но это дает мне ошибку

An error occurred: { "error": { "errors": [ { "domain": "global", "reason": "invalidArgument", "message": "No message ids specified." } ], "code": 400, "message": "No message ids specified." } }

Так что моя проблема в том, что я все еще не могу найти место, куда я должен поставить идентификаторы сообщения.

1 Ответ

0 голосов
/ 10 апреля 2019

Потратив некоторое время на это, я смог его найти.Я упоминаю здесь, поскольку это поможет кому-то в будущем. На самом деле идентификаторы должны быть массивом, а не строкой.это ошибка, которую я сделал раньше.Поэтому я помещаю все идентификаторы в $ msgIdArray и отправляю.сейчас работает.

        foreach ($messages as $message) {
            $id = $message->getId();
            $msgIdString .= " '$id', ";
            array_push($msgIdArray, $id);
        }
        echo $msgIdString;
        if (!empty($msgIdArray)) {
            $mods = new Google_Service_Gmail_BatchModifyMessagesRequest();
            $mods->setRemoveLabelIds(['UNREAD']);
            $mods->setIds($msgIdArray);
            try {
                $message = $service->users_messages->batchModify($user, $mods);
            } catch (Exception $e) {
                print 'An error occurred: ' . $e->getMessage();
            }
        }
...