【发布时间】:2016-02-28 00:37:41
【问题描述】:
使用此处所述的标准查询格式 - https://support.google.com/mail/answer/7190 时,Gmail api 和 Gmail web ui 的结果有所不同。
该问题专门针对 after/before 和 newer/older 的参数。例如,以下 Gmail api 查询“after:2015/11/19 before:2015/11/20”与在 Gmail web ui 中运行相同查询相比,返回不同的结果。 Web ui 看起来正确,而 api 从第二天(20 日)返回电子邮件。可能是时区对话问题?
检查过去的问题我在这里看到了类似的东西how to use GMAIL API query filter for datetime(服务器将查询处理为 PST 时间)。如果是这种情况,可能值得更新文档或考虑可能的解决方案。
重现问题的步骤。
- 在 gmail 帐户中有一些涵盖以下日期的邮件。前后天数。
- 在 Gmail 网络用户界面中运行 after:2015/11/19 before:2015/11/20。
- 使用https://developers.google.com/gmail/api/v1/reference/users/messages/list 查询带有“after:2015/11/19 before:2015/11/20”的Gmail api 的q 参数
- 比较结果。 (在针对英国 Gmail 帐户运行这些步骤时,我遇到了不同之处)
应该只看到 19 日的电子邮件,但我在使用 api 时会看到 19 日和 20 日的电子邮件。 Web ui 按预期工作,仅返回日期为 19 日的电子邮件。
仅供参考:我还使用了其他查询参数,例如“from:example@example.com”与之前/之后或更新/旧参数结合使用。我想简化错误报告/问题。
另外:我使用名为 node-gmail-api 的节点模块进行的 api 查询。检查端点正在使用的代码是“消息”代码:
body: 'GET ' + api + '/gmail/v1/users/me/messages/' + m.id + fields + '\n'
问题是调用了“消息”而不是“消息/列表”端点吗?根据这个问题的答案? - Why does search in gmail API return different result than search in gmail website?
这是一个错误/功能吗?是否有解决方法,例如使用 epoch ms. (我也没有在文档中看到)
谢谢
【问题讨论】:
-
欢迎来到 Stack Overflow Dan!我自己也为此苦苦挣扎,我搬到了second accuracy query。然后你可以写
after:<start_of_day_in_seconds> AND before:<end_of_day_in_seconds>。值得一试! -
非常感谢 Tholle。那行得通!在 Javascript 中,我使用以下内容将日期转换为 epoch var after = "2015/11/19"; var myDateAfter = new Date(after + " 00:00:00"); var myEpochAfter = myDateAfter.getTime()/1000.0;更新文档和/或使其按预期工作仍然会很好
-
甜蜜! :) 添加了答案。我同意,如果文档提到它会很棒。
标签: gmail-api