Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用时间戳过滤Gmail_Google Apps Script_Google Sheets_Gmail Api - Fatal编程技术网

Google apps script 使用时间戳过滤Gmail

Google apps script 使用时间戳过滤Gmail,google-apps-script,google-sheets,gmail-api,Google Apps Script,Google Sheets,Gmail Api,我刚刚涉足谷歌应用程序脚本;我想问一下我的方向是否正确,以及如何在脚本中操纵时间 我正在努力在Google应用程序脚本中复制时间值,基本上我能够提取发送的每封电子邮件的时间戳,但我只想将最近的电子邮件信息粘贴到电子表格中,例如,在脚本运行时间30分钟内。这是为了避免提取重复信息 不确定这里是否有currentTime()函数,或者我必须创建一个新的Date()对象并从中进行一些计算。尝试了一些变化,但似乎没有任何效果 如果您能帮助我们朝着正确的方向前进,我们将不胜感激。谢谢 function g

我刚刚涉足谷歌应用程序脚本;我想问一下我的方向是否正确,以及如何在脚本中操纵时间

我正在努力在Google应用程序脚本中复制时间值,基本上我能够提取发送的每封电子邮件的时间戳,但我只想将最近的电子邮件信息粘贴到电子表格中,例如,在脚本运行时间30分钟内。这是为了避免提取重复信息

不确定这里是否有currentTime()函数,或者我必须创建一个新的Date()对象并从中进行一些计算。尝试了一些变化,但似乎没有任何效果

如果您能帮助我们朝着正确的方向前进,我们将不胜感激。谢谢

function getDetails(){
  var DEST_URL = "SHEET_URL"; //redacted for sensitivity
  var DEST_SHEETNAME = "Test";
  
  var destss = SpreadsheetApp.openByUrl(DEST_URL);
  var destSheet = destss.getSheetByName(DEST_SHEETNAME);
  
  var threads = GmailApp.search("FILTERS"); //filter settings redacted for sensitivity

  for(var i = 0; i < threads.length; i++){
    var messages=threads[i].getMessages();  
    for(var j =0; j < 1; j++){ //only take first message in thread
      var message = messages[j];
      var subject = message.getSubject() ;
      var sentTimeStamp = message.getDate();

      if(sentTimeStamp is within last 30minutes as of script run time){ //this is where i need help
          var delimitString = subject.split("is sent");
          var detailName = delimitString[0];

          var lastRow = destSheet.getLastRow();
          destSheet.getRange(lastRow + 1,1).setValue(detailName);
          destSheet.getRange(lastRow + 1,2),setValue(sentTimeStamp);
      }
    }
  }
}
函数getDetails(){ var DEST_URL=“SHEET_URL”;//针对敏感性进行了修订 var DEST_SHEETNAME=“测试”; var destss=SpreadsheetApp.openByUrl(DEST_URL); var destSheet=destss.getSheetByName(DEST_SHEETNAME); var threads=GmailApp.search(“FILTERS”);//为敏感度编辑了过滤器设置 对于(var i=0;i您可以将
时间戳
转换为毫秒秒,然后与“30秒前”的值进行比较 样本:

var sentTimeStamp=message.getDate();
var now=新日期();
var ThirtyMinutesAgo=now-30*60*1000;
if(sentTimeStamp.getTime()
参考资料:

另一个方法是查询您在过去30分钟内收到的电子邮件。 说明:

function getDetails(){
  var DEST_URL = "SHEET_URL"; //redacted for sensitivity
  var DEST_SHEETNAME = "Test";
  
  var destss = SpreadsheetApp.openByUrl(DEST_URL);
  var destSheet = destss.getSheetByName(DEST_SHEETNAME);
  
//  var threads = GmailApp.search("FILTERS"); //filter settings redacted for sensitivity
  
  // new code
  var ThirtyMinutesAgo = new Date(); 
  ThirtyMinutesAgo.setMinutes(ThirtyMinutesAgo.getMinutes() - 30);
  const queryString = `"FILTERS" newer:${Math.round(ThirtyMinutesAgo.getTime()/1000)}`
  const threads = GmailApp.search(queryString); // threads the last 30 minutes
  //

  for(var i = 0; i < threads.length; i++){
    var messages=threads[i].getMessages();  
    for(var j =0; j < 1; j++){ //only take first message in thread
      var message = messages[j];
      var subject = message.getSubject() ;
      var sentTimeStamp = message.getDate();

          var delimitString = subject.split("is sent");
          var detailName = delimitString[0];

          var lastRow = destSheet.getLastRow();
          destSheet.getRange(lastRow + 1,1).setValue(detailName);
          destSheet.getRange(lastRow + 1,2),setValue(sentTimeStamp);
      }
    }
  }
}
您可以在
GmailApp.search
功能中以查询的方式获取最近30分钟前收到的电子邮件。查看此内容以了解可以使用哪些过滤器

这将获取您在过去30分钟内收到的最后一封带有关键字“过滤器”的电子邮件

var ThirtyMinutesAgo = new Date(); 
ThirtyMinutesAgo.setMinutes(ThirtyMinutesAgo.getMinutes() - 30);
const queryString = `"FILTERS" newer:${Math.round(ThirtyMinutesAgo.getTime()/1000)}`
const threads = GmailApp.search(queryString); // threads the last 30 minutes
这种方法更有效,原因有二:

  • 使用
    for
    循环可以迭代的数据(线程)更少

  • 您不需要在每个线程上应用和
    if
    语句

  • 解决方案:

    function getDetails(){
      var DEST_URL = "SHEET_URL"; //redacted for sensitivity
      var DEST_SHEETNAME = "Test";
      
      var destss = SpreadsheetApp.openByUrl(DEST_URL);
      var destSheet = destss.getSheetByName(DEST_SHEETNAME);
      
    //  var threads = GmailApp.search("FILTERS"); //filter settings redacted for sensitivity
      
      // new code
      var ThirtyMinutesAgo = new Date(); 
      ThirtyMinutesAgo.setMinutes(ThirtyMinutesAgo.getMinutes() - 30);
      const queryString = `"FILTERS" newer:${Math.round(ThirtyMinutesAgo.getTime()/1000)}`
      const threads = GmailApp.search(queryString); // threads the last 30 minutes
      //
    
      for(var i = 0; i < threads.length; i++){
        var messages=threads[i].getMessages();  
        for(var j =0; j < 1; j++){ //only take first message in thread
          var message = messages[j];
          var subject = message.getSubject() ;
          var sentTimeStamp = message.getDate();
    
              var delimitString = subject.split("is sent");
              var detailName = delimitString[0];
    
              var lastRow = destSheet.getLastRow();
              destSheet.getRange(lastRow + 1,1).setValue(detailName);
              destSheet.getRange(lastRow + 1,2),setValue(sentTimeStamp);
          }
        }
      }
    }
    
    函数getDetails(){ var DEST_URL=“SHEET_URL”;//针对敏感性进行了修订 var DEST_SHEETNAME=“测试”; var destss=SpreadsheetApp.openByUrl(DEST_URL); var destSheet=destss.getSheetByName(DEST_SHEETNAME); //var threads=GmailApp.search(“FILTERS”);//为敏感度编辑了过滤器设置 //新代码 var ThirtyMinutesAgo=新日期(); thirtimutesago.setMinutes(thirtimutesago.getMinutes()-30); const queryString=`“FILTERS”更新:${Math.round(ThirtyMinutesAgo.getTime()/1000)}` const threads=GmailApp.search(queryString);//最后30分钟的线程数 // 对于(var i=0;i
    Hi Marios感谢分享一种更有效的方法!当前我的查询字符串有一个针对发件人和主题中文本的筛选器(例如“发件人:abc@gmail.com主题:电子邮件检查”)。随着时间的推移,我不得不在里面加上“after:”语法。你分享的东西还能用吗?是的!它将百分之百地起作用。您可以放置当前选择,然后使用我提到的加法@lyk。您可以执行如下操作:const queryString=old+`newer:${Math.round(thirtimutesago.getTime()/1000)}`where
    old
    是您当前的选择@lyk