如何正确设置发送电子邮件的Gmail API脚本?
我即将使用这种方法,并开始从这个快速入门指南构建我的脚本。
有没有其他方法可以在不使用OAuth2验证的情况下做到这一点?还是一种一劳永逸的验证方法?
在应用程序中使用Gmail APi时,您需要使用OAuth 2.0,因为所有对Gmail APi的请求都必须由经过身份验证的用户授权。如果你注意到快速启动,这里有一个步骤,你需要创建一个凭据/Outh客户端ID,使这个API工作。
有关更多信息,还有另一种方法可以使用Gmail授权您的应用程序。你可以在Google+登录的帮助下完成这项工作,它为你的应用程序提供了"使用谷歌登录"的身份验证方法。
在向GMail请求授权时,OAuth 2.0提供一个访问令牌和一个刷新令牌。为了避免每次都进行验证,请存储访问令牌。使用刷新令牌在新访问令牌过期后获取该令牌(访问令牌每一小时过期一次(。
点击此处了解此过程:https://developers.google.com/identity/protocols/OAuth2
我找到了使用JWT授权OAuth2的解决方案。您需要有管理员帐户才能创建域范围的委派服务帐户。然后在开发人员控制台中,您需要下载服务密钥JSON文件,并将其作为凭据加载。
首先获取所有用户如下:(这里你需要使用具有管理目录权限的帐户(
const google = require('googleapis');
const gmail = google.gmail('v1');
const directory = google.admin('directory_v1');
const scopes = [
'https://www.googleapis.com/auth/gmail.readonly',
'https://www.googleapis.com/auth/admin.directory.user.readonly'
];
const key = require('./service_key.json');
var authClient = new google.auth.JWT(
key.client_email,
key,
key.private_key,
scopes,
"authorized@mail.com"
);
authClient.authorize(function(err, tokens){
if (err) {
console.log(err);
return;
}
directory.users.list(
{
auth: authClient,
customer: 'my_customer',
maxResults: 250,
orderBy: 'email'
}, (err, resp) => {
if (err) {
console.log(err);
return;
}
console.log(resp);
});
});
然后,您需要获取线程列表(每个请求(页(100个(。对于每个线程对象,您需要为全线程调用get方法。当使用Gmail API时,授权为您想从中获取电子邮件的用户。在请求中作为userId
使用值'me'
。