首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >预估搜索结果| Gmail API PHP

预估搜索结果| Gmail API PHP
EN

Stack Overflow用户
提问于 2016-01-12 18:20:42
回答 1查看 476关注 0票数 1

我正在尝试获取给定搜索的电子邮件数量(已读和未读分开显示)。我读到过labels.get()函数可以做到这一点,但我不知道如何使用它。这是我必须检测的代码,如果我对给定的发件人有少于或超过100个结果。

代码语言:javascript
运行
复制
      require_once '../../vendor/autoload.php';
      session_start();
      $client = new Google_Client();
      $client->setAuthConfigFile('../../client_secrets.json');
      $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
      $client->addScope(Google_Service_Gmail::GMAIL_READONLY);
      $client->setAccessType("offline");
      $client->setApprovalPrompt('force');
      $client->setAccessToken($_SESSION['token']);
      $service = new Google_Service_Gmail($client);

      $sender = array();
      $sender[] = 'sender1@email.com';
      $sender[] = 'sender2@email.com';
      $sender[] = 'sender3@email.com';

      function countfrom($service, $userId, $expeditor) {
            try
            {
              unset($optParamsamz);
              $optParamsamz = [];
              $optParamsamz['maxResults'] = 100; // Return Only 5 Messages
              $optParamsamz['q'] = "From: '".$expeditor."'  "; 
              $messagesamz = $service->users_messages->listUsersMessages('me',$optParamsamz);
              $listamz = $messagesamz->getMessages();
              echo sizeof($listamz);

          }
         catch (Exception $e)
            {
              print 'An error occurred: ' . $e->getMessage();
            }

          }

foreach ($sender as $key => $value)
            {
             echo $value .': ';
             countfrom($service,$_SESSION['emaile'],$value)  ;
             echo '<br/>';
            }

-编辑

我已经尝试了一个新的解决方案,它似乎更接近我正在寻找的东西。这个问题现在来自Google,它返回了一些奇数的returns _ resultestimatsize:

代码语言:javascript
运行
复制
<?
  require_once '../../vendor/autoload.php';
  session_start();
  $client = new Google_Client();
  $client->setAuthConfigFile('../../client_secrets.json');
  $client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
  $client->addScope(Google_Service_Gmail::GMAIL_READONLY);
  $client->setAccessType("offline");
  $client->setApprovalPrompt('force');
  $client->setAccessToken($_SESSION['token']);
  $service = new Google_Service_Gmail($client);

  $sender_array[] = 'sender1@sender.com';
  $sender_array[] = 'sender2@sender.com';
  $sender_array[] = 'sender3@sender.com';
  $sender_array[] = 'sender4@sender.com';

  foreach ($sender_array as $key => $expeditor)
  {

    $optParamsamz1['q'] = "From: '".$expeditor."' is:read  "; 
    $optParamsamz2['q'] = "From: '".$expeditor."'   "; 

    echo $expeditor.": ".$service->users_messages->listUsersMessages('me',$optParamsamz1)->getResultSizeEstimate() . "
                       ".$service->users_messages->listUsersMessages('me',$optParamsamz2)->getResultSizeEstimate(); 
    echo "<br>";
  }

?>

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 20:47:12

labels.get()在这个用例中恐怕帮不上什么忙。它只适用于标签,所以你可以很容易地从INBOXCHAT获取已读/未读,但如果你想从example@gmail.com发送的所有邮件中获取所有已读/未读,则没有帮助。

不过,另一种解决方案相当便宜:

使用查询+ AND is:unread列出消息,第二个包含相同查询+的消息。响应包含一个nextPageToken,您有100+已读/未读。如果不包含nextPageToken,则有response.messages.length数量的已读/未读邮件。

示例

请求未读

代码语言:javascript
运行
复制
q = from:info@berniesanders.com AND is:unread

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=from%3Ainfo%40berniesanders.com+AND+is%3Aunread&access_token={YOUR_API_KEY}

响应

代码语言:javascript
运行
复制
{
 "messages": [
  {
   "id": "1523144d6e3feb2e",
   "threadId": "1523144d6e3feb2e"
  },
  {
   "id": "15227d879ccb601f",
   "threadId": "15227d879ccb601f"
  }, ...
}
// No nextPageToken => response.messages.length unread = 22 unread

请求不是未读

代码语言:javascript
运行
复制
q = from:info@berniesanders.com AND -is:unread

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=from%3Ainfo%40berniesanders.com+AND+-is%3Aunread&access_token={YOUR_API_KEY}

响应

代码语言:javascript
运行
复制
{
 "messages": [
  {
   "id": "1522d4af39d7eec6",
   "threadId": "1522d4af39d7eec6"
  },
  {
   "id": "1521d6f3dbeaf886",
   "threadId": "1521d6f3dbeaf886"
  }, ...
  "nextPageToken": "32436546446"
}
// nextPageToken in response => 100+ read

您可以更进一步,继续使用nextPageToken列表,直到响应中没有nextPageToken,然后将所有结果加在一起,但对于您的用例来说,这可能会变慢或效率低下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34740986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档