统计 google 张 gmail 中的电子邮件

Counting emails in gmail in google sheets

也许这是一个基本问题,但我可以找到答案。如何自动计算收到的带有特定标签的信件。也就是说,我想 post 一个触发器,这样每天早上 01-02 点,就会计算昨天的信件。所以它每天都会填满。示例文件:

https://docs.google.com/spreadsheets/d/1jqtHVwab5qqhGgfpFt4J5uQraZU0BIzD2B6mNT9mX0w/edit

这对我有用:

function countemailwithalabel() {
   const ts = GmailApp.search('label: qs-services-ups');
   let msgs = 0;
   ts.forEach(t => msgs+=t.getMessageCount());
   Logger.log(msgs);//6
}

您可以使用此示例代码(只需替换 label):

function countEmailyesterday(){

  const secondsSinceEpoch = (date) => Math.floor(date.getTime() / 1000);
  const after = new Date();
  const before = new Date();


  //Subtract 1 day 
  after.setDate(after.getDate()-1);
  before.setDate(before.getDate()-1);

  //Get -1 day  date string
  var timezone = Session.getScriptTimeZone();
  var todayStr = Utilities.formatDate(after,timezone,"dd.MM.yyyy");
  Logger.log(todayStr);

  //Set time to 00:00 and 23:59
  after.setHours(00, 00, 0, 0);
  before.setHours(23, 59, 0, 0);
  
  //Label
  const label = "Гимнастика Диана";
  const query = `label:${label} after:${secondsSinceEpoch(after)} before:${secondsSinceEpoch(before)}`;
  Logger.log(query);

  var threads = GmailApp.search(query);
  var count = threads.length;
  Logger.log(count);

  //Find the matching date's row and write the email count in column B
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Monitor');
  var dateValues = sheet.getRange('A1:A').getDisplayValues().flat();
  Logger.log(dateValues);
  //find matched index
  var index = dateValues.indexOf(todayStr);
  if(index!=-1){
    Logger.log(index);
    sheet.getRange(index+1,2).setValue(count);
  }
}

它有什么作用?

  1. 根据今天的日期创建 beforeafter 日期对象。
  2. 以此格式创建今天的日期字符串 dd-MM-yyyy
  3. 从每个日期对象中减去 1 天。然后将before的时间设置为23:59:00,而after的时间设置为00:00:00
  4. 使用 Gmail search operators label:(your label) after:(Epoch datetime) before:(Epoch datetime)
  5. 创建 gmail 查询字符串
  6. 使用GmailApp.search(query) which will return an array of GmailThread
  7. 获取数组的长度。
  8. 使用 Range.getDisplayValues() 将 A 列中的日期值作为字符串获取。使用 array.flat() 将日期值更改为一维数组
  9. array.indexOf()求今天匹配日期的数组索引
  10. 使用数组索引(添加 +1 偏移量,因为数组是从零开始的)作为 Sheet.getRange(row,col) 中的行索引,并根据电子邮件计数设置列 B 值。

输出:

附加参考: