Скрипты Служб Google Отправка автоматической электронной почты с триггером (без повторов) - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь настроить автоматическую электронную почту через листы Google, используя скрипты и триггер.

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

function sendloggeremails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow()

  for (var i = 72; i <= lr; i++) {
    var currentEmail = ss.getRange(i, 7).getValue();
    var currentClassTitle = ss.getRange(i, 3).getValue();

    MailApp.sendEmail(currentEmail, "complaint: customer number " + currentClassTitle ,  "Please check through the log as you have a new assigned to you");
  }
}

var i = 72 просто потому, что это последний ряд, я не хочу постоянно менять это вручную.Добавлены триггеры, но на данный момент мне все еще нужно войти в код, чтобы изменить var i.

Есть ли шанс, что кто-нибудь может помочь с этим?

1 Ответ

0 голосов
/ 18 декабря 2018

Отправка писем только один раз с циклом

Вы можете использовать что-то вроде этого.Для начала вы хотели бы поместить что-то в отправленный столбец, чтобы старые строки не пересылали свои электронные письма, и вы все равно сохраняете записи прошлых электронных сообщений.Я предложил поставить строку «Отправлено».Но тест задает вопрос: этот столбец пуст, так что все будет работать.

Очевидно, я не видел вашу электронную таблицу, поэтому я не знаю, куда поместить sentColumn, чтобы вы могли изменить var sentColumn =75 на все, что вы пожелаете, и все остальные места, которые он использует, будут соответственно меняться.

function sendloggeremails() {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sh=ss.getActiveSheet();//You should probably change this to getSheetByName() and then put in the correct name of the sheet
  var sentColumn=75;//If this column is not empty then don't send emails.  If you send any email then also put "SENT" into this column so you wont resend it next time you run the loop.
  sh.getRange(1,sentColumn).setValue("Sent");//I'm assuming a header row and I'm putting a Header Title there you can pick any open column you want
  var rg=sh.getDataRange();//This gets all of the sheets data into one one range
  var vA=rg.getValues();//This gets all of the values in above range in a two dimension object we often refer to as a two dimensional array.
  //If you have header row you can start at i=1
  for(var i=1;i<vA.length; i++) {//This will loop over all of the rows on the sheet.
    if(!vA[i][sentColumn-1]){//Heres the test to see if theres something in sentColumn.  If sentColumn is empty meaning truthy is false then it send the email
      var currentEmail=vA[i][6];//this replaces the getValue from column7 *1
      var currentClassTitle=vA[i][2];//this replaces the getValue from column3 *1
      MailApp.sendEmail(currentEmail, "complaint: customer number " + currentClassTitle ,  "Please check through the log as you have a new assigned to you");
      sh.getRange(i+1,sentColumn).setValue("SENT");//After sending email we put something.  In this case "SENT" into the sentColumn so that next through the loop we won send another email because its truthy will be true.
    }
  }
}
//*1 Array indices are 1 less that column numbers because arrays start counting from zero.

Если вы хотите, мы могли бы также удалить строки при их отправке.Все, что вам нужно сделать, это следить за тем, сколько строк вы удалили каждый раз, когда цикл запускается, скажем, с переменной, например, var n = 0, и затем номер строки, который будет удален, будет i-n + 1.И сразу после удаления вы увеличиваете n на единицу.

Вы можете настроить триггер, используя эту функцию.

function setupEmailTrigger() {  
  if(ScriptApp.getProjectTriggers().indexOf('sendloggeremails')==-1){
    ScriptApp.newTrigger('sendloggeremails').timeBased().everyDays(1).atHour(17).create();
  }
}

Он проверяет, существует ли триггер и уже существует ли триггерничего не делает.

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