Отправка электронных писем с запуском функции через триггеры на основе времени

Цель: АВТОМАТИЧЕСКИ запустить сценарий для отправки электронного письма, когда дата == сегодня

Проблема: Скрипт работает при ручном запуске, но при использовании 'Триггеров текущего проекта' я получаю:

  • НЕТ сообщения об ошибке
  • НЕТ электронной почты
  • Лист не заполнен с 'EMAIL_SENT'

Скрипт:

// Send email reminder to the team
var EMAIL_SENT = "EMAIL_SENT";
function sendEmails3() {
  var today = new Date().toLocaleDateString();  // Today's date, without time

  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1 // Get last row, -1 because your startrow is 2;   // Number of rows to process
  // Fetch the range of cells A2:B999
  var dataRange = sheet.getRange(startRow, 1, numRows, 999)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailAddress = row[8];  // First column
    var subject = row[9];     // Second column
    var message = row[10];    // Third column
    var emailSent = row[11];
    //var reminderDate = row[6].toLocaleDateString();  // date specified in cell G
    var cellValue, reminderDate; //Define variables at top of function

    cellValue = row[6]; // date specified in cell C
    if (!cellValue) {continue;} //If there is no cell value continue looping

    if (typeof cellValue === 'object') {
      reminderDate = cellValue.toLocaleDateString();
    } else {
      cellValue = new Date(cellValue);//Convert date as string to object
      reminderDate = cellValue.toLocaleDateString();
    }

    if (reminderDate != today)      // Skip this reminder if not for today
      continue; 

    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      MailApp.sendEmail(emailAddress,subject,message);
      sheet.getRange(startRow + i, 12).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();     
    }
  }
}

Я сослался на следующие существующие вопросы и ответы:

  1. Отправлять электронные письма с напоминаниями на основе даты, но это вернуло ошибку "TypeError: Cannot найти функцию toLocaleDateString в объекте." при запуске с использованием 'Триггеров текущего проекта'. Он отлично работал при запуске вручную.
  2. Как вы отправляете дату напоминания на основе даты ячейки в Google Sheets?, что рекомендовало сломать var reminderDate = row[2].toLocaleDateString(); , но результат такой же, как указано выше: ничего не происходит при запуске через триггер.

person marie_    schedule 17.09.2018    source источник
comment
Проблема может заключаться в сравнении дат. Проверьте этот вопрос SO. Добавьте запись в журнал, чтобы проверить, действительно ли оператор if делает то, что вы от него ожидаете.   -  person Casper    schedule 17.09.2018
comment
Когда функция выполняется с помощью триггера, активным листом является первая вкладка, поскольку функция запускается на серверах Google (во всех случаях) и не имеет связанного экземпляра пользовательского интерфейса. Рассмотрим более надежный способ указания нужного листа, например getSheetByName. Запущенные скрипты могут по-прежнему генерировать сообщения об ошибках — рассмотрите возможность проверки журналов Stackdriver вашего проекта через Просмотр -> Журналы Stackdriver. Наконец, Date сравнение на равенство требует численного принуждения: stackoverflow.com/questions/492994/   -  person tehhowch    schedule 17.09.2018
comment
@marie Как вы справились со своим кодом Google Sheets для триггерной отправки электронной почты?   -  person Tedinoz    schedule 12.10.2018