2014-10-08 160 views
2

我想開始同步用戶郵箱,因此我需要用戶郵箱的最近historyId。似乎沒有辦法通過一個API調用來獲取此信息。獲取用戶郵箱當前歷史記錄ID

的gmail.users.history.list端點包含historyId這似乎是我所需要的,從文檔:

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

然而,爲了得到這個端點的有效迴應你必須提供一個startHistoryId作爲一個參數。

我看到的唯一選擇是請求列出用戶消息,從中獲取最近的歷史ID,然後向gmail.users.history.list發出請求,並提供該歷史記錄以獲取最近的歷史記錄。

其他想法?

回答

4

您是否退房https://developers.google.com/gmail/api/guides/sync

根據您的使用情況,爲避免您當前狀態與開始轉發同步之間的競爭,您需要提供適當的historyId。如果有「獲取當前歷史ID」,那麼之前狀態和獲得這些結果之間的任何內容都將丟失。如果您沒有任何特定的現有狀態(例如,在此之前只想獲取更新並且不關心任何事情),那麼您可以使用任何historyId(例如,在消息或線程上)。

+0

Yup看到了這些文檔,我正在談論的情況下,我沒有任何現有的狀態,只想在未來的更新。 – aloo 2014-10-09 00:06:54

+0

如果我使用gmail.users.messages.list,我需要使兩個調用正確嗎? 1獲得信息的列表,然後又調用來獲取最新消息的歷史記錄標識(即在第一次調用的響應的第一條消息) – aloo 2014-10-09 00:07:53

+1

其實這是比我想象的還要糟糕。我們實際上需要做3次電話才能完成這項工作。一個獲取消息列表。在另一個調用來獲取單個消息的內容,以獲取歷史記錄ID。然後調用以歷史記錄開始的歷史記錄,然後用當前歷史記錄ID進行響應。 – aloo 2014-10-09 18:54:34

0

C#用戶的小例子(在@EricDeFriez的評論中提到)。

必須安裝Nuget包Google.Apis.Gmail.v1。另請參閱針對.NET開發人員的quickstart

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);