如果存在 Gmail 标签,则停止记录到电子表格

Stop recording to spreadsheet if Gmail Label exist

我喜欢通过标签将电子邮件的 Subject/Sender/Date/ID 记录到电子表格中,并在将电子邮件记录到电子表格后向其添加 "Recorded" 标签。我喜欢再次 运行 脚本,而无需重新录制带有标签 "Recorded"

的电子邮件

我可以将其记录到电子表格并添加标签。但是我 运行 脚本中的所有内容都会再次抓取所有内容。

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();
  var searchlabel = GmailApp.getUserLabelByName("Test");
  var newlabel = GmailApp.getUserLabelByName("Recored");
  var threads = searchlabel.getThreads();

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

    for (var j=0; j<messages.length; j++)
    {
      var msg = messages[j].getBody();
      var sub = messages[j].getSubject();
      var from = messages[j].getFrom();
      var dat = messages[j].getDate();
      var id = messages[j].getId();
      var current = new Date();

      ss.appendRow([current, dat, sub, id, from])
    }
      threads[i].addLabel(newlabel);
  }
}

我搜索了论坛,所有内容都倾向于建议删除现有标签并重命名为其他标签。但我想要的enter code here是保留现有的标签。

您可以尝试将 var threads 替换为:

var threads = GmailApp.search('label:(Test -Recored)');

这会搜索所有带测试但不带 Recored 的标签。
您将不再需要 var searchlabel。

您应该使用搜索方法,因为它可以让您过滤属于特定标签的电子邮件。这是修改后的版本。

function myFunction() {

  var ss = SpreadsheetApp.getActiveSheet();
  var searchlabel = GmailApp.getUserLabelByName("Test");
  var recordlabel = GmailApp.getUserLabelByName("Recorded"); 
  var threads = GmailApp.search("label:Test -label:Recorded");

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

    for (var j=0; j<messages.length; j++)
    {
      var msg = messages[j].getBody();
      var sub = messages[j].getSubject();
      var from = messages[j].getFrom();
      var dat = messages[j].getDate();
      var id = messages[j].getId();
      var current = new Date();

      ss.appendRow([current, dat, sub, id, from])
    }
      threads[i].addLabel(recordlabel);
  }
}