我是Google apps脚本的新手。我写了一个脚本来发送电子邮件,当有一个新的提交从谷歌表单使用数据和模板从电子表格。但是,它不仅会向新提交的内容发送电子邮件,还会向所有以前提交的内容发送电子邮件。整个剧本很长,所以我只抄了一小部分。有什么办法能修好它吗?
这是电子表格的链接https://docs.google.com/spreadsheets/d/1fhuwEndIS3khg3W19jpQnBAaCp_MMrD_bfATrdf2-4I/edit?usp=sharing
谢谢。
function sendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Calculation");
var lr = ss.getLastRow();
for (var i = 3; i<=lr;i++){
var currentEmail = ss.getRange(i, 1).getValue();
var currentName = ss.getRange(i, 3).getValue();
var currentScore1 = ss.getRange(i, 4).getValue();
MailApp.sendEmail(
currentEmail,
subjectline,
"HTML",
{ htmlBody: messageBody }
);
}
}
不要从电子表格中读取值,而是利用表单提交事件对象。这个事件对象有两个属性,包括表单提交值,一个是表单提交值的数组,顺序与表单列相同,另一个是每个问题的属性,每个问题都有一个值的数组。引用https://developers.google.com/apps-script/guides/triggers/events
这显示了需要对脚本进行的更改:
function sendEmail(e) {
var currentEmail = e.values[0];
var currentName = e.values[2];
var currentScore1 = e.values[3];
MailApp.sendEmail(
currentEmail,
subjectline,
"HTML",
{ htmlBody: messageBody }
);
}
注意:为了使事件对象工作,该函数应该由Google Sheets表单提交触发器调用。
相关的
- Google电子表格中的事件值和偏移量
- 如何发送电子邮件只到最后的谷歌表单提交?