Gmail REST API获取邮件功能会返回无效的historyId

时间:2015-04-22 14:52:51

标签: gmail-api

似乎Gmail REST API中可能存在严重问题。

  1. 调用/ userId / messages以获取消息列表
  2. 对于每一个,调用/ userId / messages / id来获取消息
  3. 获取每个消息对象的最高(或任何)startHistoryId
  4. 然后调用/ userId / history / list传递startHistoryId作为参数
  5. 结果出乎意料。 Gmail REST API返回404 Not Found ..似乎返回的historyId未注册或有效。

    在调用/ userId / profile时,startHistoryId有效,可以在/ userId / history / list调用中成功使用。

    com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
    {
    "code" : 404,
    "errors" : [ {
         "domain" : "global",
         "message" : "Not Found",
         "reason" : "notFound"
        } ],
      "message" : "Not Found"
    }
    

1 个答案:

答案 0 :(得分:6)

这不是API中的错误,并记录在 https://developers.google.com/gmail/api/v1/reference/users/history/list

具体而言“历史ID按时间顺序增加但与有效ID之间的随机间隔不连续。提供无效或过时的startHistoryId通常会返回HTTP 404错误代码.historyId通常至少有效一周,但是某些情况可能只有几个小时有效。如果收到HTTP 404错误响应,您的应用程序应执行完全同步。“

所以你可能只是使用了一个超出历史记录范围的historyId(它没有无限期存储,这将非常昂贵)。它的存储时间足以让客户同步(例如一周左右)。

如果您只需要从某个点向前同步,那么只需使用从getProfile返回的historyId。消息上的historyId是上次更新消息的时间,可能是几个月或几年前,比存储历史记录的时间长。

另见同步指南: https://developers.google.com/gmail/api/guides/sync