【问题标题】:Gmail List API returning all messages when maxResults set to 100当 maxResults 设置为 100 时,Gmail List API 返回所有邮件
【发布时间】:2017-02-07 18:25:57
【问题描述】:

我正在设置 Gmail 列表 API,但由于某种原因,即使我已将 maxResults 设置为 100,它也会返回我收件箱中的所有 5,000 封邮件。这是我当前的代码:

$pageToken = NULL; 
$messages = array();
$opt_param = array();
do {
    try {
        if ($pageToken) {
            $opt_param['pageToken'] = $pageToken;
            $opt_param['maxResults'] = 100;
            $opt_param['labelIds'] = 'INBOX';
        }
        $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
        if ($messagesResponse->getMessages()) {
            $messages = array_merge($messages, $messagesResponse->getMessages());
            $pageToken = $messagesResponse->getNextPageToken();
        }
    } catch (Exception $e) {
        print 'An error occurred: ' . $e->getMessage();
    }
} while ($pageToken);

foreach ($messages as $message) {
    print 'Message with ID: ' . $message->getId() . '<br/>';
}
return $messages;

我不确定我哪里出错了,但我需要能够将我的收件箱过滤到最近发送的 100 条消息。

【问题讨论】:

  • 这应该可行...这里很傻,但是您确定 $pageToken 不是“假的”? (即 maxResults 真的被设置了吗?)另外,这应该没什么区别,但也许可以尝试将 maxResults 作为字符串传递?
  • 是的,我不小心没有将 $pageToken 添加到此,但它已设置。我现在就更新代码。
  • 即使在第一个循环中?
  • 不,是在实际代码中设置的,只是我复制代码到这里时没有突出显示。它总是在实际代码中。这也全部取自 Gmail API 文档,因此不确定 if 语句的用途。
  • 也不确定,但由于它以 NULL 开头,因此 if 将返回 false,因此第一次调用不会设置 maxResults ...我会将 $opt_param['maxResults'] = 100;$opt_param['labelIds'] = 'INBOX'; 移出那个“if”,所以你的第一个调用与所有后续调用具有相同的参数(减去 pageToken)

标签: php gmail-api


【解决方案1】:

所以我刚刚意识到,您会收到所有消息,因为即使您按 100 个切片获取它们,最终您也是在循环中执行此操作,直到您收到 所有 条消息你的收件箱...

如果您只想要前 100 个,请尝试以下操作:

$messages = array();
try {
  $opt_param = array(
    'maxResults' => 100,
    'labelIds' => 'INBOX'
  );
  $messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
  $messages = $messagesResponse->getMessages();
} catch (Exception $e) {
  print 'An error occurred: ' . $e->getMessage();
}
if(!empty($messages)) {
  foreach ($messages as $message) {
    print 'Message with ID: ' . $message->getId() . '<br/>';
  }
}

return $messages;

所以我删除了 do/while 循环,基本上...

希望这会有所帮助!

【讨论】:

  • 在 if(!(!empty($messages) 部分实际上有一个轻微的错字,需要另一个右括号,但除此之外,它完全有效。非常感谢为您的帮助!
  • 对,你是固定的。很高兴我能帮上忙!
猜你喜欢
  • 2018-05-06
  • 2014-08-30
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2018-02-22
  • 2016-04-27
相关资源
最近更新 更多