【发布时间】:2021-09-24 07:03:45
【问题描述】:
我有一个要求,我想从我的应用程序用户的收件箱中阅读特定的电子邮件。我在谷歌控制台中创建了一个项目并添加了 Gmail API。现在我可以使用它阅读我自己的电子邮件了。但我不知道如何验证我的用户并且能够从我的应用程序中读取他们的电子邮件。我的应用程序在 Nodejs 中。
对于我想要为另一个用户执行的每个操作:
API 返回一个错误:错误:Delegation denied for
fs.readFile('credentials.json', (err, content) => {
if (err) return console.log('Error loading client secret file:', err);
// Authorize a client with credentials, then call the Gmail API.
authorize(JSON.parse(content), getRecentEmail);
});
function authorize(credentials, callback) {
const {client_secret, client_id, redirect_uris} = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(
client_id, client_secret, redirect_uris[0]);
// Check if we have previously stored a token.
fs.readFile(TOKEN_PATH, (err, token) => {
if (err) return getNewToken(oAuth2Client, callback);
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
});
}
function getRecentEmail(auth) {
// Only get the recent email - 'maxResults' parameter
gmail.users.messages.list({auth: auth, userId: 'me', maxResults: 10,}, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}
// Get the message id which we will need to retreive tha actual message next.
var message_id = response['data']['messages'][0]['id'];
// Retreive the actual message using the message id
//https://gmail.googleapis.com/gmail/v1/users/{userId}/settings/delegates
gmail.users.messages.get({auth: auth, userId: 'me', 'id': message_id}, function(err, response) {
if (err) {
console.log('The API returned an error: ' + err);
return;
}
console.log(response['data']);
let message_raw = response['data']['payload']['parts'][0].body.data;
let data = message_raw;
let buff = new Buffer(data, 'base64');
let text = buff.toString();
});
});
}
如果我在 UserId 中添加任何其他邮件 ID,我会收到错误消息。“API 返回错误:错误:Delegation denied for”
请帮助我或建议我是否可以使用其他方法来实现这一目标。
【问题讨论】:
-
请编辑您的问题并包含您的代码
-
您现在可以复习吗
标签: node.js google-cloud-platform gmail-api