Lista de datos y correo electrónico en dos hojas diferentes
Tengo los datos en la hoja Backend y tengo la lista de correo electrónico en la hoja de Suscriptores , pero el correo electrónico no se envía a la lista, ¿dónde me equivoqué?
function sendEmail(e) {
var thisSheet = e.source.getActiveSheet();
if (thisSheet.getName() !== 'Backend' || e.range.columnStart !== 17 || e.range.rowStart == 1 || e.value !== 'LOCAL') return;
var body, headers = thisSheet.getRange(1, 1, 1, 6)
.getValues()[0],
thisRow = thisSheet.getRange(e.range.rowStart, 1, 1, 6)
.getValues()[0],
vehicle = thisRow[3],
vehicle2 = thisRow[4],
subject = "⚫ Vehicle Ready "+vehicle +" "+vehicle2
var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues();
body = "<i>The following vehicle is ready after wash</i><br><br>",
i = 0;
while (i < 6) {
body += '<font style="font-size:14px;color:grey;font-family: Arial">'+headers[i] +'</font>'+' - <b><font style="font-size:14px;font-family: Arial">' + thisRow[i] +'</font></b><br><hr width="30%" align="left" Color="#bfbfbf" size="0.75">';
i++;
}
MailApp.sendEmail (emailList, asunto, cuerpo, {htmlBody: cuerpo, nombre: "empresa"}); }Ingresa el código aquí
Respuestas
¿Qué tal esta modificación?
Puntos de modificación:
- Los valores recuperados por
getValues()
es una matriz bidimensional. En tu caso,emailList
devar emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()
es como[["email1"],["email2"],,,]
. Y también, en el caso del rango "A2: A", no se pueden incluir valores. - En
MailApp.sendEmail(recipient, subject, body, options)
,recipient
es una cadena.
Según los puntos anteriores, se produce tal error. Cuando desee enviar el correo electrónico a todos los correos electrónicos en emailList
, es necesario utilizar un bucle. O, cuando desee utilizar los correos electrónicos en emailList
como cc
, no es necesario utilizar el bucle. Entonces aquí, me gustaría proponer los siguientes 2 patrones.
Patrón 1:
En este patrón, todos los correos electrónicos en emailList
se utilizan como recipient
.
Guión modificado:
Cuando se modifique su secuencia de comandos, modifique de la siguiente manera.
Desde:MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
A:
emailList.forEach(([email]) => {
if (email != "") {
MailApp.sendEmail(email, subject, body, {htmlBody: body, name: "company"});
}
})
Patrón 2:
En este patrón, todos los correos electrónicos en emailList
se utilizan como cc
.
Guión modificado:
Cuando se modifique su secuencia de comandos, modifique de la siguiente manera.
Desde:MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
A:
MailApp.sendEmail("email address", subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
o
MailApp.sendEmail(null, subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
- En este caso, cuando
null
se usa comorecipient
, el correo electrónico no incluye la dirección de correo electrónico deto
.
Nota:
- Utilice este script modificado habilitando V8.
Referencias:
- getValues ()
- sendEmail (destinatario, asunto, cuerpo, opciones)