GmailApp.SendEmail()有时会发送两封电子邮件

问题描述 投票:1回答:1

〜20%的时间,我的Google应用脚本似乎是随机发送一封重复的电子邮件。我尝试将MailApp.sendEmail()切换为GmailApp.sendemail(),并添加了一些睡眠行,以防代码在更改工作表之前以某种方式再次运行。我只有一个on-change触发器运行脚本。也许与我的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();
}

触发器:Triggers

重复的电子邮件:Duplicate Emails

电子表格图片:Spreadsheet Image

感谢您的帮助,不胜感激。

google-apps-script google-apps
1个回答
0
投票

我还不确定这一点。但是,如果无法访问包含数据的电子表格,我对创建所有数据以对其进行测试不感兴趣。

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.