Données et liste de diffusion sur deux feuilles différentes

Aug 18 2020

J'ai les données dans la feuille Backend et la liste de diffusion sur la feuille Abonnés , mais l'e-mail n'est pas envoyé à la liste, où me suis-je trompé?

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"}); }entrez le code ici

Réponses

1 Tanaike Aug 18 2020 at 12:40

Et cette modification?

Points de modification:

  • Les valeurs récupérées par getValues()est un tableau à 2 dimensions. Dans votre cas, emailListde var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()est comme [["email1"],["email2"],,,]. Et aussi, dans le cas de la plage "A2: A", aucune valeur ne peut être incluse.
  • At MailApp.sendEmail(recipient, subject, body, options), recipientest une chaîne.

Par les points ci-dessus, une telle erreur se produit. Lorsque vous souhaitez envoyer l'e-mail à tous les e-mails dans emailList, il est nécessaire d'utiliser une boucle. Ou, lorsque vous souhaitez utiliser les e-mails dans emailListas cc, il n'est pas nécessaire d'utiliser la boucle. Alors ici, je voudrais proposer les 2 modèles suivants.

Modèle 1:

Dans ce modèle, tous les e-mails emailListsont utilisés comme recipient.

Script modifié:

Lorsque votre script est modifié, veuillez le modifier comme suit.

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

Motif 2:

Dans ce modèle, tous les e-mails emailListsont utilisés comme cc.

Script modifié:

Lorsque votre script est modifié, veuillez le modifier comme suit.

De:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
À:
MailApp.sendEmail("email address", subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});

ou

MailApp.sendEmail(null, subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
  • Dans ce cas, lorsque nullest utilisé comme recipient, l'e-mail n'inclut pas l'adresse e-mail de to.

Remarque:

  • Veuillez utiliser ce script modifié avec l'activation de V8.

Références:

  • getValues ​​()
  • sendEmail (destinataire, objet, corps, options)