【发布时间】:2016-08-18 00:25:45
【问题描述】:
我正在尝试制作一个 onEdit 触发器来发送电子邮件。我知道默认情况下它不起作用,如此处所述:
因为简单的触发器会自动触发,无需询问用户 对于授权,它们受到一些限制:它们 无法访问需要授权的服务。例如,一个 简单触发器无法发送电子邮件,因为 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();
}
}
它是否“知道”将创建的时间驱动触发器将发送电子邮件,而这在使用简单触发器启动时是不可接受的?这就是为什么它不起作用?提前感谢您的帮助。
【问题讨论】:
-
使用代码创建触发器也需要授权。你仍然有完全相同的问题。如果您试图找到绕过安全功能的方法,希望没有办法做到这一点。网络安全已经很糟糕了,你想找到一种方法让它变得更糟吗?
-
我不打算将其用于任何恶意行为。我正在尝试使用带有脚本和时间驱动触发器的模板电子表格来发送电子邮件,我可以重复多次。当我复制文件时,如果手动创建时间驱动的触发器,则不会复制它们。如果它们是以编程方式创建的,我需要手动运行创建它们的函数。我正在寻找一种设置方法,这样我就可以复制文件,授权绑定脚本从我的地址发送电子邮件,它就可以从那里工作。
-
如果这是供您自己使用的,请在您的帐户中手动创建一个可安装的“编辑时”触发器。如果您从代码编辑器设置触发器,在资源菜单下,当前项目的触发器,编辑时触发器将允许发送电子邮件。对于之前的任何负面影响,我们深表歉意。只是想让人们明白为什么会有这样的限制。
-
我的更高级别的问题是在资源中手动创建的触发器>当前项目的触发器在您复制文件时不会结转。所以我想我可以以某种方式在代码中创建触发器,它会在复制文件后立即工作。但我想这是不可能的,我最好的选择是手动执行此操作。感谢您的回复,不用担心负面影响。
-
您是否真的在脚本中调用过这些函数?我一定遗漏了一些东西,因为我认为您定义的任何函数都不会在上面的代码中运行。也许可以尝试 1. 删除
createTimeDrivenTriggersTest的函数定义,然后在onEdit中简单地创建触发器。 2. 将if (budgetLeft <= 4860)语句移到SendEmailOnTrigger函数声明中。
标签: javascript google-apps-script triggers google-sheets