【发布时间】:2016-09-11 15:35:04
【问题描述】:
我已经阅读教程和查看示例 2 天了,但没有成功。
我想在 NodeJS 环境中使用 Google Apps Gmail 帐户发送电子邮件,但是,我收到来自 Google API 的400 响应:
{[Error: Bad Request]
code: 400,
errors:
[{
domain: 'global',
reason: 'failedPrecondition',
message: 'Bad Request'
}]
}
这是我到目前为止所做的:
- 在 Google Cloud Platform 中创建了一个项目
- 创建了服务帐号
- 为服务帐号启用
Domain Wide Delegation - 已下载
JSON格式的服务帐号密钥 -
API Manager>Credentials我已经创建了OAuth 2.0 client ID - 为项目启用 Gmail API
在 Google Apps 管理控制台中:
- 在
Security>Advanced Settings>Manage API client access我从上面的步骤4添加了Client ID - 我已经为
Client ID添加了所有可能的范围
这是尝试发送电子邮件的代码:
const google = require('googleapis');
const googleKey = require('./google-services.json');
const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], null);
jwtClient.authorize((err, tokens) => {
if (err) {
console.err(err);
return;
}
console.log('Google auth success')
var gmail = google.gmail({version: 'v1', auth: jwtClient})
var raw = <build base64 string according to RFC 2822 specification>
var sendMessage = gmail.users.messages.send({
auth: jwtClient,
userId: 'user@domain.com',
message: {
raw: raw
}
}, (err, res) => {
if (err) {
console.error(err);
} else {
console.log(res);
}
});
我可以看到Google auth success 消息,并且请求使用正确初始化的令牌发送:
headers:
{ Authorization: 'Bearer ya29.CjLjAtVjGNJ8fcBnMSS8AEXAvIm4TbyNTc6g_S99HTxRVmzKpWrAv9ioTI4BsLKXW7uojQ',
'User-Agent': 'google-api-nodejs-client/0.9.8',
host: 'www.googleapis.com',
accept: 'application/json',
'content-type': 'application/json',
'content-length': 2 }
不过,回复还是400
【问题讨论】:
标签: node.js gmail google-apps jwt service-accounts