Google apps script 如何使用服务帐户使用Gmail API为主要Gusite帐户创建签名
我正在使用POST并能够在Gsuite帐户中添加带有签名的别名id,但是使用相同的代码,我尝试更新主Gsuite帐户的签名,但它没有更新 请指导如何应用逻辑来使用服务帐户更新主Gsuite帐户签名Google apps script 如何使用服务帐户使用Gmail API为主要Gusite帐户创建签名,google-apps-script,gmail-api,Google Apps Script,Gmail Api,我正在使用POST并能够在Gsuite帐户中添加带有签名的别名id,但是使用相同的代码,我尝试更新主Gsuite帐户的签名,但它没有更新 请指导如何应用逻辑来使用服务帐户更新主Gsuite帐户签名 var服务\u账户={ “私钥”:“----开始私钥----VE=\n----结束私钥---\n”, “客户电子邮件”:“xxxxxx”, “客户id”:“xxxxxxx”, “用户电子邮件”='admin@demo.in'; }; 函数getOAuthService(用户){ 返回OAuth2.
var服务\u账户={
“私钥”:“----开始私钥----VE=\n----结束私钥---\n”,
“客户电子邮件”:“xxxxxx”,
“客户id”:“xxxxxxx”,
“用户电子邮件”='admin@demo.in';
};
函数getOAuthService(用户){
返回OAuth2.createService(“服务帐户”)
.setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
.setPrivateKey(服务帐户.私钥)
.setIssuer(服务账户、客户邮箱)
.setSubject(用户电子邮件)
.setPropertyStore(PropertiesService.getScriptProperties())
.setParam('访问类型','脱机')
.setParam('批准提示','强制')
.setScope('https://www.googleapis.com/auth/gmail.settings.sharing https://www.googleapis.com/auth/gmail.settings.basic');
}
函数createAlias(){
var userEmail=admin@demo.in';
//var别名=Testing@demo.in';
//var alias_name='User';
var签名=‘测试’;
var service=getOAuthService();
service.reset();
if(service.hasAccess()){
var url='1〕https://www.googleapis.com/gmail/v1/users/me/settings/sendAs'
变量头={
“授权”:“承载人”+服务.getAccessToken(),
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”,
};
var资源={
sendAsEmail:别名,
签字:签字,
回复地址:别名,
真的,
验证状态:“已接受”,
是的,
isDefault:正确
};
变量选项={
“头”:头,
'method':'POST',
“有效负载”:JSON.stringify(资源),
“muteHttpExceptions”:true
};
Logger.log(选项);
var response=UrlFetchApp.fetch(url,选项);
Logger.log(response.getContentText());
}
}
函数重置(){
var service=getOAuthService();
service.reset();
}
您需要使用该方法
- 在应用程序脚本中,您可以按以下方式执行此操作:
- 你似乎已经做对了,但要指出:
构建服务帐户时,指定范围
https://www.googleapis.com/auth/gmail.settings.basic“
并包括.setSubject(用户电子邮件)
您可以在设置服务帐户的地方提供您的代码吗?@ziganotschka更新了工作代码我可以设置别名id,但无法为主帐户创建签名我可以更新服务帐户i下提到的电子邮件地址的签名,即“userEmail”='admin@demo.in'; 对于域中的任何其他用户,我将收到一个错误“代码”:403,“消息”:“拒绝委派”Testing@demo.insetSubject(userEmail)
需要包含您要模拟的用户的电子邮件-即您要更新其签名。对于不同的用户,您需要更新setSubject(userEmail)
。感谢您的澄清,我如何在一个goI中更新所有域用户签名我只能想到一个循环,列出所有域用户并在每次迭代中重建AuthService。
function changeSignature() {
var userId = 'your primary email';
var sendAsEmail = userId;
var signature = 'Testing';
var service = getService();
service.reset();
if (service.hasAccess()) {
var url = 'https://www.googleapis.com/gmail/v1/users/'+userId+'/settings/sendAs/'+sendAsEmail
var headers ={
"Authorization": 'Bearer ' + service.getAccessToken(),
"Accept":"application/json",
"Content-Type":"application/json",
};
var resource ={
"signature": signature,
};
var options = {
'headers': headers,
'method': 'PATCH',
'payload':JSON.stringify(resource),
'muteHttpExceptions': true
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContentText());
}
}