使用gmail api实现完全同步

时间:2015-06-04 05:56:37

标签: php google-api-php-client gmail-api

我使用与gmail api配合使用的google php库。我想从我的Gmail帐户中获取所有邮件。

我是怎么做到的:

        do {
            $this->client->setUseBatch(false);
            $messagesResponse = $service->users_messages->listUsersMessages('me', compact('pageToken'));

            if ($messagesResponse->getMessages()) {
                $batch = new Google_Http_Batch($this->client);
                $this->client->setUseBatch(true);

                foreach ($messagesResponse as $item) {
                    $request = $service->users_messages->get('me', $item->id, ['format' => 'raw']);
                    $batch->add($request);
                }

                $messages = array_merge($messages, $batch->execute());
                $pageToken = $messagesResponse->getNextPageToken();
            }
        } while ($pageToken);

当我从CLI运行此脚本时,出现以下错误:

  

[Google_IO_Exception]
        操作在100000毫秒后超时,接收到57157107个字节

如果我通过检索新令牌来评论该行,那么我收到前100条消息并且它可以正常工作。但我无法取得所有这些。 PHP没有超时,这是google_io_exception,所以我不知道如何解决问题。此外,任何优化提示都会很棒,因为我唯一知道的是批量请求,但我使用它们。

1 个答案:

答案 0 :(得分:0)

这个问题仍然有用,因为我花了很多时间才能得到一个明确的答案,我将分享我所发现的内容:

  

您在一次批量请求中限制为100次通话。如果您需要拨打更多电话,请使用多个批量请求。

https://developers.google.com/gmail/api/guides/

正如您所看到的,根据文档,您在一个批处理请求中不能超过100个调用。因此,您将计算并执行低于此限制。

如果你保持100个请求的限制,那么一切都应该正常工作。