GASで差し込みメール配信する
情シス/コーポレートITの業務の中で、個々のアカウント通知メールなどを一括で配信したい場面が度々出てきます。
手動での個別メール送信はオペレーションミスの原因にもなるので、Googleドキュメント&スプレッドシートで差し込みメール配信を行うGASを用意しておくと非常に便利です。
前置き
・本スクリプトは、メルマガ配信など社外への大量配信を目的にしたものではなく、同組織内でのメール通知を目的としています。対外的なメール配信については、然るべき信頼性の高い仕組みを利用してください。
・Gmailには1日あたりの送信数に制限がありますので、あまりに大量のメール送信は実施しないように注意してください。
1.テンプレートドキュメントを用意する
Googleドキュメントで、通知メールのテンプレートを作成しておきます。
変数となる箇所を{VALUE#}と記載しておきます。(今回は3つにしました)
2.スプレッドシートを作成する
一括配信の参照元のリストとなる、以下の画像のようなスプレッドシートを作成します。
[ドキュメントID]には、先の手順で用意しておいたGoogleドキュメントのファイルIDをセットします。
ファイルIDは、そのファイルを開いた際のURLのうち、以下の「XXXXXXXX」にあたるランダム文字列を指します。
https://drive.google.com/a/jmty.jp/file/d/XXXXXXXX/
[添付ファイルID]は、配信メールにファイルを添付したい場合のみセットしてください。あらかじめ添付したいファイルをGoogleドライブ上に配置しておき、そのファイルのIDをセットします。(IDの調べ方は上記と同じです)
PDFなど、ブラウザで直接開けないGoogleドライブ上のファイルのURLは、対象のファイルの[共有]メニューから共有リンクのURLを表示すれば確認することができます。
3.スクリプトを作成する
先の手順で作成したスプレッドシートに、以下のスクリプトを追加します。
※スプレッドシートのレイアウトをカスタマイズしている場合は、開始行数やカラム指定位置は適宜修正してください
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
//実行メニューを作成
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu("GAS実行");
menu.addItem("メール送信実行", "sendMergeEmail");
menu.addToUi();
}
function sendMergeEmail(){
var lastColum = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
var startRow = 6;
var numRows = lastRow - startRow + 1;
var dataRange = sheet.getRange(startRow, 1, numRows, lastColum);
var data = dataRange.getValues();
var strFrom = sheet.getRange(1,2).getValue();
var docID = sheet.getRange(2,2).getValue();
var attachementID = sheet.getRange(3,2).getValue();
//テンプレートテキストの取得
var docTemplate = DocumentApp.openById(docID);
var strTemplate = docTemplate.getBody().getText();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
row.rowNumber = i + startRow;
//Result列がブランクであれば処理を実行
if (!row[7]) {
var result = "";
try
{
var strVal1 = row[4];
var strVal2 = row[5];
var strVal3 = row[6];
//テンプレートテキスト内の変数を置換
var strBody = strTemplate.replace("\{VALUE1\}",strVal1).replace("\{VALUE2\}",strVal2).replace("\{VALUE3\}",strVal3);
var strTo = row[0]
var strCc = row[1]
var strBcc = row[2]
var strSubject = row[3]
var options = {};
options.cc = strCc;
options.bcc = strBcc;
options.from = strFrom;
//添付ファイル指定がある場合はoptionsに追加
if(attachementID){
var attachment = DriveApp.getFileById(attachementID);
options.attachments = attachment
}
//メール送信実行
GmailApp.sendEmail(strTo,strSubject,strBody,options);
result = "Success";
}catch(e){
result = "Error:" + e;
}
//実行結果をResult列にセット
sheet.getRange(row.rowNumber, lastColum).setValue(result);
}
}
}
スクリプトの中で、テンプレート中の変数(今回の例だと{VALUE1~3})をスプレッドシートでセットされた値に置換しています。
変数名は何でもいいですが、テンプレート文中で同じ文字列が出てくるとそちらも置換されてしまうので、通常出てこないような文字列がいいでしょう。
4.実行する
作成したスクリプトを実行します。
スクリプトを実行すると実際にメールが送信されてしまうので、Toに自身のアドレスをセットして、必ず最初にテストを実施しておきましょう。
スプレッドシートに記載されている内容に従い、以下のようにメールが配信されていきます。
補足
今回のスクリプトはプレーンテキストでのメール配信ですが、HTMLメール配信用のオプションも用意されているので、HTMLメールを配信したい方はこちらのGASリファレンスを参考にしてみてください。
この記事が気に入ったらサポートをしてみませんか?