【问题标题】:google sheets email script not runnable by all shared people谷歌表格电子邮件脚本不能由所有共享的人运行
【发布时间】:2020-05-14 17:39:21
【问题描述】:

我有一个与其他人共享的谷歌表(我是所有者),其中有一个链接到相应捆绑脚本的按钮,当用户登录按下该按钮时,它会向我发送一封电子邮件(所以如果我点击按钮我向我发送电子邮件)。

所有其他人都拥有“编辑”权限,但是当他们单击按钮时会发生错误,提示无法发送邮件(当我单击全部时完美运行)。

与其他人关联的帐户与我的电子邮件域相同(不是 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”变量将填充包含我的电子邮件地址的单元格的值。 有什么想法吗?

【问题讨论】:

  • 在第一次按下授权后他们第二次按下按钮是否有效?
  • 如果您将所有权转让给其中之一怎么办?那它会发送吗?它也可能与您公司的安全设置有关......或者正如@roma 所说,他们可能只需要再次点击它。
  • 我知道授权后点击两次:两次点击后出现错误
  • 现在我发现另一位在家工作的同事(和我一样)使用 VPN 使用工作表没有错误(而其他出现错误的同事都在工厂工作),所以在我看来,这不是特权问题。我已经询问了公司的 IT 团队,他们说没有可能出现错误的防火墙限制。

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


【解决方案1】:

查看restrictions for simple triggers 的文档:

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

解决方案:

请改用installable trigger。

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

您的函数不应命名为 onEdit,否则简单和可安装的触发器都会立即触发,这可能会导致问题。

问题:

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

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

【讨论】:

  • 感谢您的回复,但我发现(如我的问题的评论中所示)我的另一个同事能够无错误地使用工作表(但在 VPN 中),所以我假设没有与用户权限相关的问题,你同意我的观点吗?
  • 使用表是什么意思?您的意思是让脚本正确运行并发送电子邮件吗?我是正确的,您没有自动运行脚本onEdit,而是通过单击绑定到的按钮手动运行它?这改变了问题。
  • 您说与您共享工作表的用户没有 gmail 地址,但与您拥有相同的电子邮件域?您是在谈论 GSuite 域还是其他提供商?用户是否在浏览器会话中使用多个帐户对其进行了签名?这是失败的常见原因,请确保用户退出所有会话,但与您共享工作表的帐户除外(并且必须是 gmail/GSuite 帐户!)。
  • 是的,我的意思是让脚本正确运行并发送电子邮件。是的,我有一个手动运行它的按钮(如问题中所述)。我的同事在 gsuite 帐户下有一封带有公司域的电子邮件。我将通知我有关多个帐户的信息。谢谢!
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2017-06-19
相关资源
最近更新 更多