使用服务帐户从node.js客户端发送电子邮件



所以我有以下代码:

var Path = require('path');
var google = require('googleapis');
var gmail = google.gmail('v1');
var key = require(Path.join(__dirname, 'googleConfig.json'));
var oAuthClient = new google.auth.JWT(
    key.client_email,
    null,
    key.private_key,
    ['https://www.googleapis.com/auth/calendar.readonly', 'https://www.googleapis.com/auth/gmail.send'],
    null
);
var message = new Buffer(
    "Content-Type: text/plain; charset="UTF-8"n" +
    "MIME-Version: 1.0n" +
    "Content-Transfer-Encoding: 7bitn" +
    "To: <some email>n" +
    "From: <some email>n" +
    "Subject: something something lolnn" +
    "heyheyhey"
).toString('base64').replace(/+/g, '-').replace(///g, '_');
gmail.users.messages.send({
    auth: oAuthClient,
    userId: '<my own google email?>',
    resource: {
        raw: message
    }
}, function(err, resp) {
    console.log('err', err);
    console.log('resp', resp);
});

我使用相同的生成密钥到我的谷歌日历API,所以服务帐户是活跃和工作的。

我得到以下错误:

{ [Error: Bad Request]
  code: 400,
  errors: 
   [ { domain: 'global',
       reason: 'failedPrecondition',
       message: 'Bad Request' } ] }

假设userId是我自己的谷歌电子邮件帐户是正确的吗?我一直尝试使用key.client_emailclient_id,但都没有成功。

我真的很失落:)任何帮助,甚至只是关于如何调试它的提示都会很棒。

顺便说一下,我确实在控制台上激活了gmail API。开发者

使用服务帐户,您不能使用自己的gmail帐户。

使用服务帐户,只有在域中实现了域范围的委派时,您才能模拟该域中的用户。

在该参数中,您可以使用值"me",它接受经过身份验证的用户的电子邮件,在本例中为服务帐户电子邮件。

不要发送"resource",而是尝试发送"message",就像本文档中的javascript示例一样。

如果你想从你自己的gmail帐户发送电子邮件,那么你必须实现正常的Oauth2。

相关内容

  • 没有找到相关文章