我在一个共享的电子表格中使用一个脚本来向工作团队发送更新邮件。我使用的是一个简单的调用。
MailApp.sendEmail(mail_address, subject, msg);
一段时间以来运行良好... 但现在我有一个奇怪的行为:脚本运行成功,但电子邮件实际上是由电子表格共享的用户之一随机发送的。我不明白这怎么可能,因为他们不是共享账户,不可能像这样发送邮件......
编辑: 脚本是根据编辑电子表格的触发器来执行的。
onEdit
触发器,所有对电子表格有编辑权限的用户都会被触发。问题是,如你所见 此处:
可安装的触发器总是在创建者的账户下运行。.
这意味着 邮件不会由编辑电子表格的用户发送,而是由安装触发器的用户发送。. 由于有多个用户安装了这个触发器,你的项目可能包含多个重复的触发器,每个触发器将代表不同的账户运行。正因为如此,您可能最终会收到多个电子表格版本的电子邮件,而每个电子邮件都是由不同的账户发送的。
如果您想在每次编辑电子表格时都发送一封邮件,并由编辑电子表格的账户发送该邮件,您可以使用以下方法。getActiveUser()
和 getEffectiveUser()
:
这个想法是为了检查 active user
和 effective 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
说明:此名称为简单触发器保留。