【问题标题】:How to send an email only to the last Google form submission?如何仅向最后一次 Google 表单提交发送电子邮件?
【发布时间】:2021-09-05 17:02:21
【问题描述】:

我正在使用 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);
  }
}

我不能每次都删除提交,因为另一个课堂工作是每周检查我们的在线银行系统中的购买是否已支付,此时提交将被删除。非常感谢任何帮助。

【问题讨论】:

    标签: google-apps-script google-sheets google-forms


    【解决方案1】:

    即使同时提交多个表单,此功能也会发送表单提交中的数据的电子邮件。如果您希望同时提交多个文件,您应该考虑在函数中使用 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();
      }
    }
    

    【讨论】:

      【解决方案2】:

      这将满足您的需要。使用 .getDataRange() 您可以获得孔板。然后你循环遍历数据并为每一行发送一封电子邮件。我假设你从某个地方得到了脚本?

      function sendAutomatedEmails() {
        var spreadSheet = SpreadsheetApp.getActiveSheet();
        var dataRange = spreadSheet.getRange(spreadSheet.getLastRow(), 1, 1, spreadSheet.getLastColumn()).getValues();
        var row = dataRange[0];
        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);
      }
      

      参考:

      【讨论】:

      • 代码来自我去年为我们中的一些拥有在家虚拟学习者的教师所做的事情。我们被要求每天给他们的父母(小学生)发电子邮件,以便签到。那张表格没有绑定到谷歌表格,只是我们为一个单独的学生填写每一行,然后每天更改正文列,因此每次运行时都需要通过电子邮件发送每一行。我知道我忽略了一些简单的事情,但是在花了早上的评分和其他任务之后,我只是想完成这件事来享受周末。
      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2015-03-28
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多