偶尔的异常:发送电子邮件失败:没有收件人(onFormSubmit)

Occasional Exception: Failed to send email: no recipient (onFormSubmit)

我有一个脚本,用于在有人提交表单时通过电子邮件发送回复。它大部分时间都有效,但有时(我喜欢的频率太高了)我在收件箱中收到此错误

onFormSubmit | Exception: Failed to send email: no recipient | formSubmit

表单将回复发送到 sheet,其中包含电子邮件正文的文本。这是代码:

function onFormSubmit(e) {
  var form = FormApp.openById('xyz'); 
  var lastRow = form.getResponses().length; //the length of the form results, i.e. the number of submission. We choose the one submitted now.
  var sheet = SpreadsheetApp.openById('abc').getSheetByName('Calculation'); //link to the responses spreadsheet
  var email = sheet.getRange(lastRow+1,2).getValue();
  var timestamp = sheet.getRange(lastRow+1,1).getValue();
  var temp = new Date(timestamp);
  var formattedDate = Utilities.formatDate(temp, "GMT", "HH:mm' GMT, 'd MMMM, yyyy");
  var sh1 = SpreadsheetApp.openById('abc').getSheetByName('Results'); //link to the results spreadsheet
  
  //results of part 1
  var title1 = sh1.getRange(lastRow+1,4).getValue(); 
  var subtitle1 = sh1.getRange(lastRow+1,5).getValue();
  var sentence1 = sh1.getRange(lastRow+1,6).getValue();
  var bullet1=[]; // = "<li>" + sh1.getRange(lastRow+1,6).getValue()+"</li>";
  for (col = 1; col<6; col++) {
    if (sh1.getRange(lastRow+1,col+5).getValue().length >2){
      bullet1 += "<li>" + sh1.getRange(lastRow+1,col+5).getValue()+"</li>";
    }
  }
  var subtitle2 = sh1.getRange(lastRow+1,12).getValue();
  var sentence2 = sh1.getRange(lastRow+1,13).getValue();
  var bullet2=[]; // ="<li>" + sh1.getRange(lastRow+1,8).getValue()+"</li>";
  for (col = 1; col<6; col++) { //4
    if (sh1.getRange(lastRow+1,col+12).getValue().length >2){ //5
    bullet2 += "<li>" + sh1.getRange(lastRow+1,col+12).getValue()+"</li>";
    }
  }
    
  var emailsubject = "Your Survey Results";
  var name = sheet.getRange(lastRow+1,27).getValue();
  var salutation = "Dear " + name + ","+'<br><br>'+"Thank you for your survey submission at "+ formattedDate +"."+'<br><br>';
  var result1 = '<h3>'+title1+'<small> TYPE</small></h3><h4>'+subtitle1+'</h4><p>'+sentence1+'</p><ul>'+bullet1+'</ul><h4>'+subtitle2+'</h4><p>'+sentence2+'</p><ul>'+bullet2+'</ul>';
  var signature = "Find out more ...";
  var emailbody = salutation +'<div style="width:450px"><table><tr><td style="background-color:lightblue; border: 1px solid black; padding: 10px;">'+ result1 +'</td></tr></table></div><br>'+ signature;

  GmailApp.sendEmail(email,emailsubject, '', {htmlBody:emailbody});
}

是否有一些我可以添加的故障保护,或者我应该做一些代码更改以便它始终从 sheet 读取电子邮件地址?或者,也许这应该以不同的方式实施?我已经检查了 sheet 和表单结果,每种情况下都有电子邮件地址。

非常感谢。

你指定

var lastRow = form.getResponses().length;

var email = sheet.getRange(lastRow+1,2).getValue();

换句话说,如果您有 5 个表单回复,您希望电子邮件地址位于第 6 行第 2 列(因此单元格 B6)。

  • 在没有看到您的数据的情况下,我无法判断此单元格是否确实包含有效的电子邮件地址。
  • 但是,您可以实施 if 语句来捕获电子邮件的空条目
  • 为此将您的代码修改为
...
if(email != "" && email != " "){
  GmailApp.sendEmail(email,emailsubject, '', {htmlBody:emailbody});
}

更多信息:

如果您想确保 email 包含有效的电子邮件地址,您可以按 here.

进行操作