CRON Node.js Gmail API 脚本
CRON Node.js Gmail API script
如何正确设置发送电子邮件的 Gmail API 脚本?
我即将使用this method and I started building my script from this quickstart指南。
有没有不使用 OAuth 2 验证的替代方法?或者一种一次性验证的方法?
嗯,在您的应用中使用 Gmail APi 时,您需要使用 OAuth 2.0,因为对 Gmail API 的所有请求都必须由经过身份验证的用户授权。如果您注意到 quickstart,这里有一个步骤,您需要创建一个 credentials/Outh 客户端 ID 才能使此 API 正常工作。
有关详细信息,还有另一种方法 authorize your app with Gmail. You can do it with the help of Google+ Sign-in,它为您的应用程序提供 "sign-in with Google" 身份验证方法。
在向GMail 请求授权时,OAuth 2.0 给出了一个访问令牌和一个刷新令牌。为避免每次都进行验证,请存储访问令牌。过期后使用刷新令牌获取新的访问令牌(访问令牌每隔一小时过期一次)。
在此处了解此过程:https://developers.google.com/identity/protocols/OAuth2
我找到了使用 JWT 授权 OAuth2 的解决方案。
您需要拥有管理员帐户才能创建域范围的委托服务帐户。然后在开发人员控制台中,您需要下载作为凭据加载的服务密钥 JSON 文件。
首先像这样获取所有用户:(这里需要使用具有admin目录权限的账户)
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'
.
如何正确设置发送电子邮件的 Gmail API 脚本?
我即将使用this method and I started building my script from this quickstart指南。
有没有不使用 OAuth 2 验证的替代方法?或者一种一次性验证的方法?
嗯,在您的应用中使用 Gmail APi 时,您需要使用 OAuth 2.0,因为对 Gmail API 的所有请求都必须由经过身份验证的用户授权。如果您注意到 quickstart,这里有一个步骤,您需要创建一个 credentials/Outh 客户端 ID 才能使此 API 正常工作。
有关详细信息,还有另一种方法 authorize your app with Gmail. You can do it with the help of Google+ Sign-in,它为您的应用程序提供 "sign-in with Google" 身份验证方法。
在向GMail 请求授权时,OAuth 2.0 给出了一个访问令牌和一个刷新令牌。为避免每次都进行验证,请存储访问令牌。过期后使用刷新令牌获取新的访问令牌(访问令牌每隔一小时过期一次)。
在此处了解此过程:https://developers.google.com/identity/protocols/OAuth2
我找到了使用 JWT 授权 OAuth2 的解决方案。 您需要拥有管理员帐户才能创建域范围的委托服务帐户。然后在开发人员控制台中,您需要下载作为凭据加载的服务密钥 JSON 文件。
首先像这样获取所有用户:(这里需要使用具有admin目录权限的账户)
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'
.