функция sendEmails () из Google Sheet: сообщение об ошибке = исключение: не удалось отправить электронное письмо: нет получателя (строка 17, файл «SendEmail») - PullRequest
0 голосов
/ 03 марта 2020

У меня возникли проблемы с запуском функции sendEmails () из моего листа Google. Я написал сценарий из этого урока: https://developers.google.com/apps-script/articles/sending_emails он написан в мае 2009 года, я не знаю, всегда ли он актуален. Вот сценарий из учебника:

/**
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 2);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var subject = 'Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Я следую тому, что я должен сделать на листе Google (создать 1 столбец Адрес электронной почты, 1 столбец сообщения). Мои столбцы будут заполняться автоматически из формы Google. Вот почему я адаптирую скрипт и изменяю "var numRows = 2;" "var numRows = 1000;" включить первую строку 1000.

Скрипт «работает», когда я запускаю его вручную (нажмите кнопку воспроизведения). Письма отправляются, но я получаю сообщение об ошибке: Исключение: не удалось отправить электронное письмо: нет получателя (строка 17, файл "SendEmail")

Однако это не работает с моим вызывать. Я установил триггер: «SendEmails» / «Из электронной таблицы» / «При отправке формы» (я предполагал, что именно так я должен настроить? Но я пытаюсь с типом события «При редактировании» и «При изменении», и кажется, та же проблема = не работает) как установить триггер

Когда я проверяю «Мои исполнения», я вижу состояние сбоя: [на французском языке] Исключение ошибки : Les paramètres ((class), String, String), корреспондент с подписью "MailApp.sendEmail". at sendEmails (SendEmail: 17: 13) [in engli sh Я предполагал] Исключение ошибки: параметры ((class), String, String) не соответствуют подписи "MailApp.sendEmail метод. на sendEmails (SendEmail: 17:13)

У вас есть идеи, где я не правильно установил скрипт и / или триггер? И конечно, как это исправить?

Большое спасибо за ваши ответы!

1 Ответ

2 голосов
/ 03 марта 2020

Хотя код, вероятно, работает нормально, я бы переписал его так:

function sendEmails() {
  var ss=SpreadsheetApp.openById("ssid");
  var sheet=ss.getSheetByName('**********Your sheet name***********');
  var startRow=2; 
  var numRows=2;
  var dataRange=sheet.getRange(startRow, 1, numRows, 2);
  //changed to getDisplayValues
  var data=dataRange.getDisplayValues();
  //changed to for loop
  for (var i=0;i<data.length;i++) {
    var row=data[i];
    var emailAddress=row[0]; 
    var message=row[1];
    var subject='Sending emails from a Spreadsheet';
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

Сообщение об ошибке указывает, что с вашими данными что-то не так. MailApp.send ожидает три строки, а ошибка указывает на то, что в столбце A что-то не так. Это может быть что-то в вашей электронной таблице или в том, как вы ее читаете.

Так что, возможно, изменение с getValues() на getDisplayValues() может быть лекарством.

.....

Вы должны также избегайте использования этого for (var i in data) {, когда объект данных является стандартным объектом массива. Для более полного объяснения, пожалуйста, прочитайте здесь

Ваша таблица должна выглядеть примерно так:

enter image description here

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

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