1

我正在尝试使用 Apps 脚本在收件箱中搜索超过 10 分钟的邮件。

背景:我触发每 2 小时从工作表向某个人发送一个 xlsx。他们正在更新列表并将其发回给我。现在我想获取更新的文件并将其再次上传到工作表以相应地更新原始文件。该脚本运行良好,可以获取附件并将​​其作为工作表上传到我的驱动器。我的问题:它似乎抓取了最初触发的文件,而不是发送回给我的新更新文件(因此新文件中的更新丢失了)。

我尝试在 GmailApp.search 中添加不同的“搜索查询”,但它似乎对我不起作用:

  • 添加“-in:sent”
  • “来自:@mail.com” ...

var threads = GmailApp.search("newer_than:0.1h AND from:mail.com AND subject:Issue Log AND -label:processed AND -in:sent",0,10);

我试过“newer_than:0.1h”,但这似乎是不正确的。知道搜索最长 10 分钟的邮件是否会有所帮助?还有其他我可能在这里做错的建议吗?我真的没有想法了......

提前致谢!

4

2 回答 2

1

我认为您的问题需要一种不同的方法来获取您想要的电子邮件。但是,关于您提出的主要问题,目前无法获得超过 10 分钟的消息。您可以在此处找到有关搜索运算符的所有信息。虽然官方文档说Search for messages older or newer than a time period using d (day), m (month), and y (year)您也可以h(hour)在搜索中使用,但请记住,这些值必须是整数。

但是,如果您确实需要处理较小的时差,则有一种解决方法。您可以将当前时间与每条消息的时间进行比较。我让你一小段代码让你看得更清楚。

var threads = GmailApp.search("newer_than:1d") // change that query for the one that works for you
var now = new Date() // current time
  for (var i = 0; i < threads.length; i++) {
    message = threads[i].getMessages()[0]
    time = message.getDate()
    subject = message.getSubject()
    diff = (now-time)/60000 // milliseconds to minutes 
    Logger.log('Message with subject ' + subject + ' has been received ' + diff + ' minutes ago');
  }

无论如何,无论相关的时间段如何,您都应该能够使用适当的搜索运算符获得所需的消息。

于 2020-12-16T15:24:43.697 回答
0

我认为您的问题是您没有正确处理线程中的消息。我正在附加另一段代码,以便您可以获取线程中的每条消息及其信息,例如主题、正文和附件。这样你就可以找到你需要的文件。

  for (var i = 0; i < threads.length; i++) {
    messages = threads[i].getMessages()
    for (var j = 0; j < messages.length; j++) {
      subject = messages[j].getSubject()
      body = messages[j].getPlainBody()
      attachment = messages[j].getAttachments()
    }
  }
于 2020-12-17T14:49:14.160 回答