我们正在工作中使用Gsuite /Piazzaweb。我使用基本脚本从我自己的邮箱获取信息,没有问题。但是,我想从几个共享邮箱中提取信息,而这些邮箱都是我被委派的。例如,billing@mycompany.com。但是我找不到关于这个的任何信息,如果可以用App访问一个委托邮箱的话。我一直用app脚本从委托邮箱发送电子邮件,没有任何问题。
希望有人能告诉我更多关于这件事的事。
提前谢谢。
发布于 2020-07-06 12:58:20
为了在Apps脚本中使用服务帐户,您必须执行以下操作:
1.构建OAuth服务:
一旦您将指定的库已添加到您的脚本,就必须这样做,以便使用委派的凭据构建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服务和高级Gmail服务在这里是没用的,因为您必须使用刚刚构建的服务来访问API。因此,访问API的方法是通过UrlFetch发出相应的HTTP请求。
我不确定您到底想要做什么,确切的请求将取决于此,但是,例如,如果您想要从模拟用户那里获得列出消息,您可以这样做:
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));
}
}注意:
HTTP request、Parameters和Request body部分。参考资料:
发布于 2020-07-05 18:38:45
您不能使用应用程序脚本的委托,因为应用程序脚本不支持使用服务帐户。您需要创建一个oauth2流并让用户授权它。@Zig Mandel提供的答复
除了@ZigMandel说的:除非这是谷歌域名或谷歌的工作帐户,我知道你不能使用gmail的服务帐户。您需要使用Oauth2。@DalmTo提供的答复
https://stackoverflow.com/questions/62743648
复制相似问题