我有一个文件夹Archive
,我希望在给定日期之前存储我的所有电子邮件。
在Gmail网页用户界面中,您可以通过以下方式执行搜索:" in:inbox:2012/01/01",选择全部,然后"移动"从下拉列表。
我想用gmail api做这件事。我怎么能做到这一点?我是否需要执行查询然后遍历每个线程来移动它?或者有更好的方法吗?
代码段/示例的加分点或指向api文档相关部分的链接。
答案 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允许的每秒执行更多请求。如果出现错误,请在代码中等待片刻,然后继续。