Comment envoyer une réponse avec l'API de Gmail

J'ai deux comptes gmail J'ai créé un thread composé de cinq messages et les ai recouvert avec gmail gapi à cette page https://developers.google.com/gmail/api/v1/reference/users/threads/get .

C'est ce que j'ai obtenu:

Entrez la description de l'image ici

Comme vous pouvez le voir, les ID ne correspondent pas, bien qu'ils identifient exactement les mêmes lettres. Pourquoi cela se produit, et comment puis-je obtenir l'identifiant unifié?

PS La vraie raison pour laquelle je fais cela, c'est que je dois envoyer une réponse à un message avec l'API de Gmail, mais pour ce faire, vous devez connaître l'identifiant du message que vous répondez. Et si je réponds au message avec l'identifiant que j'ai (pas l'identifiant du message que possède le destinataire), il envoie simplement un «nouveau» message.

Comment puis-je envoyer des réponses avec l'API Gmail?

Merci d'avance.

Comme le disent les docteurs , si vous essayez d'envoyer une réponse et que vous souhaitez que le courrier électronique se lance, assurez-vous que:

  1. Les en-têtes du Subject correspondent
  2. Les References et les In-Reply-To en In-Reply-To têtes suivent la norme RFC 2822.

Si vous souhaitez le faire vous-même, vous pouvez obtenir le Subject , les References et les noms de Message-ID du message auquel vous souhaitez répondre:

Demande:

 userId = me id = 14fd1c555a1352b7 // id of the message I want to respond to. format = metadata metadataHeaders = Subject,References,Message-ID GET https://www.googleapis.com/gmail/v1/users/me/messages/14fd1c555a1352b7?format=metadata&metadataHeaders=Subject&metadataHeaders=References&metadataHeaders=Message-ID 

Réponse:

 { "id": "14fd1c555a1352b7", "threadId": "14fd1c52911f0f64", "labelIds": [ "SENT", "INBOX", "IMPORTANT", "UNREAD" ], "snippet": "Next level dude 2015-09-15 18:10 GMT+02:00 Emil Tholin &lt;[email protected]&gt;: wow 2015-09-15 18:", "historyId": "575289", "internalDate": "1442333414000", "payload": { "mimeType": "multipart/alternative", "headers": [ { "name": "In-Reply-To", "value": "<CADsZLRyzVPLRQuTthGSHKMCXL7Ora1jNW7h0jvoNgR+hU59BYg@mail.gmail.com>" }, { "name": "References", "value": "<CADsZLRxZDUGn4Frx80qe2_bE5H5bQhgcqGk=GwFN9gs7Z_8oZw@mail.gmail.com> <CADsZLRyzVPLRQuTthGSHKMCXL7Ora1jNW7h0jvoNgR+hU59BYg@mail.gmail.com>" }, { "name": "Message-ID", // This is the same for both users, as you were asking about. "value": "<CADsZLRwQWzLB-uq4_4G2E64NX9G6grn0cEeO0L=avY7ajzuAFg@mail.gmail.com>" }, { "name": "Subject", "value": "Re: Cool" } ] }, "sizeEstimate": 1890 } 

Pour suivre la norme RFC 2822, nous avons ajouté l' Message-ID de message du message que nous voulons répondre à la References -header, séparé par un espace. La fonction In-Reply-To -header a également la valeur du message auquel nous voulons répondre. Nous ajoutons également Re: à notre Subject sujet pour indiquer qu'il s'agit d'une réponse.

 // Base64-encode the mail and make it URL-safe // (replace "+" with "-", replace "/" with "_", remove trailing "=") var encodedResponse = btoa( "Content-Type: text/plain; charset=\"UTF-8\"\n" + "MIME-Version: 1.0\n" + "Content-Transfer-Encoding: 7bit\n" + "References: <CADsZLRxZDUGn4Frx80qe2_bE5H5bQhgcqGk=GwFN9gs7Z_8oZw@mail.gmail.com> <CADsZLRyzVPLRQuTthGSHKMCXL7Ora1jNW7h0jvoNgR+hU59BYg@mail.gmail.com> <CADsZLRwQWzLB-uq4_4G2E64NX9G6grn0cEeO0L=avY7ajzuAFg@mail.gmail.com>\n" + "In-Reply-To: <CADsZLRwQWzLB-uq4_4G2E64NX9G6grn0cEeO0L=avY7ajzuAFg@mail.gmail.com>\n" + "Subject: Re:Cool\n" + "From: [email protected]\n" + "To: [email protected]\n\n" + "This is where the response text will go" ).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); $.ajax({ url: "https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=<USER_ACCESS_TOKEN>", method: "POST", contentType: "application/json", data: JSON.stringify({ raw: encodedResponse }) }); 

Comme vous pouvez le voir, c'est une douleur à l'arrière de manière manuelle. Vous pouvez également répondre au fil. Cela pourrait ne pas suffire pour votre cas d'utilisation cependant.

De cette façon, il vous suffit de fournir le courrier et le threadId , et assurez-vous que le Subject est le même, et Google sera affiché correctement pour vous.

 // Base64-encode the mail and make it URL-safe // (replace "+" with "-", replace "/" with "_", remove trailing "=") var encodedResponse = btoa( "Content-Type: text/plain; charset=\"UTF-8\"\n" + "MIME-Version: 1.0\n" + "Content-Transfer-Encoding: 7bit\n" + "Subject: Subject of the original mail\n" + "From: [email protected]\n" + "To: [email protected]\n\n" + "This is where the response text will go" ).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); $.ajax({ url: "https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token=<USER_ACCESS_TOKEN>", method: "POST", contentType: "application/json", data: JSON.stringify({ raw: encodedResponse, threadId: "<THREAD_ID_OF_MESSAGE_TO_RESPOND_TO>" }) });