要在 Apps 脚本中使用服务帐户,您必须执行以下操作:
1。构建 OAuth 服务:
一旦您将added 指定库添加到您的脚本中,您必须这样做才能使用委托凭证构建 OAuth 服务:
const PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n';
const CLIENT_EMAIL = 'xxxxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com'; // Service account email
const USER_EMAIL = 'email_address_to_impersonate'; // Account to impersonate
const SCOPE = 'https://www.googleapis.com/auth/gmail.readonly' // Change according to your preferences
function getGmailService() {
return OAuth2.createService('Gmail: ' + USER_EMAIL)
.setTokenUrl('https://oauth2.googleapis.com/token')
.setPrivateKey(PRIVATE_KEY)
.setIssuer(CLIENT_EMAIL)
.setSubject(USER_EMAIL)
.setPropertyStore(PropertiesService.getScriptProperties())
.setScope(SCOPE);
}
其中PRIVATE_KEY 是指在服务帐户 JSON 凭据中找到的密钥,CLIENT_EMAIL 是服务帐户电子邮件,USER_EMAIL 是指您要访问其INBOX 的电子邮件地址。
请务必注意,SCOPE 应该是您在授权时指定的范围之一。
2。访问 API:
构建 OAuth 服务后,您可以使用它来检索访问令牌,您可以使用该令牌访问所需的资源。当然,GmailApp service 和Advanced Gmail Service 在这里不会用到,因为您必须使用刚刚构建的服务访问 API。因此,访问API的方式将是通过UrlFetch发出相应的HTTP请求。
我不确定你到底想做什么,具体的请求取决于此,但例如,如果你想从模拟用户那里list the messages,你可以这样做:
function readInbox() {
var service = getGmailService();
console.log(service.getAccessToken());
if (service.hasAccess()) {
var url = 'https://www.googleapis.com/gmail/v1/users/me/messages';
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' + service.getAccessToken()
}
});
var result = JSON.parse(response.getContentText());
console.log(JSON.stringify(result, null, 2));
}
}
注意:
参考: