我有一个与其他人(我是所有者)共享的google工作表,其中有一个链接到相应的捆绑脚本的按钮,当用户登录时,该按钮会向我发送电子邮件(如果我单击了按钮,我向我发送电子邮件)。
所有其他人都具有“编辑”权限,但是当他们单击按钮时,会出现错误消息,表明无法发送邮件(当我单击所有按钮时效果都很好)。
与其他人关联的帐户具有我的相同电子邮件域(非gmail ,但与同一公司相关)。
该脚本似乎具有不同的特权,因为我没有问题,而其他人却有问题。
通常,他们第一次(但也是我)第一次单击按钮时,他们必须接受Google的授权,“以您的身份发送电子邮件”(作为登录的当前帐户的头像)。
这是按钮的代码:
'''
var sheet = SpreadsheetApp.getActiveSheet();
var sel = sheet.getSelection();
var sel_range = sel.getActiveRange();
var message = sel_range.getValues();
// get task IDs
var prev_values = sel.getNextDataRange(SpreadsheetApp.Direction.PREVIOUS).getValues();
var cod_tickets = [];
for (var k in prev_values){
cod_tickets.push(prev_values[k][0]);
}
var emailAddress = SpreadsheetApp.getActive().getSheetByName('Manager').getRange('I2').getValue();
var subject = 'ticket ' + cod_tickets;
MailApp.sendEmail(emailAddress, subject, message);
''' 我说他们向我发送了一封电子邮件,因为“ emailAddress”变量将用包含我的电子邮件地址的单元格的值填充。 有什么想法吗?
答案 0 :(得分:0)
他们无法访问需要授权的服务。例如,一个 简单触发器无法发送电子邮件,因为Gmail服务 需要授权,但简单的触发器即可翻译词组 使用匿名的语言服务。
解决方案:
改为使用installable trigger。
Edit->Current Project's trigger
+Add trigger
Select event type
On edit
。 您的函数不应命名为onEdit
,因为否则将同时触发简单触发器和可安装触发器,这会导致问题。
问题:
可安装触发器将为每个用户触发,但它将代表您触发,因此电子邮件始终是您。
如果这是一个问题,则需要使用service account来impersonate会话用户,这会使事情变得更加复杂。