应用脚本GmailApp.search与gmail界面搜索之间存在不一致

时间:2015-07-07 06:17:35

标签: google-apps-script gmail

我正在尝试构建一个谷歌应用脚​​本,将从在线表单收到的邮件导入电子表格。

我使用两个标签:One" to_process"由gmail过滤器添加,另一个"已处理"在将电子邮件添加到工作表后,此脚本添加 我正在搜索所有有" to_process"的电子邮件。但不是"已处理"使用搜索查询'标签:to_process!label:在:all'

中处理

我让它部分工作(参见下面脚本的核心)
我使用脚本编辑器运行函数运行脚本。

问题是在gmail界面中使用相同的查询我收到了100多封电子邮件,但是在脚本的日志中我得到了6,并且它们都被处理了。 我错过了什么吗?

function extractInfo() {
  var step = 30;
  var max = 500;
  var currentStep = 0;
  while(max--) {
    var threads = GmailApp.search('label:to_process !label:processed in:all', currentStep++ * step, step);
    if(threads.length == 0) break;
    Logger.log("-------- found threads: " + threads.length);
    var threadId = threads.length;

    while(threadId--) {
      var thread = threads[threadId];
      thread.refresh();
      if(hasLabel(thread, "processed")) {
        Logger.log("was processed: " + thread.getPermalink())
        continue;
      }
      if(!hasLabel(thread, "to_process")) {
        Logger.log("isn't mark to process: " + thread.getPermalink())
        continue;
      }
      var messages = thread.getMessages(); 
      var messageId = messages.length;
      while(messageId--) {
        var message = messages[messageId];
        var row = extractMessageData(message);
        sheet.appendRow(row);
        GmailApp.markMessageRead(message);
      }
      threads[threadId].addLabel(processedLabel);
    }
  }
}

function hasLabel(thread, name) {
  var labels = thread.getLabels();
  var l = labels.length;
  while(l--) {
    if(labels[l].getName() == name) {
      return true;
    }
  }
  return false;
}

1 个答案:

答案 0 :(得分:0)

经过多次追踪和错误,我部分地想出了这个。

我在gmail中看到的ui实际上是消息,而不是线程。但处理标签是每线程的事情。 我只是从给定标签中提取所有线程的所有消息,然后处理这些。

如果一个帖子有一个标签“已处理”,那并不意味着它的所有消息都被处理了,这是一个问题。

我在UI中看到的消息数量以及使用API​​获得的消息仍然存在不一致。