【问题标题】:Search mails newer than 10 minutes with Apps Script使用 Apps 脚本搜索超过 10 分钟的邮件
【发布时间】:2020-12-16 11:17:32
【问题描述】:

我正在尝试使用 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 分钟的邮件是否会有所帮助?还有其他我可能在这里做错的建议吗?我真的没办法了……

提前致谢!

【问题讨论】:

    标签: google-apps-script gmail


    【解决方案1】:

    我认为您的问题需要一种不同的方法来获取您想要的电子邮件。但是,关于您提出的主要问题,目前无法获得超过 10 分钟的消息。您可以找到有关搜索运算符here 的所有信息。 虽然官方文档说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');
      }
    

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

    【讨论】:

    • 感谢您的方法!我会尝试以某种方式使用它。我也这么认为,它只会使用我正在搜索的邮件(我专门使用来自:“mailaddress@mail.com”的搜索运算符)......但不幸的是,它总是会使用线程中最旧的邮件。由于我使用我的帐户触发初始工作表,它会出现在“已发送”中,然后当我收到答案时,它会作为最旧的邮件出现在线程中并使用那里的工作表......我还尝试移动已发送的邮件马上去垃圾箱,但它仍然没有用。
    【解决方案2】:

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

      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()
        }
      }
    

    【讨论】:

    • 你说得有道理,实际上我确实添加了另一个循环,因为我注意到无论我如何过滤以及过滤什么,它总是进入整个线程并提取线程的第一个数据。因此,当我添加第二个循环以遍历消息时,我实际上可以搜索更多指定信息:)
    • 如果您觉得我的回答有用,请将其标记为已接受,以便社区知道。
    猜你喜欢
    • 2016-06-06
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多