Dati e mailing list in due fogli diversi

Aug 18 2020

Ho i dati nel foglio Backend e ho la mailing list nel foglio Iscritti , ma l'email non viene inviata alla lista, dove ho sbagliato?

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, subject, body, {htmlBody: body, name: "company"}); }inserire il codice qui

Risposte

1 Tanaike Aug 18 2020 at 12:40

Che ne dici di questa modifica?

Punti di modifica:

  • I valori recuperati da getValues()è un array bidimensionale. Nel tuo caso, emailListdi var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()è come [["email1"],["email2"],,,]. Inoltre, nel caso dell'intervallo "A2: A", non è possibile includere alcun valore.
  • At MailApp.sendEmail(recipient, subject, body, options), recipientè una stringa.

In base ai punti precedenti, si verifica tale errore. Quando si desidera inviare l'e-mail a tutte le e-mail in emailList, è necessario utilizzare un ciclo. Oppure, quando si desidera utilizzare le e-mail in emailListas cc, non è necessario utilizzare il ciclo. Quindi qui, vorrei proporre i seguenti 2 modelli.

Modello 1:

In questo modello, tutte le email in emailListvengono utilizzate come recipient.

Script modificato:

Quando lo script viene modificato, modificalo come segue.

A partire dal:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
Per:
emailList.forEach(([email]) => {
  if (email != "") {
    MailApp.sendEmail(email, subject, body, {htmlBody: body, name: "company"});
  }
})

Modello 2:

In questo modello, tutte le email in emailListvengono utilizzate come cc.

Script modificato:

Quando lo script viene modificato, modificalo come segue.

A partire dal:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
Per:
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()});
  • In questo caso, quando nullviene utilizzato come recipient, l'e-mail non include l'indirizzo e-mail di to.

Nota:

  • Si prega di utilizzare questo script modificato con l'abilitazione della V8.

Riferimenti:

  • getValues ​​()
  • sendEmail (destinatario, oggetto, corpo, opzioni)