Dati e mailing list in due fogli diversi
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
Che ne dici di questa modifica?
Punti di modifica:
- I valori recuperati da
getValues()
è un array bidimensionale. Nel tuo caso,emailList
divar 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 emailList
as cc
, non è necessario utilizzare il ciclo. Quindi qui, vorrei proporre i seguenti 2 modelli.
Modello 1:
In questo modello, tutte le email in emailList
vengono 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 emailList
vengono 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
null
viene utilizzato comerecipient
, l'e-mail non include l'indirizzo e-mail dito
.
Nota:
- Si prega di utilizzare questo script modificato con l'abilitazione della V8.
Riferimenti:
- getValues ()
- sendEmail (destinatario, oggetto, corpo, opzioni)