【问题标题】:How to detect if label was added to email via gmail api?如何检测标签是否通过gmail api添加到电子邮件中?
【发布时间】:2015-11-22 03:24:01
【问题描述】:

我尝试检测电子邮件是否有一个特定的标签。按照文档here,我确实反序列化推送消息并获得了historyId 例如。 390100 但事实证明我无法获得准确的 390100 历史条目。

history.list api 具有 startHistoryId 参数,并且文档声明您在该 historyId 之后获得所有历史

但是更糟糕的是 390100 历史事件是空的(原文如此!)。 labelsAdded 的真正条目是 before 推送通知中的 historyId,例如。 39086 未发布

尝试解决方法并减去例如。 15 形成 390100 并使用 startHistoryId 39085 执行 history.list

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

是否有任何可靠的方法可以知道添加历史标签的时间点,是否有可靠的方法向后搜索历史?

我还交叉发布了咆哮/问题here

【问题讨论】:

    标签: gmail-api


    【解决方案1】:

    您在推送通知中获得的historyId 仅表示当前时间。所以如果你在询问历史时使用这个historyId,你将不会得到任何结果。请改用此工作流程:

    1. 保存historyId
    2. 当您收到推送时,使用您在步骤 1 中保存的historyId,您将获得所有相关更改。
    3. 保存推送通知中的hisotryId,下次使用。
    4. 重复第 2 步。

    示例

    1. 我通过getProfile-操作得到一个起始historyId

    请求

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

    回应

    {
     "historyId": "655156"
    }
    
    1. 我收到了推送,自上次以来list the history

    请求

    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,下次使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-25
      • 2020-03-23
      • 2021-08-14
      • 2018-11-03
      • 1970-01-01
      • 2021-09-28
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多