如何解决无法使用谷歌 API 获取电子邮件的消息内容
我正在尝试编写一些代码,以便使用 Google API 检索电子邮件。我按照此处提供的文档:https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get?apix_params=%7B%22userId%22%3A%22prashanthpillay2%40gmail.com%22%2C%22id%22%3A%22176d95971a2ffce1%22%7D 来实现我的 showMessageContent 函数并使用此处找到的快速入门示例:https://developers.google.com/gmail/api/quickstart/nodejs?authuser=1,但是当我执行代码时,我只显示了消息 ID,而与实际情况无关信息。任何帮助都会很棒,我对这些东西很陌生。
我的 index.js 文件的完整代码:
const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');
let messageArr = [];
// If modifying these scopes,delete token.json.
const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
// The file token.json stores the user's access and refresh tokens,and is
// created automatically when the authorization flow completes for the first
// time.
const TOKEN_PATH = 'token.json';
// Load client secrets from a local file.
fs.readFile('client_secret.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),listMessages);
});
/**
* Create an OAuth2 client with the given credentials,and then execute the
* given callback function.
* @param {Object} credentials The authorization client credentials.
* @param {function} callback The callback to call with the authorized client.
*/
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,token) => {
if (err) return getNewToken(oAuth2Client,callback);
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
});
}
/**
* Get and store new token after prompting for user authorization,and then
* execute the given callback with the authorized OAuth2 client.
* @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
* @param {getEventsCallback} callback The callback for the authorized client.
*/
function getNewToken(oAuth2Client,callback) {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',scope: SCOPES,});
console.log('Authorize this app by visiting this url:',authUrl);
const rl = readline.createInterface({
input: process.stdin,output: process.stdout,});
rl.question('Enter the code from that page here: ',(code) => {
rl.close();
oAuth2Client.getToken(code,token) => {
if (err) return console.error('Error retrieving access token',err);
oAuth2Client.setCredentials(token);
// Store the token to disk for later program executions
fs.writeFile(TOKEN_PATH,JSON.stringify(token),(err) => {
if (err) return console.error(err);
console.log('Token stored to',TOKEN_PATH);
});
callback(oAuth2Client);
});
});
}
async function listMessages(auth) {
const gmail = google.gmail({version: 'v1',auth});
gmail.users.messages.list({
userId: 'me',maxResults: 1
},res) => {
if (err) return console.log('The API returned an error: ' + err);
const messages = res.data.messages;
if (messages) {
console.log('Messages:');
let i=0;
messages.forEach((message) => {
messageArr[i] = message.id;
console.log(messageArr[i]);
i++;
});
} else {
console.log('No messages found.');
}
});
setTimeout(() =>
{console.log(gmail.users.messages.get(
{
userId: 'me',id: '176daac2fedbf7f9'
},res) => {
if (err) return console.log('The API returned an error: ' + err);
else{
return res;
}
})
);
},3000);
}
问题函数:
async function listMessages(auth) {
const gmail = google.gmail({version: 'v1',3000);
}
运行结果在附图中
当 setTimeout 中的回调运行时,它导致结果未定义,这对我来说没有意义,因为我手动将正确的 ID 传递给 gmail.users.messages.get()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。