Google Script for Gmail不一致

时间:2018-03-29 15:46:21

标签: google-apps-script gmail

我有一个过滤器,可以在所有收到的电子邮件中添加“未处理”标签。

然后,Google脚本会每分钟搜索具有“未处理”标签的任何电子邮件主题,处理这些消息,并有条件地将标签应用于相应的主题。

我不知道我做错了什么,但只有一些处理过的线程得到了标签。它随机工作......例如,6个线程中只有3个获得了标签,或者3个中的1个。

我必须重新应用“未处理”标签,然后再次运行脚本来修复它们。

function processGmail() {
  var startTime = new Date().getTime();
  var mailerRegex = /X-Mailer:(.*)/g;
  var scannerLabel = GmailApp.getUserLabelByName("Scanner");
  var unprocessedLabel = GmailApp.getUserLabelByName("unprocessed");
  var countMessages = 0;

  GmailApp.search("label:unprocessed").forEach(
    function(emailThread) {

      emailThread.getMessages().forEach(
        function(message) {

          var raw = message.getRawContent();
          var result;
          var doReturn = false;

          while((matches = mailerRegex.exec(raw)) !== null) { 
            if (matches.some(function(match){return match.indexOf('Canon MFP') >= 0;})) {
              emailThread.addLabel(scannerLabel);
              emailThread.moveToArchive();
              doReturn = true;
              break;
            }
          }

          emailThread.removeLabel(unprocessedLabel);
          ++countMessages;

          if (doReturn) {
            return;
          }
        }
      );
    }
  );

  var endTime = new Date().getTime();
  Logger.log("Processed " + countMessages + " in " + (endTime-startTime) + "ms.");
}

1 个答案:

答案 0 :(得分:1)

原来这个bug与Javascript有关。

我忘记了regex.exec需要循环,直到返回null,然后才会为新输入启动a-new。

该修复程序正在删除break:)