我已经阅读了2天的教程并看到了示例,但没有成功。我想在NodeJS环境中使用Google Apps Gmail帐户发送电子邮件,但是我得到400了Google API的回复:
400
{[Error: Bad Request] code: 400, errors: [{ domain: 'global', reason: 'failedPrecondition', message: 'Bad Request' }] }
到目前为止,这是我所做的:
Domain Wide Delegation
JSON
API Manager
Credentials
OAuth 2.0 client ID
在Google Apps管理控制台中:
Security
Advanced Settings
Manage API client access
Client ID
4
这是尝试发送电子邮件的代码:
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消息,并使用正确初始化的令牌发送请求:
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
因此,我离解决方案只差半步了,问题是在创建时const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], null);我没有提到要模拟的帐户。
const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], null);
正确的初始化应为: const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], 'user@domain.com');
const jwtClient = new google.auth.JWT(googleKey.client_email, null, googleKey.private_key, ['https://www.googleapis.com/auth/gmail.send'], 'user@domain.com');
总而言之,正确的步骤是:
OAuth 2.0 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'], '<user to impersonate>'); jwtClient.authorize((err, tokens) => { if (err) { console.err(err); return; } console.log('Google auth success') var gmail = google.gmail({version: 'v1'}) var raw = <build base64 string according to RFC 2822 specification> var sendMessage = gmail.users.messages.send({ auth: jwtClient, userId: '<user to impersonate>', resource: { raw: raw } }, (err, res) => { if (err) { console.error(err); } else { console.log(res); } });
希望对其他人有帮助