在Gmail中按时间搜索电子邮件

5
我想要一个昨天在gmail中所有的邮件列表。我正在使用谷歌应用脚本处理它,通过在我的收件箱上编写查询,然后使用GmailApp.search。在gmail中的after:和before:搜索查询返回的结果不是预期的,因为该查询是基于邮件发送的SMTP服务器时间进行搜索(这是谷歌的服务器)。因此,由于处于不同的时区,搜索对我来说产生了不适当的结果。有没有一种方法可以使用时间标准搜索gmail,以便我可以适应时区差异?
请注意,我的本地时区、日历、gmail等都已正确配置为我的时区,因此我收件箱中看到的电子邮件时间是正确的。只有搜索会出现问题。

你能否通过一个示例来解释一下你的期望?根据文档before:after:操作符使用日期(年/月/日)而不是时间。即不考虑时区。 - megabyte1024
是的,你说得对,因此我无法想出一个方法来按照我的时区确切地获取最近几天的电子邮件。例如,如果今天是9月5日,我希望在我的本地时区内获取从9月4日00:00:00到9月5日00:00:00的所有电子邮件。例如:在gmail中搜索after:2012/09/04 before:2012/09/05可以给出一些4日和一些5日的邮件,但理想情况下我希望获得全部的4日的邮件。请注意,我比gmail邮件存储时区提前12:30个小时。 - bhatiaravi
2个回答

11

经过一些试错,我找到了一种方法,确实可以按时间搜索 Gmail 邮件。请注意,Google 应用脚本返回的 Date() 是根据您所在时区的时间。

以下代码将返回收件箱中前一天的所有邮件,假设 new Date() 根据您的时区提供日期和时间。通过除以1000来将毫秒转换为秒,因为较新/较旧的搜索查询期望使用秒。

var month = new Date().getMonth();
var date = new Date().getDate();
var year = new Date().getFullYear();
var time1 = new Date(year, month, date, 0, 0, 0).getTime();
var time2 = time1 - 86400000;
var query = "newer:" + time2/1000 + " older:"  + time1/1000 + " in:inbox";
var conversations = GmailApp.search(query);

从来没有想到会这样。谢谢!本以为会有比按天更精确的方法。 - chug2k

2

你能给出你使用的确切搜索字符串以及如何构建起始日期和结束日期吗?您可以使用Utilities.formatDate()函数将日期字符串格式化为您所在时区。

另一种解决方案是获取所有邮件(可能是100封左右),然后丢弃那些不符合你感兴趣的时间段的邮件。


日期字符串并没有帮助,因为输出格式毕竟是一个日期,并且与标准的“after:”和“before:”搜索方式相同。我打算在Google Apps脚本中执行以下操作:query = "after:" + startTime + "before: " + endTime + " in:inobx",然后使用GmailApp.search函数进行查询。是的,我已经考虑过获取所有电子邮件并丢弃一些的想法,但我正在寻找更好的解决方案。 - bhatiaravi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接