这是我在此的头一篇博文。如果是转发,我很抱歉,但我已经在所有网站和论坛中寻找解决我问题的答案一个多月了,直到现在......没有答案!
我的目标是让 Gmail 发布/订阅 watch() 在我收到新电子邮件时执行操作。
为此,根据开发者的网站,我需要每天使用以下代码订阅 Gmail watch():
request = {
'labelIds': ['INBOX'],
'topicName': 'projects/myproject/topics/mytopic'
}
gmail.users().watch(userId='me', body=request).execute()
到目前为止,我有一个使用服务帐户的工作计划任务,具有 INVOKER 权限。这部分工作正常。
在我的“初始自动化功能”中,我有:
const {google} = require('googleapis');
// Retrieve OAuth2 config
const oauth2Client = new google.auth.OAuth2(
process.env.CLIENT_ID,
process.env.CLIENT_SECRET,
process.env.CALLBACK_URL
);
exports.oauth2init = (req, res) => {
// Define OAuth2 scopes
const scopes = [
'https://www.googleapis.com/auth/gmail.modify'
];
// Generate + redirect to OAuth2 consent form URL
const authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes,
//prompt: 'none'// Required in order to receive a refresh token every time
});
return res.redirect(authUrl);
};
我现在的问题是访问令牌是第一次通过(提示)生成的,并且永远不会更新为新的(令牌在 1 小时后过期......)这意味着该代码在该时间段后停止工作并且“手动”干预是必需的。根据文档,我需要使用“离线”方法,并且在“提示”上我可以省略(仅在第一次请求权限)或无(从不询问),就像这里所说的那样。
我设法使它工作!明天我将继续这个过程。我应该在这里发布我的工作代码以供参考吗?
谢谢!