2つの異なるシートのデータとメーリングリスト

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次元配列です。あなたの場合、emailListvar emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()はのようなもの[["email1"],["email2"],,,]です。また、範囲「A2:A」の場合、値が含まれない場合があります。
  • MailApp.sendEmail(recipient, subject, body, options)recipientは文字列です。

以上の点で、このようなエラーが発生します。内のすべてのメールにメールを送信するemailList場合は、ループを使用する必要があります。または、emailListとしてメール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(受信者、件名、本文、オプション)