并非所有共享人员都可以运行的Google表格电子邮件脚本

时间:2020-05-14 17:39:21

标签: email google-apps-script google-sheets sharing

我有一个与其他人(我是所有者)共享的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”变量将用包含我的电子邮件地址的单元格的值填充。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看看restrictions for simple triggers的文档:

他们无法访问需要授权的服务。例如,一个 简单触发器无法发送电子邮件,因为Gmail服务 需要授权,但简单的触发器即可翻译词组 使用匿名的语言服务。

解决方案:

改为使用installable trigger

  • 转到Edit->Current Project's trigger
  • 点击+Add trigger
  • Select event type On edit

您的函数不应命名为onEdit,因为否则将同时触发简单触发器和可安装触发器,这会导致问题。

问题:

可安装触发器将为每个用户触发,但它将代表您触发,因此电子邮件始终是您。

如果这是一个问题,则需要使用service accountimpersonate会话用户,这会使事情变得更加复杂。