Как исправить ошибку «Invalid email undefined» при закрытии шага MailApp.sendemail - PullRequest
0 голосов
/ 23 января 2019

Для нового курсового проекта я возвращаюсь к скрипту Google для SendEmail из Google Sheets, который отлично работал пару лет назад. (Оригинальный код от https://medium.com/@sebfung/custom-emails-from-a-spreadsheet-b11ff050bc5f). Теперь я получаю три ошибки и не могу понять, как исправить третью.

Полный код приведен ниже. У меня ограниченный опыт работы с кодом, но я думаю, что могу обойти первые две ошибки, которые я получаю, потому что они косметические, и мои студенты могут с этим справиться. (Во-первых, я могу извлечь код, чтобы жить без «разделения», которое раньше позволяло мне отбрасывать вторую половину адресов электронной почты в приветствии SendToName. Во-вторых, я могу извлечь код «замены», который переводит новую строку на разрывы абзацев .)

Но я не могу понять, как обойти третью ошибку. Что-то в последней команде (MailApp.SendEmail) выдает ошибку «Неверный адрес электронной почты: неопределено (строка 66, файл« Код »)».

Я не вижу, чтобы что-либо из этого могло быть ошибкой, связанной с электронной таблицей, поскольку я вернулся к более ранним таблицам, которые работали пару лет назад, и теперь при отладке возникают те же три ошибки.

Я был бы рад за предложения по первым двум, но мне действительно больше всего нужна помощь в этой третьей ошибке. Я не могу даже запустить или проверить что-либо, пока я не исправлю это. Спасибо!

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,
                    });
   }
}

1 Ответ

0 голосов
/ 23 января 2019

Скрипт работает. Var "to", вероятно, не содержит действительных адресов электронной почты. Убедитесь, что вы выбрали активный диапазон в вашей электронной таблице. Также обратите внимание, что первый элемент в массиве имеет индекс 0. Это соответствует первому столбцу в вашем выборе. Вы можете установить точку останова и использовать отладчик или использовать Logger.log (to); Вид -> Журналы покажут результат var to.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...