导入邮件后,如何获取脚本以获取电子邮件? (忽略脚本已调用的电子邮件)

时间:2019-08-02 00:59:01

标签: google-apps-script google-sheets

问题:每次运行脚本时,以前的相同电子邮件都会加载到电子表格中。鉴于我需要每周运行一次此脚本,因此我想忽略先前运行中已导入的电子邮件。

我认为需要在for循环中进行编辑,或者可能在添加之前添加if语句

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");

  var label = GmailApp.getUserLabelByName("Test Script");
  var threads = label.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].getPlainBody();
  var sub = messages[j].getSubject();
  var dat = messages[j].getDate();

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

    }

当前输出为: 电邮1 电邮2 电邮3 电邮1 电邮2 电邮3 电邮4 电邮1 电邮2 电邮3 电邮4 电子邮件5

但是我希望它只是添加新的电子邮件: 电邮1 电邮2 电邮3 +电子邮件4 +电子邮件5

1 个答案:

答案 0 :(得分:0)

一种简单的解决方案是检索邮件ID,并检查是否已将具有给定ID的邮件导入到工作表中。

这是您可以执行的操作:

function myFunction(){
 var messageArray=[];
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("Sheet1");
 var values=sheet.getDataRange().getValues();
 for (var k=0; k<values.length; k++){
   messageArray.push(values[k][0])  
  }
 var label = GmailApp.getUserLabelByName("testlabel");
 var threads = label.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].getPlainBody();
    var sub = messages[j].getSubject();
    var dat = messages[j].getDate();
    var id= messages[j].getId()
    if(messageArray.indexOf(id)==(-1)){
     ss.appendRow([id, msg, sub, dat])
     }
   }
  }
}