Data dan daftar email dalam dua lembar berbeda

Aug 18 2020

Saya memiliki data di lembar Backend dan saya memiliki daftar email di lembar Pelanggan , tetapi email tidak terkirim ke daftar, apa kesalahan saya?

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"}); } masukkan kode di sini

Jawaban

1 Tanaike Aug 18 2020 at 12:40

Bagaimana dengan modifikasi ini?

Poin modifikasi:

  • Nilai yang diambil getValues()adalah array 2 dimensi. Dalam kasus Anda, emailListdari var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()adalah seperti [["email1"],["email2"],,,]. Dan juga, dalam kasus rentang "A2: A", tidak ada nilai yang mungkin disertakan.
  • Di MailApp.sendEmail(recipient, subject, body, options), recipientadalah string.

Dengan poin-poin di atas, kesalahan seperti itu terjadi. Ketika Anda ingin mengirim email ke semua email masuk emailList, itu diperlukan untuk menggunakan loop. Atau, bila Anda ingin menggunakan email emailListsebagai cc, tidak perlu menggunakan loop. Jadi di sini, saya ingin mengusulkan 2 pola berikut.

Pola 1:

Dalam pola ini, semua email yang masuk emailListdigunakan sebagai recipient.

Skrip yang dimodifikasi:

Jika skrip Anda diubah, harap ubah seperti berikut.

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

Pola 2:

Dalam pola ini, semua email yang masuk emailListdigunakan sebagai cc.

Skrip yang dimodifikasi:

Jika skrip Anda diubah, harap ubah seperti berikut.

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

atau

MailApp.sendEmail(null, subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
  • Dalam hal ini, bila nulldigunakan sebagai recipient, email tidak menyertakan alamat email to.

catatan:

  • Harap gunakan skrip yang dimodifikasi ini dengan mengaktifkan V8.

Referensi:

  • getValues ​​()
  • sendEmail (penerima, subjek, isi, opsi)