所以我有以下代码:
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_email
和client_id
,但都没有成功。
我真的很失落:)任何帮助,甚至只是关于如何调试它的提示都会很棒。
顺便说一下,我确实在控制台上激活了gmail API。开发者
使用服务帐户,您不能使用自己的gmail帐户。
使用服务帐户,只有在域中实现了域范围的委派时,您才能模拟该域中的用户。
在该参数中,您可以使用值"me",它接受经过身份验证的用户的电子邮件,在本例中为服务帐户电子邮件。
不要发送"resource",而是尝试发送"message",就像本文档中的javascript示例一样。
如果你想从你自己的gmail帐户发送电子邮件,那么你必须实现正常的Oauth2。