Данные и список адресов электронной почты на двух разных листах

Aug 18 2020

У меня есть данные на листе Backend и у меня есть список рассылки на листе подписчиков , но письмо не отправляется в список, где я ошибся?

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 (список адресов электронной почты, тема, тело, {htmlBody: тело, имя: "компания"}); }введите код сюда

Ответы

1 Tanaike Aug 18 2020 at 12:40

Как насчет этой модификации?

Пункты модификации:

  • Значения, полученные с помощью, getValues()представляют собой двумерный массив. В вашем случае, emailListиз var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()похож [["email1"],["email2"],,,]. А также, в случае диапазона «A2: A», значения могут быть включены.
  • На MailApp.sendEmail(recipient, subject, body, options), recipientэто строка.

По указанным выше пунктам такая ошибка возникает. Если вы хотите отправить электронное письмо на все электронные письма emailList, необходимо использовать цикл. Или, если вы хотите использовать электронные письма в emailListas cc, использовать цикл не обязательно. Итак, я хотел бы предложить следующие 2 модели.

Схема 1:

В этом шаблоне все электронные письма emailListиспользуются как recipient.

Измененный скрипт:

При изменении вашего сценария внесите следующие изменения.

Из:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
Кому:
emailList.forEach(([email]) => {
  if (email != "") {
    MailApp.sendEmail(email, subject, body, {htmlBody: body, name: "company"});
  }
})

Схема 2:

В этом шаблоне все электронные письма emailListиспользуются как cc.

Измененный скрипт:

При изменении вашего сценария внесите следующие изменения.

Из:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
Кому:
MailApp.sendEmail("email address", subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});

или же

MailApp.sendEmail(null, subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
  • В этом случае, когда nullиспользуется как recipient, электронная почта не включает адрес электронной почты to.

Заметка:

  • Пожалуйста, используйте этот модифицированный сценарий с включением V8.

Рекомендации:

  • getValues ​​()
  • sendEmail (получатель, тема, тело, параметры)