【问题标题】:How do I get script to get emails after ones already imported? (ignore emails already called by script)如何在已导入电子邮件后获取脚本以获取电子邮件? (忽略已被脚本调用的电子邮件)
【发布时间】:2019-08-02 00:59:01
【问题描述】:

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

我认为需要在 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

【问题讨论】:

  • 要么让你的脚本检查电子表格中是否已经存在电子邮件,要么使用某种方式过滤你正在处理的电子邮件(例如添加/删除标签)
  • 您可能还会发现使用GmailApp.search() 的一些价值

标签: google-apps-script google-sheets


【解决方案1】:

一个简单的解决方案是检索消息 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])
     }
   }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多