我尝试通过Google API / Jwt authorizaton(通过google-auth-library)从gmail收到电子邮件。这是我的代码:
var google = require('googleapis');
var gmail = google.gmail('v1');
var key = require('../jwt.keys.json');
var jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
['https://mail.google.com/',
'https://www.googleapis.com/auth/gmail.readonly',
'https://www.googleapis.com/auth/gmail.modify',
'https://www.googleapis.com/auth/gmail.metadata']
);
jwtClient.authorize(function(err, tokens) {
if (err) {
console.log(err);
return;
}
gmail.users.messages.list({
auth: jwtClient,
maxResults: 5,
q: "",
labelIds: ["INBOX"],
userId: 'me',
}, function(err, response) {
if (err)
return d.reject('The API returned an error: ' + err);
//...
});
});
我收到 gmail.users.messages.list 请求的下一个错误:
code: 400,
errors: [
{ domain: 'global',
reason: 'failedPrecondition',
message: 'Bad Request'
}]
P.S。 Gmail API已启用。
谢谢!
答案 0 :(得分:1)
除非您拥有G Suite(Google Apps for Work域名),并且该电子邮件帐户位于其中,否则您不应将JWT用于Gmail等单一用户应用程序。
服务帐户是他们自己的帐户,他们不是Gmail帐户。它们适用于不需要用户的API(例如地图,搜索),或者当您使用Google Apps for Work域并希望为域中的所有用户启用委派时(通过域管理员,因此您不需要个人用户授权)。
更详细的答案:https://stackoverflow.com/a/29778137/6890794
您需要将Oauth2应用于您的工作流程,而不是JWT。 https://developers.google.com/gmail/api/auth/web-server