在 Google Apps 脚本中,无法以编程方式创建触发器以从 onEdit 触发器发送电子邮件
In Google Apps Script, can't programmatically create trigger to send email from onEdit trigger
我正在尝试创建一个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();
}
}
它是否"知道"将创建的时间驱动触发器将发送电子邮件,这在使用简单触发器启动时是不可接受的?这就是为什么它不起作用?提前感谢任何帮助。
正如 Sandy Good 所解释的那样,可安装触发器从创建它们的进程继承授权。如果它是由您手动运行 onEdit 函数创建的,则 onEdit 充当您,并且可以创建充当您的触发器。 但是,如果函数由简单的触发器执行,则它仅被授权修改其绑定的电子表格,而不执行任何其他操作。
要了解为什么需要这样做,请想象一下,当您使用绑定脚本打开某人的共享电子表格时,该脚本中的onOpen
函数安装了一个触发器,该触发器会定期将您的电子邮件转发到其他地方。
因此,只需使用可安装的编辑触发器,而不是简单的触发器。
Google开发人员描述实现我想要实现的目标的好方法的方式:https://youtu.be/U9Ej6PCeO6s?t=2578
使 OnOpen 创建一个菜单项,单击哪个菜单项可创建所需的触发器。此菜单项将复制到文件的副本中,因此只需单击菜单项即可使其工作。
- 如何在Google柱状图中动态添加行/列
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 使用Google Visualization动态调用构造函数
- Firebase2(Firebase.google.com)推送通知-从外部管理
- 悬停功能触发器
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- Google Adsense多次加载脚本
- 单击超链接时,如何使用Google Maps API v3缩放地图
- Google电子表格getValue([cell containing ])不返回制表符
- 实现一个建立在google.com之上的自定义搜索引擎
- 2个Analytics帐户中的Google Analytics事件触发器跟踪
- 时间驱动触发器在 Google 电子表格中不起作用
- 在 Google Apps 脚本中,无法以编程方式创建触发器以从 onEdit 触发器发送电子邮件
- google将v3事件触发器映射到json创建的标记上
- 使用 javascript 事件作为 google 跟踪代码管理器触发器
- Google Maps 和 Angular js:TypeError:无法读取 undefined 的属性“触发器”
- 如何为Google AppScript配置触发器
- 如何将参数传递给基于时间的Google App Script触发器
- Google App Script onFormSubmit触发器未触发