KiKu
KiKu

Reputation: 377

Prevents sending duplicates- is not working

I have created a script which sends automated email based on cell values, created for an approval workflow.

Script is working fine, however, I am not able to prevent sending duplicate emails

Please help with some tips

// 
var now = new Date();//mail semt date
var EMAIL_SENT = "EMAIL_SENT";// mail sent status
var approvalstatus = 'Approved';// Approved Status 

function SecondaryApproval() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;  // First row of data to process
var numRows = 100;   // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 16)
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var Ticket = row[0];
var RequesterEmail = row[2];
var Item = row[3];
var emailAddress = row[6];  // First column
var message = row[7];       // Second column
var emailSent = row[8];     // Third column
var date = row[9];
var yesNo = row[5];
if (yesNo === approvalstatus) { 
  var subject = "Secondary Approval  ";
  GmailApp.sendEmail(emailAddress, subject, "Dear " +  + "RequesterEmail" +  Ticket + ", \n\nThis is an email report of your link. \n\nYour link is " + Item + " \n\nKind regards,\nName ", {
                     from: "[email protected]",
                     name: "Account"});
  sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);
  sheet.getRange(startRow + i, 9).setValue(now);

  // Make sure the cell is updated right away in case the script is interrupted
  SpreadsheetApp.flush();
}
  else (emailSent === EMAIL_SENT); {  // Prevents sending duplicates
  }
}

Upvotes: 1

Views: 778

Answers (1)

user555121
user555121

Reputation:

You need to check for emailSent !== EMAIL_SENT before sending email:

// 
var now = new Date();//mail semt date
var EMAIL_SENT = "EMAIL_SENT";// mail sent status
var approvalstatus = 'Approved';// Approved Status 

function SecondaryApproval() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;  // First row of data to process
var numRows = 100;   // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 16)
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var Ticket = row[0];
var RequesterEmail = row[2];
var Item = row[3];
var emailAddress = row[6];  // First column
var message = row[7];       // Second column
var emailSent = row[8];     // Third column
var date = row[9];
var yesNo = row[5];
if (yesNo === approvalstatus && emailSent !== EMAIL_SENT) { 
  var subject = "Secondary Approval  ";
  GmailApp.sendEmail(emailAddress, subject, "Dear " +  + "RequesterEmail" +  Ticket + ", \n\nThis is an email report of your link. \n\nYour link is " + Item + " \n\nKind regards,\nName ", {
                     from: "[email protected]",
                     name: "Account"});
  sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);
  sheet.getRange(startRow + i, 9).setValue(now);

  // Make sure the cell is updated right away in case the script is interrupted
  SpreadsheetApp.flush();
}
}

Upvotes: 1

Related Questions