Google REST API - RFC 2822 格式和 base64url 编码字符串中的消息

Google REST API - message in an RFC 2822 formatted and base64url encoded string

我尝试使用 - try it of Google REST API - Users.messages: send .

有一个必需的参数 - raw -

The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in messages.get and drafts.get responses when the format=RAW parameter is supplied.

我检查了 RFC 2822 格式,它似乎应该显示为 sample here , then I encoded it the base64URL with this encoder and paste it the raw field of the try it,我得到 - Invalid value for ByteString: http://ostermiller.org/calc/encode.html .

你能给我一个正确的 RFC 2822 format 及其对应的 base64URL 吗?

示例邮件可能如下所示:

From: sender@gmail.com
To: receiver@gmail.com
Subject: Subject Text

The message text goes here

在浏览器中打开开发者工具,进行Base64编码,将所有+替换为-,将所有/替换为_,并删除尾随= 使其 URL-安全:

btoa(
  "From: sender@gmail.com\r\n" +
  "To: receiver@gmail.com\r\n" +
  "Subject: Subject Text\r\n\r\n" +

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

这将为您提供以下数据:

RnJvbTogc2VuZGVyQGdtYWlsLmNvbQ0KVG86IHJlY2VpdmVyQGdtYWlsLmNvbQ0KU3ViamVjdDogU3ViamVjdCBUZXh0DQoNClRoZSBtZXNzYWdlIHRleHQgZ29lcyBoZXJl

使用上面的字符串作为 API Explorer 中的 raw 参数来发送邮件。

您可以在节点 REPL 或在线节点编译器中使用它并获得 json

function createMessageJson(){
    const messages = [
        'From: NAME <foo@email.com>',
        'To: Name <foobar@email.com>',
        'Content-Type: text/html; charset=utf-8',
        'MIME-Version: 1.0',
        'Subject: Re: SUBJECT',
        '',
        'BODY_TEXT',
        '',
    ];


    function encodedMessage (){
        return Buffer.from(messages.join('\n'))
            .toString('base64')
            .replace(/\+/g, '-')
            .replace(/\//g, '_')
            .replace(/=+$/, '');
    }


  return JSON.stringify({
            raw: encodedMessage()
    });
}

console.log(createMessageJson())