如何修复关闭 MailApp.sendemail 步骤中的 "Invalid email undefined" 错误

How to fix "Invalid email undefined" error in closing MailApp.sendemail step

对于一个新课程项目,我要回到 google 来自 Google 工作表的 SendEmail 脚本,该脚本在几年前运行良好。 (来自 https://medium.com/@sebfung/custom-emails-from-a-spreadsheet-b11ff050bc5f 的原始代码)。现在我遇到了三个错误,不知道如何解决第三个错误。

完整代码如下。我的代码经验有限,但我认为我可以解决我遇到的前两个错误,因为它们是装饰性的,我的学生可以处理。 (首先,我可以去掉代码以在没有 "split" 的情况下生活,它曾经让我在 SendToName 称呼中删除电子邮件地址的后半部分。第二,我可以去掉 "replace" 代码来切换换行换行。)

但我不知道如何解决第三个错误。最后一个命令 (MailApp.SendEmail) 中的某些内容给我一个 "Invalid email: undefined (line 66, file "Code")" 错误。

我看不出这些可能是与电子表格相关的错误,因为我回到了几年前工作的早期电子表格,现在调试出现了同样的三个错误。

我很乐意就前两个错误提出建议,但我真的最需要并重视第三个错误的帮助。除非我修复它,否则我什至不能 运行 或测试任何东西。谢谢!

function sendEmail(to, score, questions, answer1, answer2, answer3, answer4, answer5) {
  var ss = SpreadsheetApp.getActiveSheet();
  var range = ss.getActiveRange(); 

  var numRows = range.getNumRows();
  var values = range.getValues();

  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    var to = row[1];
    var score = row[2];
    var questions = row[3]
    var answer1 = row[4];
    var answer2 = row[5];
    var answer3 = row[6];
    var answer4 = row[7];
    var answer5 = row[8];

    var sendToName = to.split('@')[0];

  // email content
  var emailSubject = "Quiz 1 Response";

  // plain text body - just in case receiver can't parse html formatted email
  var plainTxtBody = "Hello " + sendToName + ",\n" +
                 "You scored:\n" + score + "\n" +
                 "The questions were:\n" + questions + "\n" +
                 "Your answer:\n" + answer1 + "\n" +
                 "Your answer:\n" + answer2 + "\n" +
                 "Your answer:\n" + answer3 + "\n" +
                 "Your answer:\n" + answer4 + "\n" +
                 "Your answer:\n" + answer5; 

  // html formatting isn't necessary, but nice for reading :)
  var htmlBody = '<html><body>';
  var htmlFooter = '</body></html>';

  // replacing newline characters with paragraph breaks to make it more readable
  var scoreHTML = score.replace(/\n/g, "</p><p>");
  var questionsHTML = questions.replace(/\n/g, "</p><p>");  
  var answer1HTML = answer1.replace(/\n/g, "</p><p>");
  var answer2HTML = answer2.replace(/\n/g, "</p><p>");
  var answer3HTML = answer3.replace(/\n/g, "</p><p>");
  var answer4HTML = answer4.replace(/\n/g, "</p><p>");
  var answer5HTML = answer5.replace(/\n/g, "</p><p>");

  var emailMessage = "<p>Hello " + sendToName + ",</p>" +
                 "<p><strong>You scored:</strong><p>" +
                 "<p>" + scoreHTML + "</p>" +
                 "<hr>" + 
                 "<p><strong>Here are the questions--see the answer key on the Quiz 1 page on the wiki:</strong></p>" + 
                 "<p>" + questionsHTML + "</p>" +
                 "<hr>" +
                 "<p><strong>Here are your answers:</strong></p>" + 
                 "<p>" + answer1HTML + "</p>" +
                 "<p>" + answer2HTML + "</p>" +
                 "<p>" + answer3HTML + "</p>" +
                 "<p>" + answer4HTML + "</p>" +
                 "<p>" + answer5HTML + "</p>";


  htmlBody += emailMessage + htmlFooter;

  // GmailApp must have default recipient, subject, body attributes followed by jsobject options {}
  // Differs from MailApp syntax but has more options -- see documentation on GmailApp
  MailApp.sendEmail(to, emailSubject, plainTxtBody, { 
                 htmlBody: htmlBody,
                    });
   }
}

脚本确实有效。 Var "to" 可能不包含有效的电子邮件地址。确保您在电子表格中选择了一个活动范围。另请注意,数组中的第一项的索引为 0。这反映了您选择的第一列。 您可以设置断点并使用调试器或使用 Logger.log(to);查看 -> 日志将显示 var 的结果。