使用gmail api移动早于X的所有线程

时间:2015-06-23 19:52:12

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

我有一个文件夹Archive,我希望在给定日期之前存储我的所有电子邮件。

在Gmail网页用户界面中,您可以通过以下方式执行搜索:" in:inbox:2012/01/01",选择全部,然后"移动"从下拉列表。

我想用gmail api做这件事。我怎么能做到这一点?我是否需要执行查询然后遍历每个线程来移动它?或者有更好的方法吗?

代码段/示例的加分点或指向api文档相关部分的链接。

1 个答案:

答案 0 :(得分:2)

你是对的钱。您需要获取每个threadId并一次移动一个(可以通过批处理请求来实现,但无论如何它们将被视为对您的配额的单独请求)。可能是另一个我不知道的API的解决方案。

但是使用Gmail API,您可以执行以下操作。

从您的收件箱中获取在指定日期之前收到的所有threadIds。

GET https://www.googleapis.com/gmail/v1/users/me/threads?fields=nextPageToken%2Cthreads%2Fid&q=n%3Ainbox+before%3A2012%2F01%2F01&key={YOUR_API_KEY}

这将为您提供以下数据:

{
 "threads": [
  {
   "id": "12345"
  },
  {
   "id": "123456"
  },
  {
    .
    .
    .
  }
 ],
 "nextPageToken": "112233"
}

在下一个请求中使用nextPageToken获取更多threadIds。

GET https://www.googleapis.com/gmail/v1/users/me/threads?pageToken=112233&fields=nextPageToken%2Cthreads%2Fid&q=n%3Ainbox+before%3A2012%2F01%2F01&key={YOUR_API_KEY}

重复上一步,直到响应中没有nextPageToken。

您现在拥有在给定日期(2012/01/01)之前处于活动状态的所有主题。

逐个修改它们。删除INBOX标签并添加存档标签

POST https://www.googleapis.com/gmail/v1/users/me/threads/12345/modify?key={YOUR_API_KEY}

{
 "addLabelIds": [
  "Archive"
 ],
 "removeLabelIds": [
  "INBOX"
 ]
}

同样,这可以在batch request中完成,但仍会计入多个单独的数字。

根据您拥有的线程数量,您最终可能会比Google允许的每秒执行更多请求。如果出现错误,请在代码中等待片刻,然后继续。