Скрипт Google Apps для отправки повторяющихся напоминаний не работает - PullRequest
0 голосов
/ 04 июля 2019

У меня есть фрагмент кода, предназначенный для отправки повторяющихся электронных писем каждые 8 ​​недель на список адресов в листе Google. Кажется, он не рассылает письма.

Я пробовал различные примеры, которые я нашел в Интернете, но безуспешно

    ScriptApp.newTrigger("sendEmails")
  .timeBased()
  .onWeekDay(ScriptApp.WeekDay.THURSDAY)
  .atHour(11)
  .nearMinute(00)
  .everyWeeks(8)
  .create();
function sendEmails() { 
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EMAILS") 
  var startRow = 2; 
  var numRows = sheet.getRange(1,4).getValue(); 
    var dataRange = sheet.getRange(startRow, 1, numRows, 2) 
  var data = dataRange.getValues(); 
   for (i in data) { 
    var row = data[i]; 
    var emailAddress = row[0];  
    var message = row[1]; 
    var subject = "mail subject here"; 
        MailApp.sendEmail(emailAddress, subject, message); 
  } 
}

Когда я запускаю скрипт вручную, он, кажется, работает нормально, поэтому я думаю, проблема в новой части триггера?

1 Ответ

1 голос
/ 04 июля 2019

Проблема:

В настоящее время у вас есть код, но он не будет использоваться вообще, потому что он не является частью функции.


Требование:

Триггер для запуска кода каждые 8 ​​недель.


Решение:

Разделите построитель триггера на отдельную функцию.

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

function newTrigger() {
  //clear all triggers
  var tg = ScriptApp.getProjectTriggers();
  if(tg.length>0){
    for(i=0;i<tg.length;i++){
      ScriptApp.deleteTrigger(tg[i]);
    }
  }
  //build new trigger
  ScriptApp.newTrigger("sendEmails")
  .timeBased()
  .onWeekDay(ScriptApp.WeekDay.THURSDAY)
  .atHour(11)
  .nearMinute(00)
  .everyWeeks(8)
  .create();
}

Примечания:

  • Вам нужно будет запустить эту функцию только один раз, чтобы настроить триггер.
  • В триггерах вашего проекта он будет отображаться как «каждую неделю», но на самом деле должен толькозапускать каждые 8 ​​недель, как мы указали в коде, используя .everyWeeks(8).

Ссылки:

...