11

I'm trying to send an email through Google API with JavaScript.

My issue is that when I try to send a simple mail with no attachments, I get the following error:

'raw' RFC822 payload message string or uploading message via /upload/* URL required`

My code

function sendMessage() {
gapi.client.load('gmail', 'v1', function() {
    // Web-safe base64 
    var to = '[email protected]',
        subject = 'Hello World',
        content = 'send a Gmail.'

    var base64EncodedEmail = btoa(
          "Content-Type:  text/plain; charset=\"UTF-8\"\n" +
          "Content-length: 5000\n" +
          "Content-Transfer-Encoding: message/rfc2822\n" +
          "to: [email protected]\n" +
          "from: \"test\" <[email protected]>\n" +
          "subject: Hello world\n\n" +

          "The actual message text goes here"
            ).replace(/\+/g, '-').replace(/\//g, '_');

    var mail= base64EncodedEmail;
    console.log(mail);
    var request = gapi.client.gmail.users.messages.send({
      'userId': "me",
      'message': {
          'raw': mail
        }
    });
    request.execute(function(response){
     console.log(response);
   });
  });        

}
2
  • Related: stackoverflow.com/questions/34546142/… Commented Jan 10, 2017 at 16:35
  • Can you please explain why replace(/\+/g, '-').replace(/\//g, '_') ••• Replacing + with - and / with _? Also to simplify use ' (single quote) to avoid escaping ". Commented Nov 26, 2017 at 13:29

1 Answer 1

21

After days i had found the answer by my own. The problem was that the 'message' in the body only can be used when you send an attachment in the email.

If you have no attachment the query looks like I wrote down here

var mail= base64EncodedEmail;
console.log(mail);
var request = gapi.client.gmail.users.messages.send({
  'userId': "me",
  'resource': {
      'raw': mail
    }
});
request.execute(function(response){
 console.log(response);
});
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks! I find it inconsistent that drafts.create and message.send are not using the same syntax...
is there a python version for this?
Python 3.8: raw = base64.urlsafe_b64encode(message.as_bytes()).decode() gmail_api.users().messages().send(userId= "me", body = {'raw': raw}).execute()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.