user555 user555 - 5 months ago 83
Node.js Question

send email using gmail api Error: This API does not support parsing form-encoded input

I'm trying to send email using gmail-api, I'm reading data from user and
converted it to

base64url
string

I'm getting the raw value and when I try to send the mail using post request

var ss=new Buffer(message).toString('base64')
var rawdata = ss.replace(/\//g, '_').replace(/\+/g, '-');
var options={"access_token":google.accessToken,'raw':rawdata};
var res=HTTP.post('https://www.googleapis.com/gmail/v1/users/me/messages/send',{params: options});


It is throwing error

{ "error": { "errors": [
{ "domain": "global",
"reason": "parseError",
"message": "This API does not support parsing form-encoded input." } ],

"code": 400, "message": "This API does not support parsing form-encoded input." } }


I'm sending following params

var message = 'From: Me <ff@gmail.com>\r\n' +
'To: Me <ss@gmail.com>\r\n' +
'Subject: Hello\r\n'+
'Mime-Version: 1.0\r\n'+
'Content-Type: text/html; charset=utf-8\r\n' +
'Content-Transfer-Encoding: quoted-printable\r\n\r\n' +
'<html><body>' +
'<h1>World</h1>' +
'</body></html>';


I'm using valid emails in my app,

Important thing is when I paste the generated
raw
in gmail-api explorer,

It is working fine and the email is sending, but when I send post request with the same raw it is throwing error.

EDIT: accesstokens are also fine, they are working for other queries.

What is the error in my code?I suppose the error is with headers.

Any help appreciated.

Answer

I would suspect that when you don't specify a Content-Type-header, it defaults to application/x-www-form-urlencoded. Try setting the Content-Type yourself to application/json.

Comments