我正在尝试在某个单元格具有所需值时自动发送电子邮件。我想出了如何不断地做到这一点,即触发器设置为每天在特定时间触发每天以检查条件并在满足时发送电子邮件。但是我希望在电子邮件发送一次后触发器停止工作。我以为我可以这样做:
我有一个功能,如果符合条件,会发送电子邮件。如果不满足条件,则会创建一个触发器,该触发器将再次运行该函数一次。依此类推,触发将继续创建,直到满足条件为止。
这是我写的代码:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssName = ss.getName();
var emailAddress = ss.getRange("Tab1!B4").getValue();
var Test1 = ss.getRange("Tab1!B6").getValue();
function SendEmailOnce(){
if (Test1 <= 10) {
MailApp.sendEmail({
to: emailAddress,
subject: "Sample subject: " + ssName,
htmlBody: "Sample message<br/> Regards, robot",
});
}
else {
function createTriggerCheckAgain() {
ScriptApp.newTrigger('SendEmailOnce')
.timeBased()
.after(60 * 1000)
.create();
}
}
}
由于某种原因,它不起作用。当我在Test1值为15时运行该函数,然后将值更改为5时,不会发送任何电子邮件。
如果它们是分开的,它的部分可以工作: 1.当我运行该功能时,如果值为5,则发送电子邮件。 2.在运行创建触发器的功能后,一分钟后发送电子邮件,值为5。
也许有一种更简单的方法可以做到这一点?我是JavaScript的新手。提前感谢任何建议。
答案 0 :(得分:2)
当您的触发器在60秒后运行时,Test1
不再定义,因此您无法检查undefined
是否为<= 10
。原因是因为只执行SendEmailOnce
中的代码,而不是代码之外的代码。 emailAddress
变量也是如此。
您需要在可以调用的函数中包含前四行代码,这将返回Test1
和emailAddress
的值,或将其包含在SendEmailOnce
函数中。
修改后的代码:
function SendEmailOnce(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssName = ss.getName();
var emailAddress = ss.getRange("Tab1!B4").getValue();
var Test1 = ss.getRange("Tab1!B6").getValue();
if (Test1 <= 10) {
MailApp.sendEmail({
to: emailAddress,
subject: "Sample subject: " + ssName,
htmlBody: "Sample message<br/> Regards, robot",
});
}
else {
function createTriggerCheckAgain() {
ScriptApp.newTrigger('SendEmailOnce')
.timeBased()
.after(60 * 1000)
.create();
}
}
}