如何在Gmail API中获取特定月份的电子邮件数量

时间:2017-10-14 15:20:36

标签: php email gmail gmail-api

我正在使用Gmail API来获取用户电子邮件,并在图表上显示一个月内的电子邮件数量。但循环遍历每封电子邮件以计算电子邮件的效率并不高。有没有其他方法我可以取这个数?例如,9月份发送或接收了多少封电子邮件?

当然,我们可以使用after:或之前:过滤器,但如果我必须获取全年的计数,则需要12个API调用。如果有任何其他方式我可以在1次通话中获取计数?或任何其他有效的方法?感谢。

1 个答案:

答案 0 :(得分:1)

我认为您唯一的选择是列出包含查询after:<start_date> before:<end_date>的邮件,直到响应中没有nextPageToken,然后记录总计数:

function getMessageCount($service, $userId, $query) {
  $pageToken = NULL;
  $messages = array();
  $opt_param = array(
    'q' => $query
  );
  do {
    try {
      if ($pageToken) {
        $opt_param['pageToken'] = $pageToken;
      }
      $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);

  return count($messages);
}

如果您希望获得消息之间的数量,例如: Friday, September 1, 2017 12:00:00 AMSunday, October 1, 2017 12:00:00 AM,您可以这样称呼它:

$count = getMessageCount($service, 'me', 'after:1504224000 before:1506816000');
相关问题