5

我想要一份来自 gmail 的所有昨天电子邮件的列表。我正在尝试使用谷歌应用程序脚本,通过在我的收件箱上写一个查询,然后使用 GmailApp.search 来处理它。gmail 中的 after: 和 before: 搜索查询返回了意想不到的结果,因为查询是根据发送邮件的 SMTP 服务器时间(即 google 的服务器)进行搜索的。因此,在不同的时区,搜索对我产生了不合适的结果。有没有办法使用时间标准搜索 gmail,以便我可以适应时区差异?

请注意,本地时区、日历、gmail 等已针对我的时区正确配置,因此我在收件箱中看到的电子邮件的时间正确。只有搜索会产生问题。

4

2 回答 2

11

经过反复试验,找到了一种方法,确实可以按时间搜索 gmail 电子邮件。请注意,Date()在 google apps 脚本中返回的是根据您的 timezone

下面的代码将在收件箱中返回所有前一天的电子邮件,假设new Date()根据您的时区给出日期和时间。除以 1000 是因为getTime()返回毫秒,而较新/较旧的搜索查询需要秒。

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);
于 2012-09-08T10:38:42.060 回答
2

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

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

于 2012-09-04T11:22:23.517 回答