Gmail API:用谷歌应用程序脚本从标签上删除所有电子邮件相当缓慢



我用它来删除标签中的所有电子邮件:

function emptyLabel() {
var label = GmailApp.getUserLabelByName("label_name");
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++) {
threads[i].removeLabel(label);
}
} 

但是它相当慢(对于一个有几百条消息的标签来说,超过1min30(,因为它会迭代所有消息。

另一种选择是完全删除标签,然后重新创建,但这会更改该标签的Gmail GUI设置(颜色等(,所以这不是一个真正的选项。

问题:如何使用谷歌应用程序脚本在Gmail中有效地从标签中删除所有电子邮件

有比传统for更快的循环-请参阅此处

您可以通过将代码修改为来提高速度

function emptyLabel() {
var label = GmailApp.getUserLabelByName("label_name");
var threads = label.getThreads();
threads.forEach(function(thread){
thread.removeLabel(label);
})
} 

此外,Gmail API通常比GmailApp快

在应用程序脚本编辑器中启用后,您通常可以通过users.messages.list和users.messages的组合来加快请求速度。batchModify:

function myFunction() {
var messages = Gmail.Users.Messages.list("me", {"labelIds":"label_name"}).messages;
var ids = [];
messages.forEach(function(message){ids.push(message.id)});
Gmail.Users.Messages.batchModify({"ids":ids, "removeLabelIds":["label_name"]}, "me");
}

最新更新