我正在尝试使用onEdit触发器发送电子邮件。我知道它默认不起作用,如下所述:
因为简单的触发器会自动触发,而不会询问用户 对于授权,它们受到几个限制:它们 无法访问需要授权的服务。例如,a 简单的触发器无法发送电子邮件,因为Gmail服务需要 授权,但一个简单的触发器可以翻译一个短语 语言服务,这是匿名的。
但是我想我可以使用onEdit事件以编程方式创建另一个时间驱动的触发器,而后者又会发送电子邮件。我知道两者(1)我的onEdit触发器都在它自己的工作,以及(2)手动运行该函数以编程方式创建时间驱动的触发器来发送电子邮件,自己工作。但是当我把2放在1里面时,它不起作用。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssName = ss.getName();
var budgetLeft = ss.getRange("Test!B1").getValue();
var emailAddress = ss.getRange("Test!B4").getValue();
if (budgetLeft <= 4860) {
function SendEmailOnTrigger() {
MailApp.sendEmail({
to: emailAddress,
subject: "Warning: " + ssName,
htmlBody: "Sample Message",
});
}
}
function onEdit(e){
function createTimeDrivenTriggersTest() {
// Trigger TEST.
ScriptApp.newTrigger('SendEmailOnTrigger')
.timeBased()
.everyMinutes(1)
.create();
}
}
它是否“知道”将要创建的时间驱动触发器将发送电子邮件,这在使用简单触发器启动时是不可接受的?这就是为什么它不起作用?提前感谢您的帮助。
答案 0 :(得分:1)
正如Sandy Good所解释的那样,可安装触发器从创建它们的进程继承授权。如果它是由您手动运行onEdit函数创建的,那么onEdit就像您一样,可以创建一个充当您的触发器。但是,如果一个函数是由一个简单的触发器执行的,那么它只被授权修改它所绑定的电子表格,而不执行任何其他操作。
要了解为什么需要这样做,想象一下,当您使用绑定脚本打开某人的共享电子表格时,该脚本中的onOpen
函数会安装触发器,该触发器会定期将您的电子邮件转发到其他位置。
因此,只需使用可安装的on-edit触发器而不是简单的触发器。
答案 1 :(得分:1)
以下是Google开发人员如何描述实现我打算实现目标的好方法:https://youtu.be/U9Ej6PCeO6s?t=2578
Make OnOpen创建一个菜单项,单击该菜单项将创建所需的触发器。此菜单项将复制到文件的副本中,因此只需单击菜单项即可使其生效。