GmailApp.search()似乎无法正确处理数据

时间:2017-07-11 08:50:44

标签: google-apps-script gmail

根据一个特定主题,我试图获取昨天的电子邮件。 通常,我在午夜时分做的事情我会计算特定主题的电子邮件数量,并通过Google脚本发送邮件。在3点钟,我触发一个删除触发器,开始删除前一天的邮件。 所以,我确保前一天没有任何邮件。

var yesterday = "2017/7/10";
  var today = "2017/7/11";
var query = "after:"+yesterday+" before:"+today+" subject: abcd";

不计算我在函数

下面写的电子邮件
function getEmailCount(query) {
  var threads = GmailApp.search(query, 0, 500);
  Logger.log(threads);
  var total = 0;

  for (var i = 0; i < threads.length; i++) {
    var messagesInThread = threads[i].getMessageCount();
    var msg = threads[i].getMessages()[0].getSubject()
    total = total + messagesInThread;
  }
  Logger.log(msg)
  Logger.log("Query %s", query);
  Logger.log("No. Of Threads %s", threads.length);
  Logger.log("No. Of Emails %s", total);
  return total;
}

当我使用上述主题检查Gmail中的电子邮件时,我只获得了8封,但我的脚本返回了25封邮件。任何帮助都将得到极大的帮助。

1 个答案:

答案 0 :(得分:1)

有趣的是,GMailApp确实会在Gmail网络应用不包含的搜索参数之外的线程内返回一些电子邮件。由于我正在查看的特定电子邮件的性质,我怀疑这是一个与时区相关的事情。

对您的代码进行一些修改可以添加一些检查,以区分原始结果和Web应用程序免费提供的一些UX。此外,这会过滤严格遵守搜索条件的线程和消息。

function getEmailCount(query) { 
  var yesterday = "2017/06/07",
      today = "2017/06/08",
      yesterdayDate = new Date(yesterday),
      todayDate = new Date(today);

  query = query || "after:" + yesterday + " before:" + today + "";

  var threads = GmailApp.search(query).reduce(function(validThreads, thread, idx) {

    var messages = thread.getMessages().reduce(function(messages, message, idx) {
      var isChat = message.isInChats(),
          isDeleted = message.isInTrash(),
          sent = message.getDate();

      if (!isDeleted && !isChat && sent < todayDate && sent > yesterdayDate) {
        messages.push(message.getSubject());
      }      

      return messages;
    }, []);

    if (messages.length > 0) { validThreads[idx] = messages; }

    return validThreads;
  }, {});

  var totalMessages = Object.keys(threads).reduce(function(count, thread) {
    return count += threads[thread].length;
  }, 0);

  Logger.log("Query: %s", query);
  Logger.log("No. Of Threads: %s", Object.keys(threads).length);
  Logger.log("No. Of Emails: %s", totalMessages);

  return totalMessages; 
}