Lista de datos y correo electrónico en dos hojas diferentes

Aug 18 2020

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

1 Tanaike Aug 18 2020 at 12:40

¿Qué tal esta modificación?

Puntos de modificación:

  • Los valores recuperados por getValues()es una matriz bidimensional. En tu caso, emailListde var 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), recipientes 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 emailListcomo 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 emailListse 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 emailListse 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 nullse usa como recipient, el correo electrónico no incluye la dirección de correo electrónico de to.

Nota:

  • Utilice este script modificado habilitando V8.

Referencias:

  • getValues ​​()
  • sendEmail (destinatario, asunto, cuerpo, opciones)