我正在使用 Google 表单作为教室“商店”,供学生购买元素。学生收银员将填写表格,然后表格会将电子邮件收据发送给购买元素的学生。该电子邮件使用我当前的代码和触发器发送得很好,但是,它会向每个新提交的所有提交发送一封电子邮件。我只想将其发送到最后一次提交。我知道这个问题可能有一个简单的解决办法,但我只是忽略了一些事情。这是我当前的代码:
function sendAutomatedEmails() {
var spreadSheet = SpreadsheetApp.getActiveSheet();
var dataRange = spreadSheet.getDataRange();
var data = dataRange.getValues();
for (var i = 1; i< data.length; i++) {
(function(val) {
var row = data[i];
var emailAddress = row[3];
var message = 'At '+ row[0] + 'You purchased the following:' + '\n\n' + row[4] + '\n' + row[5] + '\n' + row[6] + '\n' + row[7] + '\n' + row[8] + '\n' + row[9] + '\n' + 'Your total cost is $' + row[10];
var subject = 'Personal Purchase Reciept';
MailApp.sendEmail(emailAddress, subject, message);
})(i);
}
}
我无法每次都删除提交的内容,因为另一项类工作是每周检查我们的在线银行系统中的购买是否已付款,届时提交的内容将被删除。非常感谢任何帮助。
最佳答案
即使同时提交多个表单,此功能也会发送表单提交中数据的电子邮件。如果您希望同时进行多次提交,您应该考虑在函数中使用Lock Service。这不需要对数据表进行任何额外的读取,因为所有这些信息都已经在 formSubmit 事件对象中。
function sendAutomatedEmails(e) {
let message = 'At ' + e.values[0] + 'You purchased the following:' + '\n\n' + e.values[4] + '\n' + e.values[5]+ '\n' + e.values[6] + '\n' + e.values[7] + '\n' + e.values[8] + '\n' + e.values[9] + '\n' + 'Your total cost is $' + e.values[10];
MailApp.sendEmail(e.values[3], 'Personal Purchase Receipt', message);
}
function runThisToSetupTrigger() {
const ss = SpreadsheetApp.getActive();
if (ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == 'sendAutomatedEmails').length == 0) {
ScriptApp.newTrigger('SendAutomatedEmails').forSpreadsheet(ss.getId()).onFormSubmit().create();
}
}
关于google-apps-script - 如何仅向最后一次提交的 Google 表单发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69065508/