Taifun Taifun - 1 month ago 32x
reST (reStructuredText) Question

How to send a message successfully using the new Gmail REST API?

I'm currently trying to test the new Gmail REST API.

In the API Explorer it is possible to authorize requests using OAuth 2.0 and to execute a request, i.e. send a message.

First I authorized.
enter image description here

I'm using the following test data (and of course I used a valid

email address):

"raw": "c2VuZGluZyBhIG1haWwgdXNpbmcgR21haWwgUkVTVCBBUEk=",
"payload": {
"headers": [
{ "name": "to", "value": "info@something.com" },
{ "name": "from", "value": "taifunbaer@gmail.com" },
{ "name": "subject", "value": "Test Gmail REST API" }
"mimeType": "text/plain"

I also get a
200 OK
and the following result back, which looks fine.

"id": "146dee391881b35b",
"threadId": "146dee391881b35b",

However, the mail will not be sent successfully and I can find an message from
in the inbox instead;:
"An error occurred, your message has not been sent."

enter image description here


1. Did someone test this successfully?

2. Do I have to add some other parameter to get this running?

EDIT: There are 2 different HTTP request methods,

  1. the Upload URI for media upload requests, and

  2. the Metadata URI for metadata-only requests

The API Explorer currently supports metadata requests only
, which means plain-text messages without attachment, and this is what I'm trying to do.


got it!

after reading the RFC 2822 specification I found out, that the complete message needs to be passed in the raw parameter, see the example:

From: John Doe <jdoe@machine.example> 
To: Mary Smith <mary@example.net> 
Subject: Saying Hello 
Date: Fri, 21 Nov 1997 09:55:06 -0600 
Message-ID: <1234@local.machine.example>

This is a message just to say hello. So, "Hello".

So after base64 encoding the complete message, passing it in the raw parameter without using any other parameter, it works fine.

Edit 1:
As @Amit mentioned, it must be web-safe base64 encoded, see also https://code.google.com/p/stringencoders/wiki/WebSafeBase64

So to convert the base64 alpha into a format that is "web-safe" the following changes are recommended:

+ --> - (char 62, plus to dash)
/ --> _ (char 63, slash to underscore)
= --> * padding

To only convert + to - and /to _ was sufficient for me.

Edit 2:
To answer the question of @Hjulle here an example: you only need the userId and in the request body the raw parameter. Let's assume, your email address is jdoe@machine.example

First Base64 encode the complete message (see above) using an online encoder and you get this string:


Now convert + to - and /to _ and you get


Now pass this in the raw parameter of the API Explorer.