如果我向Users.messages.list的gmail API发出请求,它将返回100条最新消息 .
如果我再提出另一个请求,1分钟后没有新的电子邮件,它将返回相同的100条最新消息 .
如果我发出第三个请求,在原始邮件发出后2分钟,并且对最近100封邮件中的一封邮件有回复,它仍会返回最近的100封邮件 .
这个问题是它只返回消息id和线程id,而不是是否有新的回复 . 这意味着我必须检查我本地存储的每条消息,或者100条返回消息中的每条消息,只是为了知道是否有回复 .
有效的方式,您无法通过api“检查”您的电子邮件,因为如果您存储了10000封邮件并且您正在检查所有这些邮件的回复,那么您将在一天内用完整个API“请求数”分配!
你有什么问题?
当然我可以使用pop3或imap,但为什么我可以使用像/ list_recent这样的东西?
1 回答
您一定要查看Gmail API文档的这一部分:https://developers.google.com/gmail/api/guides/push
基本上,它解释了如何通过Pub / Sub(来自Google的消息队列协议)设置“监视”Gmail帐户并接收通知(新电子邮件,已删除的电子邮件,标签添加...) .
通知将包含
historyId
,这是Gmail帐户中的一种里程碑 . 使用/history endpoint,您将获得自此历史记录点以来添加和/或删除的电子邮件 . 您必须存储在应用程序中某处处理的最新historyId
,以便您可以在下一个通知中查询正确的更改(并且不会遗漏任何内容) .如果您不需要对实时更改做出反应,也许您可以定期调用
/history
endpoints ,但它的规模效率肯定会低一些 .要使这项工作需要一些工作,但最终你会得到一个非常有效的系统,能够对实时的变化作出反应 .