Не удалось отправить электронное письмо: нет получателя - PullRequest
0 голосов
/ 22 февраля 2019

Добрый день!Мне нужна помощь в отладке этой ошибки: «Не удалось отправить электронное письмо: нет получателя».Функция отправляет электронные письма на основе значений диапазона.Пожалуйста, проверьте код ниже.

  function sendArticleCountEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.setActiveSheet(ss.getSheetByName("Send-Emails"));
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), 5);
  var data = dataRange.getValues();

  for (i in data) {
    var rowData = data[i];

    var subject = 'DepEd Email/Account';
    var FirstName = rowData[0];
    var LastName = rowData[1];
    var GeneratedEmail = rowData[2];
    var Password = rowData[3];
    var emailAddress = rowData[4];

    MailApp.sendEmail({
    to: emailAddress,
    subject: subject,
    htmlBody: '<h3>' + 'Good day Mr./Mrs./Ms. '+ FirstName + ' ' + LastName +'!</h3>' +
      '<p>Here is your email/account (email and password):</p>' +
      '<p><span style="background-color: #ffff00;"><strong><a name="gEmail">' + GeneratedEmail + '</a></strong></span></p>' +
      '<p><span style="background-color: #ffff00;"><strong><a name="pword">' + Password + '</a></strong></span></p>' +
      '<p>You can now login to <a href="https://mail.google.com">mail.google.com</a> to check your account.</p>' +
      '<p>If you want to change password, login first then follow this <a href="https://myaccount.google.com/intro/signinoptions/password">link</a>.</p>'
    });


  }

  ss.getSheetByName('Form Responses 2').getRange(254, 12, sheet.getLastRow(), 1).copyTo(ss.getSheetByName('Form Responses 2').getRange(254, 14, sheet.getLastRow(), 1));

}

Функция запускается и отправляет все электронные письма, но затем выдает ошибку.Я подозреваю, что он возвращается к пустой строке и не может найти получателя, но у меня уже есть dataRange с sheet.getLastRow ().

1 Ответ

0 голосов
/ 22 февраля 2019

Часто в конце звонка Range#getValues() возвращается пустая строка.Мы можем добавить оператор if, чтобы пропустить отправку, если в строке нет данных:

 function sendArticleCountEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.setActiveSheet(ss.getSheetByName("Send-Emails"));
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), 5);
  var data = dataRange.getValues();

  for (i in data) {

    var rowData = data[i];

    if(!rowData[4]) continue; //Skip this iternation if no email

    var subject = 'DepEd Email/Account';
    var FirstName = rowData[0];
    var LastName = rowData[1];
    var GeneratedEmail = rowData[2];
    var Password = rowData[3];
    var emailAddress = rowData[4];

    MailApp.sendEmail({
    to: emailAddress,
    subject: subject,
    htmlBody: '<h3>' + 'Good day Mr./Mrs./Ms. '+ FirstName + ' ' + LastName +'!</h3>' +
      '<p>Here is your email/account (email and password):</p>' +
      '<p><span style="background-color: #ffff00;"><strong><a name="gEmail">' + GeneratedEmail + '</a></strong></span></p>' +
      '<p><span style="background-color: #ffff00;"><strong><a name="pword">' + Password + '</a></strong></span></p>' +
      '<p>You can now login to <a href="https://mail.google.com">mail.google.com</a> to check your account.</p>' +
      '<p>If you want to change password, login first then follow this <a href="https://myaccount.google.com/intro/signinoptions/password">link</a>.</p>'
    });


  }

  ss.getSheetByName('Form Responses 2').getRange(254, 12, sheet.getLastRow(), 1).copyTo(ss.getSheetByName('Form Responses 2').getRange(254, 14, sheet.getLastRow(), 1));

}

В качестве альтернативы , мы не можем получить последнюю строку: var dataRange = sheet.getRange(2, 1, sheet.getLastRow()-1, 5);

...