谷歌应用程序脚本-当出现新行时自动发送电子邮件



我正在尝试构建一个脚本,该脚本可以在更新新行时自动发送电子邮件。我只想触发新更新的行,并在发送后标记为"已发送"。

这是目前运行良好的脚本。我可以点击运行它:

function sendMail() 
{
var name = 0;
var request = 1;
var id = 2;
var select = 3;
var time = 4;
var   email = 5;
var status = 6;
var error = 7;
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email list");
var data = ws.getRange("A2:I" + ws.getLastRow()).getValues();

data = data.filter(function(r){ return r[8] == true });
data.forEach(function(row)
{
emailTemp.fn = row[name];
emailTemp.req = row[request];
emailTemp.id = row[id];
emailTemp.erm = row[error];
emailTemp.ta = row[select];
emailTemp.time = row[time];
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[email], 
"Failure message", 
"Please submit again.",
{name: "My name", htmlBody: htmlMessage}
);
});
}

我已经研究过这个查询,但我仍然不知道它是如何工作的。

请分享一些相关的来源或解决方案,谢谢!

虽然我不确定mark 'sent' after sending them out.,如果;发送";被置于列"0";J";,从你回复的I assume it's filled in another column, like col8 or col 9.,我猜你想把";发送";到列";J";因为第8列和第9列(H和I(已经在您的脚本中使用过了。如果我的理解是正确的,那么下面的修改如何?

修改的脚本:

请将以下脚本复制并粘贴到谷歌电子表格的脚本编辑器中,然后保存脚本。请将OnEdit触发器安装到函数sendMail中。这样,当编辑单元格时,脚本就会运行。

function sendMail() {
var ws = SpreadsheetApp.getActiveSheet();
if (ws.getSheetName() != "Email list") return;
var name = 0;
var request = 1;
var id = 2;
var select = 3;
var time = 4;
var email = 5;
var status = 6;
var error = 7;
var emailTemp = {};
var emailTemp = HtmlService.createTemplateFromFile("email");
var data = ws.getRange("A2:J" + ws.getLastRow()).getValues();
var ranges = data.map(function (row, i) {
if (row[8] == true && row[9] != "sent") {
emailTemp.fn = row[name];
emailTemp.req = row[request];
emailTemp.id = row[id];
emailTemp.erm = row[error];
emailTemp.ta = row[select];
emailTemp.time = row[time];
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[email],
"Failure message",
"Please submit again.",
{ name: "My name", htmlBody: htmlMessage }
);
return "J" + (i + 2);
}
return "";
}).filter(String);
ws.getRangeList(ranges).setValue("sent");
}
  • 在这种情况下,当活动片材是";电子邮件列表";,脚本运行。并且,";发送";被置于列"0";J">

注意:

  • 我认为可以使用OnEdit的事件对象。但从你的问题来看,我认为你可能想直接用脚本编辑器运行脚本。所以我没有使用事件对象。

  • 第8列和第9列(H和I(似乎在您的脚本中使用,如emailTemp.erm = row[error];data = data.filter(function(r){ return r[8] == true });。所以我把";发送";到列";J";。请小心。

最新更新