【问题标题】:Gmail API find parent of a draftGmail API 查找草稿的父级
【发布时间】:2017-07-15 20:56:52
【问题描述】:

如何在 Gmail 中找到草稿的父级(如果存在)?

当用户在 Gmail 线程 中回复特定消息时,草稿会直接显示在其下方。例如,一个线程中有 5 条消息,并且草稿是为了回复第 3 条消息……该草稿将始终显示为第 4 条消息。我试图在我的应用程序中重现这一点,但我需要一种将草稿映射到它所响应的消息(如果有)的方法。

我一直在搜索返回的值,但找不到对以前消息的任何引用。

如何通过 API 做到这一点?

编辑:

【问题讨论】:

    标签: php gmail gmail-api email


    【解决方案1】:

    您可以尝试使用Users.drafts: list 方法列出用户邮箱中的草稿。

    示例 HTTP 请求: GET https://www.googleapis.com/gmail/v1/users/userId/drafts

    如果成功则返回草稿父消息的threadId

    {
     "drafts": [
      {
       "id": "s:-ID",
       "message": {
        "id": "ID",
        "threadId": "ID"
       }
      }
     ],
     "resultSizeEstimate": 1
    }
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。但这不是我要找的。我正在寻找草稿在显示线程消息的上下文中响应的即时消息。 threadId 将指示线程中第一条消息的 id,但无助于确定草稿在线程中的位置。假设草稿响应的消息位于 11 条消息中的第 4 位。我需要一种方法将草稿放在它所响应的消息正下方的第 5 位。
    • 我目前的领导是使用“Message-Id”、“In-Reply-To”、“References”等将消息缝合在一起。我之前以 html 形式转储数据,因此这些值似乎不存在。
    【解决方案2】:

    您必须将草稿添加到同一线程,并确保 ReferencesIn-Reply-To 标头符合 RFC 2822 标准,并且 Subject 标头匹配。

    示例

    我有一个包含 3 条消息的线程。我想创建一个草稿,作为对第二个的回应。我得到了我想要回复的消息的SubjectMessage-IDReferencesIn-Reply-To 标题,以及线程的threadId

    请求

    GET https://www.googleapis.com/gmail/v1/users/me/messages/15a7a79ed814d9ec?format=metadata&metadataHeaders=Subject&metadataHeaders=Message-ID&metadataHeaders=References&metadataHeaders=In-Reply-To&access_token={access_token}
    

    回应

    {
     "id": "15a7a79ed814d9ec",
     "threadId": "15a7a79d389926b3",
     "labelIds": [
      "UNREAD",
      "IMPORTANT",
      "SENT",
      "INBOX"
     ],
     "snippet": "Test 2 2017-02-26 13:51 GMT+01:00 Emil Tholin <emtholin@gmail.com>: Test 1",
     "historyId": "1138108",
     "internalDate": "1488113495000",
     "payload": {
      "mimeType": "multipart/alternative",
      "headers": [
       {
        "name": "In-Reply-To",
        "value": "\u003cCADsZLRzQ8UQ1HJ8=YsvRv-jtpRY=s_wZmbL8RzSbCtw4T5A+vg@mail.gmail.com\u003e"
       },
       {
        "name": "References",
        "value": "\u003cCADsZLRzQ8UQ1HJ8=YsvRv-jtpRY=s_wZmbL8RzSbCtw4T5A+vg@mail.gmail.com\u003e"
       },
       {
        "name": "Message-ID",
        "value": "\u003cCADsZLRzHC_sR6THger6gkDjJ348XbXehQ0YsFwHAh762ht216A@mail.gmail.com\u003e"
       },
       {
        "name": "Subject",
        "value": "Re: Test"
       }
      ]
     },
     "sizeEstimate": 1333
    }
    

    然后我只是制作一个草稿,对它进行 url-safe base64 编码,并在线程中创建它:

    // replace '+' with '-', replace '/' with '_', remove trailing '=' to make it url-safe
    var draft = btoa([
      'In-Reply-To: <CADsZLRzHC_sR6THger6gkDjJ348XbXehQ0YsFwHAh762ht216A@mail.gmail.com>\r\n',
      'References: <CADsZLRzQ8UQ1HJ8=YsvRv-jtpRY=s_wZmbL8RzSbCtw4T5A+vg@mail.gmail.com> <CADsZLRzHC_sR6THger6gkDjJ348XbXehQ0YsFwHAh762ht216A@mail.gmail.com>\r\n',
      'From: emtholin@gmail.com\r\n',
      'To: emtholin@gmail.com\r\n',
      'Subject: Re: Test\r\n'
    ].join('')).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
    

    请求

    POST https://www.googleapis.com/upload/gmail/v1/users/me/drafts?access_token={access_token}
    
    {
      "message": {
        "raw": "SW4tUmVwbHktVG86IDxDQURzWkxSekhDX3NSNlRIZ2VyNmdrRGpKMzQ4WGJYZWhRMFlzRndIQWg3NjJodDIxNkFAbWFpbC5nbWFpbC5jb20-DQpSZWZlcmVuY2VzOiA8Q0FEc1pMUnpROFVRMUhKOD1Zc3ZSdi1qdHBSWT1zX3dabWJMOFJ6U2JDdHc0VDVBK3ZnQG1haWwuZ21haWwuY29tPiA8Q0FEc1pMUnpIQ19zUjZUSGdlcjZna0RqSjM0OFhiWGVoUTBZc0Z3SEFoNzYyaHQyMTZBQG1haWwuZ21haWwuY29tPg0KRnJvbTogZW10aG9saW5AZ21haWwuY29tDQpUbzogZW10aG9saW5AZ21haWwuY29tDQpTdWJqZWN0OiBSZTogVGVzdA0K",
        "threadId": "15a7a79d389926b3"
      }
    }
    

    结果

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 2018-02-20
      • 2014-10-19
      • 1970-01-01
      • 2017-11-29
      • 2018-04-19
      • 1970-01-01
      • 2017-05-01
      • 2016-06-10
      相关资源
      最近更新 更多