【问题标题】:Gmail API: removing all emails from a label with Google Apps Script is rather slowGmail API:使用 Google Apps 脚本从标签中删除所有电子邮件相当慢
【发布时间】:2020-12-28 18:48:12
【问题描述】:

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

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

但它相当慢(对于包含几百条消息的标签来说超过 1 分钟 30 分钟),因为它会迭代所有消息。

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

问题:如何在 Gmail 中使用 Google Apps 脚本有效地从标签中删除所有电子邮件?

【问题讨论】:

    标签: google-apps-script gmail gmail-api


    【解决方案1】:

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

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

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

    另外,Gmail API 通常比 GmailApp 更快

    在 Apps 脚本编辑器中 enabling 之后,您通常可以使用 users.messages.listusers.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");
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2017-07-27
      • 2016-05-05
      • 2023-03-04
      • 2013-04-06
      • 1970-01-01
      相关资源
      最近更新 更多