列出电子邮件的所有标签到电子表格

List all Labels of an email to Spreadsheet

我的电子邮件通常分配了多个标签。我喜欢搜索带有特定标签的电子邮件,然后将它们列在电子表格中并显示也分配给该电子邮件的所有其他标签。

这是我目前所拥有的,无法弄清楚如何获得其他标签...

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();
  var threads = GmailApp.search("label:Test");

  for (var i=0; i<threads.length; i++)
  { 
    var messages = threads[i].getMessages();

    for (var j=0; j<messages.length; j++)
    {
      var sub = messages[j].getSubject();
      var from = messages[j].getFrom();
      var dat = messages[j].getDate();

      ss.appendRow([dat, sub, from])
    }
  }
} 

就 Apps 脚本而言,Gmail 标签应用于 线程 而不是单封邮件。 (在其他情况下这不一定是正确的,如 Web Apps post 详细信息)。

因此,您应该使用 Thread 对象的 getLabels 方法。然后对输出进行结构化,使每一行对应一个线程,而不是一条消息。这就是我在下面所做的。该脚本从每个线程中的第一条消息中获取 subject/from/date。第 4 列是以逗号分隔的标签列表,您搜索的标签除外。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var search_label = 'Test';
  var threads = GmailApp.search('label:' + search_label);

  var output = [];
  for (var i=0; i < threads.length; i++) { 
    var firstMessage = threads[i].getMessages()[0];
    var sub = firstMessage.getSubject();
    var from = firstMessage.getFrom();
    var dat = firstMessage.getDate();
    var labels = threads[i].getLabels();
    var otherLabels = [];
    for (var j = 0; j < labels.length; j++) {
      var labelName = labels[j].getName();
      if (labelName != search_label) {
        otherLabels.push(labelName);
      }
    }
    output.push([dat, sub, from, otherLabels.join(', ')]);
  }
  sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
} 

我不喜欢一次添加一行,而是收集双数组 output 并一次性全部插入。当然,您可以像在脚本中那样使用 appendRow 。那么你不一定需要一个逗号分隔的列表,

sheet.appendRow([dat, sub, from].concat(otherLabels));

会起作用。