Gmail API In-Reply-To not working(Google not handling on one side)

一世执手 提交于 2019-11-28 13:26:35

Noticed this in my production app today as well. The change log did not give a clue as to what happened, but I found the problem in the new documentation for managing threads:

  1. The requested threadId must be specified on the Message or Draft.Message you supply with your request.
  2. The References and In-Reply-To headers must be set in compliance with the RFC 2822 standard.
  3. The Subject headers must match.

In other words, the threadId needs to be supplied. I don't know if this is a bug or not, since it is not documented in the sending message-documentation that was updated on the same day.

I want to respond to the latest message in my inbox. Let's get the relevant information:

Request 1:

maxResults = 1
fields = messages/id

GET https://www.googleapis.com/gmail/v1/users/me/messages?maxResults=1&fields=messages%2Fid

Response 1:

{
 "messages": [
  {
   "id": "15071b210a1ac883",
   "threadId": "15071a4886871a10"
  }
 ]
}

Request 2:

format = metadata
metadataHeaders = In-Reply-To,References,Message-ID,Subject
fields = payload/headers

GET https://www.googleapis.com/gmail/v1/users/me/messages/15071b210a1ac883?format=metadata&metadataHeaders=In-Reply-To&metadataHeaders=References&metadataHeaders=Message-ID&metadataHeaders=Subject&fields=payload%2Fheaders

Response:

{
 "payload": {
  "headers": [
   {
    "name": "In-Reply-To",
    "value": "<CADsZLRyej6wRwCNYv91+dBu9uYhuqYo4pEqOpt41NftXJJqC7g@mail.gmail.com>"
   },
   {
    "name": "References",
    "value": "<CADsZLRyej6wRwCNYv91+dBu9uYhuqYo4pEqOpt41NftXJJqC7g@mail.gmail.com>"
   },
   {
    "name": "Message-ID",
    "value": "<CADsZLRzipMRrQv-A9m-r-EJafXXm1eS9ihw3ZD5g8ybfj+LYeg@mail.gmail.com>"
   },
   {
    "name": "Subject",
    "value": "Re: Perculiar"
   }
  ]
 }
}

All that is left is to create a message with all this data in the right places:

Request 3:

POST https://www.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=multipart
Content-Type: multipart/related; boundary="foo_bar_baz"

--foo_bar_baz
Content-Type: application/json; charset=UTF-8

{
  "threadId": "15071a4886871a10"
}

--foo_bar_baz
Content-Type: message/rfc822

Content-Type: multipart/mixed; boundary="foo_bar"
In-Reply-To: <CADsZLRzipMRrQv-A9m-r-EJafXXm1eS9ihw3ZD5g8ybfj+LYeg@mail.gmail.com>
References: <CADsZLRyej6wRwCNYv91+dBu9uYhuqYo4pEqOpt41NftXJJqC7g@mail.gmail.com> <CADsZLRzipMRrQv-A9m-r-EJafXXm1eS9ihw3ZD5g8ybfj+LYeg@mail.gmail.com>
From: emtholin@gmail.com
To: emtholin@gmail.com
Subject: Re: Perculiar

--foo_bar
Content-Type: text/html; charset="UTF-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

<div dir="ltr"><b> This is where the message text goes </b></div>

--foo_bar
Content-Type: image/png
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="cool.png"

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

--foo_bar--
--foo_bar_baz--

This results in a new message with an attachment threaded like before:

To get it to thread on the senders side also you need to specify the Message.threadId field as part of your send() call. (That does not currently happen automatically, unfortunately.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!