Gmail API缺失邮件

时间:2017-10-12 17:33:16

标签: php api email gmail-api

我无法通过Gmail API PHP库检索所有邮件。我使用listUsersThreads检索所有线程,以便在用户的帐户上执行完整或部分邮箱同步。初始完整同步过程并返回我需要的消息ID,然后我用它来存储邮件元标题(from,to,date,subject)。使用上一个历史记录ID中的listUserHistory进行的后续调用允许我进行部分同步以仅检索最新消息。根据我存储的数据,然后我在两方之间显示完整的消息对话日志,按日期排序以显示对话。然后单击该消息将查询API以检索我随后显示的电子邮件正文。

问题在于,基于我保存的消息,查看MIME内容,MIME主体中有消息,我在数据库中没有。然后我还尝试使用搜索查询查询API,但仍然缺少消息,而不是由API返回。

以前的开发人员使用mimecast来获取消息,查询该数据库确实会返回我遗漏的消息。

Google Gmail API如何不向我发送发件人和收件人之间的所有邮件? MIME主体清楚地显示查询API时不可用的消息,我不明白为什么,或者如何找到丢失的消息。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

因此,如果此问题出现在其他任何人身上,我相信它与过期的历史记录项有关。我有待纠正,因为只有在我的实施运行超过两周后才能证明这一点。

如果您正在考虑运行邮箱同步,那么您很可能会丢失邮件,特别是如果这些邮件是从收件箱或Gmail以外的客户端发送的。历史记录项目平均保留两周,因此通过同步邮箱,您将同步帐户被激活时的所有内容,但过期的历史记录项目将无法使用。

理论上,这意味着您应该在执行部分同步时进行完整的电子邮件会话。您应该拥有在通信发生时所需的所有MIME标头,前提是,与我一样,您通过Google云服务控制台启用了推送通知,以提醒您的系统在任何给定帐户上运行部分同步过程。

如果部分同步是手动执行的,或者可能是间隔执行CRON,而不是通过推送通知执行,则您需要确保将所有历史记录项仍然可用且可访问的时间间隔配置为同步

但是,这样做的缺点是,即使您确实跟踪了其消息ID的所有通信,查找过期消息以检索电子邮件正文也将失败,并显示404状态代码,您将无法使用检索某些邮件的电子邮件正文内容。

因此,如果您的进程在很大程度上依赖于电子邮件正文中的内容,那么您还应该在部分同步期间在本地存储正文内容我真的只需要MIME标题,尽管我在需要时查找邮件内容,但如果我无法检索任何给定消息的正文,它将不会给我带来重大问题。

我应该能够在一个月内确认这个理论,所以如果你认为我的理论不正确,请随意让我变得更聪明。 :)