【问题标题】:Read new messages using Gmail API in PHP在 PHP 中使用 Gmail API 阅读新邮件
【发布时间】:2018-04-27 20:18:29
【问题描述】:

我需要使用 gmail API 客户端从用户的收件箱中读取消息。而我想要的是只收到自上次阅读以来的新消息。当然,我不想阅读所有消息并检查其中哪些是新消息,我只想在查询中获取新消息。到目前为止,我能想到的最佳解决方案是给我已阅读的消息加星标,而不是像这样得到未加星标的消息:

$gmail->users_messages->listUsersMessages('me',['maxResults' => 10, 'q' => "in:inbox AND -in:starred"]);

我在此解决方案中不喜欢的是,这会以某种方式影响消息,并假设此电子邮件用于以常用方式阅读和发送消息(使用网络浏览器)我不确定用户是否无法为消息加注星标他自己,所以我的应用程序将其视为已读。我需要做一些事情,比如阅读所有消息,这些消息是在一段时间后收到的,或者可能是 id 大于上次阅读消息的 id 的地方。有办法吗?

【问题讨论】:

  • 请澄清您的问题。如果您已经阅读了一条消息,那么它如何是新消息?
  • 我的意思是我只想查询自上次获取消息以来收到的消息。现在是这样完成的:获取所有未加星标的消息,并在处理后加星标。因此,下次将获取未加星标的消息,并且不会获取已加星标的消息。但我不太喜欢这个解决方案,因为使用也可能手动给消息加注星标。

标签: php gmail-api


【解决方案1】:

您可以存储上次检查新消息时的秒数,然后在下次收到新消息时使用。

假设您检查了Fri, 27 Apr 2018 12:00:00 GMT 的新消息,然后您将在下一个请求中写下:

$gmail->users_messages->listUsersMessages('me',['maxResults' => 10, 'q' => "in:inbox after:1524830400"]);

【讨论】:

  • 谢谢,最后我这样做了,但是这会按时间过滤电子邮件,该时间是在电子邮件中设置的,发送时间。我遇到了这样的问题:我从服务器发送消息,但时间不是 100% 正确的。因此收到了电子邮件,例如 00:30。但在电子邮件中写道,它是在 00:20 发送的(由于发送服务器上的时间不正确)。因此,如果我在 00:25(当然,带有时间戳)之后运行类似的内容,我就没有收到那封电子邮件。我认为,例如,如果电子邮件 A 是在 00:00:00 发送的,电子邮件 B 是在 00:00:01 发送的,并且电子邮件 B 是在第一时间收到的,我认为可能会发生同样的情况。 After:00:00:01 将错过电子邮件 B
猜你喜欢
  • 1970-01-01
  • 2015-09-15
  • 2018-05-11
  • 2015-06-04
  • 2019-05-24
  • 2015-12-10
  • 2016-01-24
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多