获取用户邮箱的当前历史记录ID

时间:2014-10-08 22:14:33

标签: gmail-api

我想开始同步用户邮箱,因此我需要用户邮箱的最新historyId。似乎没有办法通过一次API调用获得此功能。

gmail.users.history.list端点包含一个historyId,它似乎是我需要的,来自文档:

historyId   unsigned long   The ID of the mailbox's current history record.

但是,要从此端点获得有效响应,您必须提供startHistoryId作为参数。

我看到的唯一选择是发出列出用户消息的请求,从中获取最新的历史记录ID,然后向gmail.users.history.list发出请求,提供historyid以获取最新消息。

其他想法?

3 个答案:

答案 0 :(得分:4)

你看了https://developers.google.com/gmail/api/guides/sync吗?

根据您的用例,为了避免您当前状态与开始转发同步之间的比赛,您需要提供适当的historyId。如果有"获取当前历史记录ID"然后你之前的状态和你获得这些结果之间的任何东西都会丢失。如果您没有任何特定的现有状态(例如,只想获得更新并且在此之前不关心任何事情)那么您可以使用任何返回的historyId(例如,在消息或线程上)。

答案 1 :(得分:0)

C#个用户的小例子(@EricDeFriez的评论中提到)。

必须安装Nuget包Google.Apis.Gmail.v1。另请参阅quickstart for .NET developers。

var service = new GmailService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = ApplicationName,
});

var req = service.Users.GetProfile("me");
req.Fields = "historyId";
var res = req.Execute();

Console.WriteLine("HistoryId: " + res.HistoryId);

答案 2 :(得分:0)

此答案与使用服务帐户的Java Gmail API客户端库有关。 我发现gmail.users.getprofile()不能工作,因为它返回的对象是Class Gmail.Users.GetProfile类型的对象,它没有获取historyId的接口。

com.google.api.services.gmail.model.Profile实际上具有一个getHistoryId()函数,但是调用service.users().getProfile()将返回一个Class Gmail.Users.GetProfile对象。

要解决此问题,我使用了history.list()函数,该函数将始终返回最新的historyId作为其响应的一部分。

    Gmail service = createGmailService(userId); //Authenticate
    BigInteger startHistoryId = BigInteger.valueOf(historyId);
    ListHistoryResponse response = service.users().history().list("me")                
    .setStartHistoryId(startHistoryId).setMaxResults(Long.valueOf(1)).execute();

我将结果的最大数量设置为1,以限​​制返回的不必要数据,并且我将收到如下所示的有效负载:

  

{“ history”:[{“ id”:“ XXX”,“消息”:[{“ id”:“ XXX”,“ threadId”:“ XXX”}]}]],“ historyId”:“ 123456 “,” nextPageToken“:” XXX“}

historyId(123456)将是用户的当前historyId。您可以使用response.getHistoryId()

获取该historyId

如果您为Users.history:list使用API​​测试器,您还可以看到响应中提供了最新的historyId。

https://developers.google.com/gmail/api/v1/reference/users/history/list