【问题标题】:Sending emails twice with MailApp.sendEmail使用 MailApp.sendEmail 发送电子邮件两次
【发布时间】:2019-11-09 17:22:12
【问题描述】:

我创建了一个 google 应用程序脚本,用于在提交 Google 表单后自动发送电子邮件。脚本很简单:

function AutoConfirmation(e){
  var theName = e.values[1];
  var theEmail = e.values[2];
  var theSubject= e.values[3];
  var myEmail = "myemail@gmail.com";
  var theMessage = e.values[4];
  var subject = "Contact form response – " +  theSubject;
  var message = theMessage;
  MailApp.sendEmail (myEmail, subject,message);
}

但是,由于某种我无法弄清楚的原因,每次提交表单时,我都会收到两封即时电子邮件:

  1. 是否已提交数据(一切按预期工作)
  2. 为空(例如,主题是“联系表单回复 -”)

我什至在我拥有的另一个 Google 帐户中从头开始,并且发生了同样的问题。

感谢任何建议!

【问题讨论】:

  • 也许你有不止一个触发器。
  • 几个月前我们遇到了用户收到虚假触发器的问题,但我们已经有一段时间没有看到这种情况了。这是该问题的链接:stackoverflow.com/questions/54834837/…

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


【解决方案1】:

问题似乎是由将表单响应同步到电子表格的内部流程引起的。在某些情况下,它会稍微更新先前提交的表单响应的“时间戳”列,这会导致这些行的 onFormSubmit 触发器再次触发(尽管事件对象不完整)。

工程团队仍在努力解决此问题,但与此同时,您可以通过过滤掉仅影响时间戳列的表单提交事件来解决此问题。由于您可以对表单响应表中的列重新排序,因此最好的方法是检查事件的范围是否仅涵盖单个列:

函数 onFormSubmit() { if (e.range.columnStart == e.range.columnEnd) 返回;

// 剩下的代码 // ... }

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2015-02-26
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多