Escribí un script para enviar tipos específicos de correos electrónicos según el tipo de información enviada a través de los formularios de Google. Se activa al enviar el formulario. Sin embargo, cuando se realiza un nuevo envío, se envía el correo electrónico correcto para ese envío, pero también el último correo electrónico que se envió. (Si eso tiene sentido). Entonces recibo el nuevo correo electrónico (que quiero), pero una repetición del último correo electrónico que se envió (no deseado). ¿Cómo hago para enviar solo el nuevo correo electrónico?
function checkPurpose() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Mostrecent").getRange("C3"); var purpose = sheet.getValue(); Utilities.sleep(2000); if (purpose === "Agent Information Change"){ var agentSheet = ss.getSheetByName("Agentinfo"); var a = agentSheet.getLastRow(); for (var b = 2; b < a + 1; b++ ) { var emailAddress = agentSheet.getRange(b,1).getValue(); var subject = agentSheet.getRange(b,2).getValue(); var message = agentSheet.getRange(b,3).getValue(); MailApp.sendEmail(emailAddress, subject, message); } } else if (purpose === "Manager Information Change"){ var managerSheet = ss.getSheetByName("Managerinfo"); var x = managerSheet.getLastRow(); for (var y = 2; y < x + 1 ; y++) { var emailAddress2 = managerSheet.getRange(y,1).getValue(); var subject2 = managerSheet.getRange(y,2).getValue(); var message2 = managerSheet.getRange(y,3).getValue(); MailApp.sendEmail(emailAddress2, subject2, message2); } } else if (purpose === "Agent Onboard"){ var onboardSheet = ss.getSheetByName("Agentonboard"); var n = onboardSheet.getLastRow(); for (var i = 2; i < n + 1 ; i++ ) { var emailAddress3 = onboardSheet.getRange(i,4).getValue(); var subject3 = onboardSheet.getRange(i,5).getValue(); var message3 = onboardSheet.getRange(i,6).getValue(); MailApp.sendEmail(emailAddress3, subject3, message3); } } }
Me encontré con este mismo problema en el pasado, puedes probar esto:
Es posible que desee agregar una columna adicional a su hoja que contenga una cadena como: 'sí', esa cadena se agregará después de que se envíe un correo electrónico.
Lo evaluaremos cada vez que se envíe un correo electrónico para que no se repitan.
Usando una variable global como:
var isMailSent = 'Yes';
Usando el último else if
en su código:
var onboardSheet = ss.getSheetByName("Agentonboard"); var n = onboardSheet.getLastRow(); var startRow = 2; for (var i = 2; i < n + 1; i++) { if (isMailSent !== 'Yes' && n[1] !== "") { //if the row for colum mailSent does not contain 'YES' and it is not empty proceed with the following var emailAddress3 = onboardSheet.getRange(i, 4).getValue(); var subject3 = onboardSheet.getRange(i, 5).getValue(); var message3 = onboardSheet.getRange(i, 6).getValue(); MailApp.sendEmail(emailAddress3, subject3, message3); sheet.getRange(startRow + i, 8).setValue(isMailSent); //Here 8 is whe column number you added where isMailSent = 'Yes'; will be inserted } } }
Veo que estás repitiendo mucho código en la muestra compartida como:
var emailAddress = agentSheet.getRange(b,1).getValue(); var subject = agentSheet.getRange(b,2).getValue(); var message = agentSheet.getRange(b,3).getValue(); MailApp.sendEmail(emailAddress, subject, message);
Es posible que desee incluir todo eso en una función para llamar a la función en lugar de escribir todo el código. Si ayuda, aquí hay una pequeña representación de lo que tengo (esa incluye HTML, así que ignóralo)
No soy un profesional en la codificación, por lo que si se puede mejorar lo anterior, estoy abierto a recibir comentarios.