2015-04-22 40 views
3

Gmail REST API似乎可能存在严重问题。Gmail REST API获取邮件功能返回无效historyId

  1. 呼叫/用户名/邮件获取信息的列表
  2. 对于每一个,呼叫/用户名/邮件/ ID得到的消息
  3. 获得最高(或)startHistoryId每个消息对象
  4. 然后调用/用户名/历史/列表传递startHistoryId作为参数

结果是出乎意料的。 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" 
} 
+0

这是因为Gmail会为只在点的消息historyId创建消息时?如果消息是在不久前创建的,那么历史参考将被删除? – jamie

回答

5

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

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

因此,您可能只是使用历史存储范围之外的historyId(它不会无限期存储,这将非常昂贵)。它只存储足够长的时间用于同步客户需要它(例如一个星期左右)。

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

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

+0

这就是我正在寻找的,但是我遇到了一个奇怪的问题,也许你可以阐明一些。用户在messages.list {resultsSizeEstimate:0}中没有任何内容。所以我从getProfile中获取historyId来进行部分同步。但是,当我尝试使用startHistoryId拉history.list时,它将返回404.这是什么意思关于此邮箱的状态?最新的startHistoryId是否也过时了,说明邮箱在很长一段时间内还没有使用过? – Tadgh