MailApp.sendEmail -> 来自不同账户的邮件。

问题描述 投票:1回答:1

我在一个共享的电子表格中使用一个脚本来向工作团队发送更新邮件。我使用的是一个简单的调用。

MailApp.sendEmail(mail_address, subject, msg);

一段时间以来运行良好... 但现在我有一个奇怪的行为:脚本运行成功,但电子邮件实际上是由电子表格共享的用户之一随机发送的。我不明白这怎么可能,因为他们不是共享账户,不可能像这样发送邮件......

编辑: 脚本是根据编辑电子表格的触发器来执行的。

google-apps-script
1个回答
0
投票

状况。

  • 你已经安装了一个 onEdit 触发器,所有对电子表格有编辑权限的用户都会被触发。
  • 由该触发器触发的功能会发送一封邮件。
  • 您注意到电子邮件并非总是由编辑电子表格的用户发送。

问题。

问题是,如你所见 此处:

可安装的触发器总是在创建者的账户下运行。.

这意味着 邮件不会由编辑电子表格的用户发送,而是由安装触发器的用户发送。. 由于有多个用户安装了这个触发器,你的项目可能包含多个重复的触发器,每个触发器将代表不同的账户运行。正因为如此,您可能最终会收到多个电子表格版本的电子邮件,而每个电子邮件都是由不同的账户发送的。

解决方法

如果您想在每次编辑电子表格时都发送一封邮件,并由编辑电子表格的账户发送该邮件,您可以使用以下方法。getActiveUser()getEffectiveUser():

这个想法是为了检查 active usereffective user 是同一个,只有在这种情况下才会发送邮件。这样,即使一个版本触发了多个函数(每个安装了触发器的账户都有一个),也只会发送一封邮件(对应编辑电子表格的用户)。

代码示例。

function onEditTrigger(e) {
  var activeUser = Session.getActiveUser().getEmail();
  var effectiveUser = Session.getEffectiveUser().getEmail();
  if (activeUser === effectiveUser) {
    // Rest of code
    MailApp.sendEmail(mail_address, subject, msg);
  }
}

注意:

  • 如果你已经安装了触发器,你最好不要把你的函数命名为 onEdit说明:此名称为简单触发器保留。

参考。

© www.soinside.com 2019 - 2024. All rights reserved.