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

时间:2016-11-28 20:09:38

标签: google-apps-script google-sheets gmail

我喜欢通过电子邮件标签将电子邮件的主题/发件人/日期/ ID记录到电子表格中,然后添加"录制的"一旦将电子邮件记录到电子表格中,就会将其标记为电子邮件。我喜欢再次运行脚本,而无需重新录制带有标签的电子邮件" 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是保留现有标签。

2 个答案:

答案 0 :(得分:0)

您可以尝试用以下代码替换var threads:

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

这将搜索所有带有测试但未记录的标签 你不再需要var searchlabel了。

答案 1 :(得分:0)

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

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);
  }
}