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

Move all threads older than X with gmail api

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

在 Gmail 网络 UI 中,您可以通过搜索 "in:inbox before:2012/01/01"、select 全部,然后从下拉列表中搜索 "move" 来完成此操作。

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

代码片段/示例或 link api 文档的相关部分的奖励积分。

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

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

从您的收件箱中获取在给定日期之前收到的所有线程 ID。

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) 之前处于活动状态的所有线程。

一一修改。删除收件箱标签并添加存档标签

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

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

同样,这可以在 batch request 中完成,但仍会算作许多单独的。

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