รายชื่อข้อมูลและอีเมลในสองแผ่นงานที่แตกต่างกัน

Aug 18 2020

ฉันมีข้อมูลในแผ่นงานแบ็กเอนด์และฉันมีรายชื่ออีเมลในแผ่นงานสมาชิกแต่อีเมลไม่ได้ถูกส่งไปยังรายการฉันผิดพลาดตรงไหน

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"}); }ใส่รหัสที่นี่

คำตอบ

1 Tanaike Aug 18 2020 at 12:40

การปรับเปลี่ยนนี้เป็นอย่างไร?

จุดแก้ไข:

  • ค่าที่ดึงมาgetValues()คืออาร์เรย์ 2 มิติ ในกรณีของคุณ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:

ในรูปแบบนี้อีเมลทั้งหมดในจะถูกใช้เป็นemailListrecipient

สคริปต์ที่แก้ไข:

เมื่อสคริปต์ของคุณได้รับการแก้ไขโปรดแก้ไขดังนี้

จาก:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
ถึง:
emailList.forEach(([email]) => {
  if (email != "") {
    MailApp.sendEmail(email, subject, body, {htmlBody: body, name: "company"});
  }
})

รูปแบบ 2:

ในรูปแบบนี้อีเมลทั้งหมดในจะถูกใช้เป็นemailListcc

สคริปต์ที่แก้ไข:

เมื่อสคริปต์ของคุณได้รับการแก้ไขโปรดแก้ไขดังนี้

จาก:
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ใช้เป็นอีเมลไม่รวมถึงที่อยู่อีเมลของrecipientto

บันทึก:

  • โปรดใช้สคริปต์ที่แก้ไขนี้ด้วยการเปิดใช้ V8

อ้างอิง:

  • getValues ​​()
  • sendEmail (ผู้รับหัวเรื่องเนื้อหาตัวเลือก)