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

電脳備忘録

下記のような感じのメールを一括で送信したかったので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
Newer
Older
Dark
Light
menu