【GAS】スプレッドシートとGmailを利用した差し込み一括メール送信

電脳備忘録

本記事のソースコードの利用によって生じた損害について、当方は一切の責任を負いません。ご自身の判断と責任のもとで参照・ご利用ください。

この記事は最終更新から3年以上経過しています。

下記のような感じのメールを一括で送信したかったのでGAS対応したでございます。

ごむを様 

挨拶文など

【旧データ】
差し込まれた旧データの内容 
    
【新データデータ】
差し込まれた新データの内容

〆の文など

シートの構成

シートは「メールテンプレート」「送信リスト」の2シート。

メールテンプレート>

差込するメールのテンプレート。 2023-04-04-102.jpg{{}}の個所に「送信リスト」シートで入力された値が差し込まれる。

送信リスト>

差し込むデータを入力。 2023-04-04-101.jpgここに入力した値が差し込みデータとして使用される。項目は適当なので目的に合わせて適宜修正すること。

GASの仕様

Gmailアカウントで送信してよい環境であれば、こんな感じで一括送信するのが楽なのではないかしら。

簡単な仕様説明
A列が空白でなければ繰り返し処理をする
1件ずつ取得した内容を差し込んで、B列「メールアドレス」に入力されたメールアドレスに対してメールを送信する
メール送信したら「送信チェック」列に「送信済」と入力。(「送信チェック」列にが空白以外の時は処理しない)
コメントアウトしている「確認用」は出力に問題がないかチェックするときに使用。普段は使用しないのでコメントアウト

コード

function sendMail() {
  //*****************************************************
  //  差込処理
  //*****************************************************

  //スプレッドシートを取得
  var book = SpreadsheetApp.getActiveSpreadsheet();

  // 本文設定シートを取得
  var sheetAtesakiList = book.getSheetByName("送信リスト");

  // データが入力されている範囲を取得
  var datRange = sheetAtesakiList.getDataRange();

  // 処理対象の行数を取得
  const FValues = sheetAtesakiList.getRange('A:A').getValues(); //A列の値を全て取得
  const LastRow = FValues.filter(String).length; //空白の要素を除いた長さを取得
  //最終行
  var numRows = LastRow;  

  //*****************************************************
  //  本文
  //*****************************************************

  // メール本文シートを取得
  var sheetMail = book.getSheetByName("メールテンプレート");
  var body  = sheetMail.getRange(1, 2).getValue();


  //*****************************************************
  //  差込データの取得
  //*****************************************************

  //2行目から処理
  for (var i = 2; i <= numRows; i++) {
    // 対象行の差込データを取得

    //名前
    var sendName = sheetAtesakiList.getRange(i, 1).getValue();

    //送信先メールアドレス
    var getTo = sheetAtesakiList.getRange(i,2).getValue();

    //旧データ
    var oldData = sheetAtesakiList.getRange(i, 3).getValue();

    //新データ
    //var newData = sheetAtesakiList.getRange(i, 4).getValue();

    //件名
    var sasikomiGoSubject = "メールの件名";
    
    //本文
    var sasikomiGoBody = body;

    // 送信チェックの項目が空白なら処理する(何かしら入力されていたら処理しない)
    var done = sheetAtesakiList.getRange(i, 5).getValue();
    if(done === "" ){

      //宛名差込処理
      if (sendName != "") {
        sasikomiGoBody = sasikomiGoBody.replace("{{名前}}", sendName, "g");
      }

      //旧データの差込処理
      if (oldData != "") {
        sasikomiGoBody = sasikomiGoBody.replace("{{旧データ}}", oldData, "g");
      }

      新データの差込処理
      if (newData != "") {
        sasikomiGoBody = sasikomiGoBody.replace("{{新データ}}", newData, "g");
      }


      // 対象行の宛先を取得
      var to = getTo;
      
      //確認用
      // console.log("【送信先】\n" +to + "\n【タイトル】\n" + sasikomiGoSubject +"\n【本文】\n" + sasikomiGoBody);

      //↓↓↓送信しないときはここをコメントアウトすること↓↓↓
      MailApp.sendEmail(to, sasikomiGoSubject, sasikomiGoBody);


      //最後に「送信済」に設定する
      sheetAtesakiList.getRange(i, 5).setValue("送信済");
    }//送信チェック

  }//差し込みの繰り返し処理
  
}//sendMail
0%