将具有特定Gmail标签的电子邮件复制到电子表格,不会重复

时间:2015-06-10 16:12:22

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

我正在尝试制作一个脚本,该脚本会在特定标签中收取电子邮件并将其放入Google表格中。我现在正在使用这个功能:

function getMessagesWithLabel() {
 var destArray = new Array();
  var threads = GmailApp.getUserLabelByName('Facebook').getThreads(0,10);

  for(var n in threads){
        var msg = threads[n].getMessages();
        var destArrayRow = new Array();
        destArrayRow.push('thread has '+threads[n].getMessageCount()+' messages');
          for(var m in msg){
                     destArrayRow.push(msg[m].getSubject());
           }
  destArray.push(destArrayRow);           
        }
Logger.log(destArray);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
if(ss.getLastRow()==0){sh.getRange(1,1).setValue('getMessagesWithLabel() RESULTS')};
sh.getRange(ss.getLastRow()+1,1,destArray.length,destArray[0].length).setValues(destArray)
}

这适用于抓取Facebook'中的所有电子邮件。标签,但每次都抓取所有电子邮件,每次运行时都会创建重复的邮件。我希望每当新的一行被放入Facebook' Facebook时,我就会创建一条新的专线。标签

1 个答案:

答案 0 :(得分:1)

您可以探索四种想法。

  1. 使用GmailMessage.getDate()过滤掉您已处理的邮件。存储脚本在ScriptProperties中运行的时间,并在下次将其重新加载为阈值。
  2. 每条消息都有自己唯一的ID,因此记录下这些消息会为您提供查找的密钥。我认为这比第一个选项要慢,但如果你将关键值存储在ScriptProperties中可能会快得多。
  3. 使用search()匹配标签和时间,再次跟踪脚本在ScriptProperties中运行的时间。

    var threads = GmailApp.search('label:"Facebook" after:"2015/6/1"');
    

    这将为线程提供在给定日期之后添加的任何消息,但线程也将在该日期之前有消息。您可能仍然需要使用其中一个早期选项来过滤掉这些选项。 (除非,正如您在评论中指出的那样,您的主题将没有回复,因此只有一条消息。)

  4. 处理完一个主题后,删除用于对其进行分类的标签。

    var oldLabel = GmailApp.getUserLabelByName('Facebook');
    var newLabel = GmailApp.getUserLabelByName('Facebook-processed');
    var threads = oldLabel.getThreads(0,10);
    for(var n in threads){
      ...
      threads[n].removeLabel(oldLabel).addLabel(newLabel);
    }