GmailApp.SendEmail () иногда отправляет два электронных письма - PullRequest
2 голосов
/ 25 сентября 2019

~ 20% времени мой скрипт приложения Google отправляет дубликаты электронной почты, по-видимому, в случайном порядке.Я попытался переключить MailApp.sendEmail () на GmailApp.sendemail () и добавить несколько спящих строк на случай, если какой-то код снова запустится, прежде чем он сменит лист.У меня есть только один триггер при изменении сценария.Возможно, это связано с тем, на каких устройствах мой gmail вошел в систему?Я очень новичок в этом, поэтому я мог просто упустить что-то очевидное.

Скрипт:

function SortResponse() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("SheetName");
  var Avals = sheet.getRange("A1:A").getValues();
  var Alast = Avals.filter(String).length;

  var range = sheet.getDataRange();
  var values = range.getValues();

  var lasteq = values[Alast-1][2];
  var lastloc = values[Alast-1][3];
  var sentbox = values [Alast-1][31];
  var questions = 24;
  Utilities.sleep(4000);
    for (var i = 5; i <= questions; ++i) {
      var g = sheet.getRange(Alast,i).getValue();
      if (g != 'Good' && g != 'N/A' && g !== "") {           
        sheet.getRange(2,i).setValue(values[0][i-1]);
       }
    }
  // Send Alert Email.
  if (sentbox != "sent") {
    var comments = values[Alast-1][25];
    var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName").getRange("AJ2:AJ20");
    var emailAddress = emailRange.getValues();
    var msgCell = sheet.getRange('AD1').getValues();
    var message = 'Equipment: '+lasteq+'\n at location: '+lastloc+'\n has been noted to need maintenance on: \n \n' +msgCell+'\n'+comments+' \n';
    var subject = 'Vehicle Inspection Maintenance Email Notification';
    GmailApp.sendEmail(emailAddress, subject, message);
    sheet.getRange(Alast,32).setValue("sent");
    Utilities.sleep(4000);
    sheet.getRange("B2:Z2").clearContent();
  }
  Utilities.sleep(4000);
  sheet.getRange("B2:Z2").clearContent();
}

Триггеры: Триггеры

ДублироватьЭлектронные письма: Дубликаты электронных писем

Изображение электронной таблицы: Изображение электронной таблицы

Спасибо за внимание, любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 сентября 2019

Я не до конца уверен в этом.Но без доступа к электронной таблице с данными я не заинтересован в создании всех данных для их проверки.

function SortResponse() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("SheetName");
  var range = sheet.getDataRange();
  var values = range.getValues();
  var lv=values.length-1;
  var lasteq = values[lv][2];//Equipment
  var lastloc = values[lv][3];
  var sentbox = values[lv][31];
  var qA=sheet.getRange(lv+1,5,1,20).getValues();
  var aVrg=sheet.getRange(2,5,1,20);
  var aV=aVrg.getValues();
  for (var i=0;i<qA.length;i++) {
    if(qA[0][i]!='Good' && qA[0][i]!='N/A' && qA[0][i]!="") {           
      aV[0][i]=qA[0][i];
    }
  }
  aVrg.setValues(aV);
  if (sentbox != "sent") {
    var comments = values[lv][25];
    var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName").getRange("AJ2:AJ20");//Dont know where this is
    var emailAddress = emailRange.getValues();
    var msgCell = sheet.getRange('AD1').getValue();
    var message=Utilities.formatString('Equipment: %s\nat location: %s\nhas been noted to need maintenance on:\n\n %s\n%s \n', lasteq,lastloc,msgCell,comments);
    var subject = 'Vehicle Inspection Maintenance Email Notification';
    GmailApp.sendEmail(emailAddress, subject, message);
    sheet.getRange(lv+1,32).setValue("sent");
  }
  sheet.getRange("B2:Z2").clearContent();
}
...