当某个单元格具有所需值时,我正在尝试自动发送电子邮件。我想好了如何不断地做到这一点,也就是说,每天都会在一天中的某个时间触发一个触发器,以检查条件并在满足条件时发送电子邮件。但我希望触发器在发送一次电子邮件后停止工作。我想我可以这样做:
我有一个功能,如果满足条件,就会发送电子邮件。若不满足条件,将创建一个触发器,该触发器将再次运行该函数。依此类推,触发器将继续创建,直到满足条件为止。
这是我写的一个代码:
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的新手。提前感谢您的任何建议。
当触发器在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();
}
}
}