收件人地址需要带有 JavaScript 的 gmail api

Posted

技术标签:

【中文标题】收件人地址需要带有 JavaScript 的 gmail api【英文标题】:Recipient address required gmail api with JavaScript 【发布时间】:2020-08-23 11:52:30 【问题描述】:

我正在尝试通过 javascript 客户端中的 Gmail API 发送带有 jpeg 文件的消息。 但我收到错误:需要收件人地址。目前我写的代码如下:

SendMails() 
    var img=getBase64();
    const mails = [
      'Content-Type: multipart/mixed; boundary="foo_bar_baz"\r\n',
      'MIME-Version: 1.0\r\n',
      'to: limon14203165@gmail.com\r\n',
      'from: liibd7@gmail.com\r\n',
      'subject: Subject Text\r\n\r\n',

      '--foo_bar_baz\r\n',
      'Content-Type: text/plain; charset="UTF-8"\r\n',
      'MIME-Version: 1.0\r\n',
      'Content-Transfer-Encoding: 7bit\r\n\r\n',

      'The actual message text goes here\r\n\r\n',

      '--foo_bar_baz\r\n',
      'Content-Type: image/jpeg\r\n',
      'MIME-Version: 1.0\r\n',
      'Content-Transfer-Encoding: base64\r\n',
      'Content-Disposition: attachment; filename="example.jpg"\r\n\r\n',

      img, '\r\n\r\n',

      '--foo_bar_baz--'
    ].join('');
    const path = 'upload/gmail/v1/users/me/messages/send?uploadType=multipart';
    const mail = btoa(mails).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

    gapi.client.request(
      path: path,
      headers: 
        'Content-Type': 'message/rfc822'
        // mimeType: 'message/rfc822'
      ,
      method: 'POST',
      body: 
        data: mail
      
    ).then(response=> 
      console.log('Response:', response);
    ).catch(err => 
      console.log('Error:', err);
    );
  

这会导致错误响应代码 400,原因:“invalidArgument”,消息:“需要收件人地址。 我究竟做错了什么?如果有人能对此有所了解,将不胜感激!

【问题讨论】:

【参考方案1】:

我认为可以使用您的请求正文。那么这个修改怎么样呢?

发件人:

const path = 'upload/gmail/v1/users/me/messages/send?uploadType=multipart';
const mail = btoa(mails).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');

gapi.client.request(
  path: path,
  headers: 
    'Content-Type': 'message/rfc822'
    // mimeType: 'message/rfc822'
  ,
  method: 'POST',
  body: 
    data: mail
  
).then(response=> 
  console.log('Response:', response);
).catch(err => 
  console.log('Error:', err);
);

收件人:

const path = 'upload/gmail/v1/users/me/messages/send';  // Modified
// const mail = btoa(mails).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); // Deleted
gapi.client.request(
  path: path,
  headers: 'Content-Type': 'message/rfc822',
  method: 'POST',
  body: mails  // Modified
).then(response=> 
  console.log('Response:', response);
).catch(err => 
  console.log('Error:', err);
);

注意:

此修改后的脚本假定您的gapi.client 可用于使用 Gmail API 发送邮件。

参考资料:

gapi.client.request(args) Users.messages: send

【讨论】:

以上是关于收件人地址需要带有 JavaScript 的 gmail api的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript 发送邮件

使用带有 Mandrill 的 Smtp 客户端发送电子邮件

在 GAS/Javascript 中保存带有特定主题行的 Gmail 附件

发送消息/参数错误需要 SMTP 收件人地址

带有收件人、主题和正文的 QR 编码电子邮件?

Google 电子邮件 API 引发 400 错误。需要收件人地址 (c#)