Search code examples
gmail

Invalid value for ByteString error when calling gmail send API with base64 encoded < or >


Really stuck on this one and pulling my hair out trying to figure out what to do, searched everywhere and tried everything but still stuck. Any help is much appreciated.

So I am calling the Gmail send message API:

https://www.googleapis.com/gmail/v1/users/me/messages/send

I pass in the following base64 encoded raw message:

VG86IGVjaG9zaWduLnNmZGMucWFAZ21haWwuY29tDQpTdWJqZWN0OiBSZTogd2UgaGF2ZSBhIGNvb2wgcHJvZHVjdA0KSW4tUmVwbHktVG86IDxDQUFMRnBBSmc1aTJlQ1p4T2dQWlhUdnNaN0J5M0gzNlRCMkNQYTdoVEtzTXh2bXZfT3dAbWFpbC5nbWFpbC5jb20+DQpSZWZlcmVuY2VzOiA8Q0FBTEZwQUpnNWkyZUNaeE9nUFpYVHZzWjdCeTNIMzZUQjJDUGE3aFRLc014dm12X093QG1haWwuZ21haWwuY29tPg0KDQoxMTozNg==

Which decodes to:

To: [email protected]
Subject: Re: we have a cool product
In-Reply-To: <CAALFpAJg5i2eCZxOgPZXTvsZ7By3H36TB2CPa7hTKsMxvmv_Ow@mail.gmail.com>
References: <CAALFpAJg5i2eCZxOgPZXTvsZ7By3H36TB2CPa7hTKsMxvmv_Ow@mail.gmail.com>

11:36

I get the error:

Status code: 400 and status: Bad Request and response: { "error": { "errors": [ { "domain": "global", "reason": "invalid", "message": "Invalid value for ByteString

The problem is the less than < and greater than > symbols in the In-Reply-To and References headers. I need those headers because I am trying to have the email come as a reply on the thread. I tried to leave out the < and > but the reply then does not thread.

Thanks


Solution

  • If you are using PHP try this (otherwise try converting it to whatever language you are using)

    Call the below function on your mime message before setting it to the raw property.

    private function base64url_encode($mime) {
        return rtrim(strtr(base64_encode($mime), '+/', '-_'), '=');
    }