如何通过gmail api检测标签是否已添加到电子邮件中?

时间:2015-11-21 16:52:08

标签: gmail-api

我尝试检测电子邮件是否有一个特定的标签。在文档here之后,我对推送消息进行了反序列化并得到了historyId  例如。 390100但事实证明我无法获得准确的390100历史记录。

history.list api有startHistoryId param,docs说你在历史记录ID 后得到了所有历史记录

然而更糟糕的是390100历史事件是空的(原文如此!)。 labelsAdded的真实条目是之前的,即推送通知中的historyId,例如。在39086,未公布

尝试解决方法并减去例如。 15表单390100并使用startHistoryId 39085

执行history.list

如果我好运并且39085仍然存在,我将不会获得404并最终得到我的标签被添加到消息中的信息。但这对我来说似乎是一个糟糕的黑客。

是否有任何可靠方式来了解添加了历史记录标签的哪一点,是否有可靠的方式向后搜索历史记录?

我还发布了rant / issue here

1 个答案:

答案 0 :(得分:1)

您在推送通知中获得的historyId只代表当前时间。因此,如果您在询问历史记录时使用此historyId,则不会得到任何结果。请改用此工作流程:

  1. 保存historyId
  2. 当您进行推送时,请使用您在步骤1中保存的historyId,然后您将获得所有相关更改。
  3. 保存推送通知中的hisotryId,然后下次使用。
  4. 重复步骤2.
  5. 示例

    1. 我使用getProfile - 操作
    2. 获得了一个historyId

      请求

      GET https://www.googleapis.com/gmail/v1/users/me/profile?fields=historyId&access_token={YOUR_API_KEY}
      

      <强>响应

      {
       "historyId": "655156"
      }
      
      1. 我得到了推动,并且自上次以来list the history
      2. 请求

        GET https://www.googleapis.com/gmail/v1/users/me/history?labelId=STARRED&startHistoryId=655156&fields=history%2FlabelsAdded&key={YOUR_API_KEY}
        

        <强>响应:

        {
         "history": [
          {
           "labelsAdded": [
            {
             "message": {
              "id": "151237ed0d001368",
              "threadId": "151237ed0d001368",
              "labelIds": [
               "STARRED",
               "CATEGORY_UPDATES",
               "INBOX"
              ]
             },
             "labelIds": [
              "STARRED"
             ]
            }
           ]
          }
         ]
        }
        
        1. 保存我推送的historyId,然后再次使用。