【问题标题】:Google Script for Gmail not consistentGmail 的 Google 脚本不一致
【发布时间】:2018-03-29 15:46:21
【问题描述】:

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

然后,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.");
}

【问题讨论】:

标签: google-apps-script gmail


【解决方案1】:

原来这个错误与 Javascript 相关。

我忘记了 regex.exec 需要循环直到返回一个空值,然后它才会开始一个新的输入。

修复是删除 break :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多