Php 当maxResults设置为100时,Gmail列表API返回所有消息

Php 当maxResults设置为100时,Gmail列表API返回所有消息,php,gmail-api,Php,Gmail Api,我正在进行Gmail列表API设置,但由于某些原因,它会返回我收件箱中的所有5000封邮件,即使我已将maxResults设置为100。这是我目前的代码: $pageToken = NULL; $messages = array(); $opt_param = array(); do { try { if ($pageToken) { $opt_param['pageToken'] = $pageToken; $opt_p

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

$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;
$pageToken=NULL;
$messages=array();
$opt_param=array();
做{
试一试{
如果($pageToken){
$opt_param['pageToken']=$pageToken;
$opt_param['maxResults']=100;
$opt_param['labelIds']=“收件箱”;
}
$messagesResponse=$service->users\u messages->listUsersMessages($userId,$opt\u param);
如果($messagesResponse->getMessages()){
$messages=array_merge($messages,$messagesResponse->getMessages());
$pageToken=$messagesResponse->getNextPageToken();
}
}捕获(例外$e){
打印“出现错误:”。$e->getMessage();
}
}而($pageToken);
foreach($messages作为$message){
打印“ID为的消息”。$Message->getId()。
; } 返回$messages;

我不确定哪里出了问题,但我需要能够将我的收件箱过滤到最近发送的100封邮件。

所以我才意识到,你收到的是所有邮件,因为即使你是以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;
$messages=array();
试一试{
$opt_param=数组(
“maxResults”=>100,
“LabelID”=>“收件箱”
);
$messagesResponse=$service->users\u messages->listUsersMessages($userId,$opt\u param);
$messages=$messagesResponse->getMessages();
}捕获(例外$e){
打印“出现错误:”。$e->getMessage();
}
如果(!空($messages)){
foreach($messages作为$message){
打印“ID为的消息”。$Message->getId()。
; } } 返回$messages;
所以我删除了do/while循环,基本上


希望这有帮助

那应该有用。。。傻q,但你确定$pageToken不是“falsy”?(也就是说,maxResults真的被设置了吗?)而且,这应该不会有什么区别,但也许可以尝试将maxResults作为字符串传递?是的,我无意中没有将$pageToken添加到此中,但它被设置了。我现在要更新代码。即使在第一个循环中?不,它是在实际代码中设置的,我只是在复制代码到这里时没有突出显示它。但它总是在实际代码中。这也都是从Gmail API文档中获取的,所以不确定if语句的用途。也不确定,但由于它开始为NULL,if将返回false,因此第一次调用不会设置maxResults。。。我将移动两个
$opt_param['maxResults']=100
$opt_param['labelIds']='INBOX'在“如果”之外,因此您的第一次呼叫与所有后续呼叫具有相同的参数(减去pageToken)。事实上,在“如果”(!(!empty($messages))部分中,需要有另一个右括号,但除此之外,它完全起作用。非常感谢您的帮助!对,您已-修复。很高兴我能提供帮助!