
photo credit: Nokie vs. Verizon Junk Mail via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
引き続きGoogle Apps Scriptで簡単メールマガジンシステムを作成しています。
前回はこちらの記事。
Googleドキュメントで作成したメール本文にスプレッドシートの宛先リストの社名、宛名を差し込む方法についてお伝えしました。
今回はいよいよ差し込みをしたメール本文を順次Gmailで送信する処理を追加して、Google Apps Scriptによる超簡易メルマガ配信システムを完成させます!
といってもすごく簡単で、全体としてはたったの38行のスクリプトで実現できます。
では、よろしくお願いします!
前回のおさらい:ドキュメント本文に差し込みをしてログ出力
では、まず前回のおさらいをしていきましょう。
まず宛先リストをスプレッドシートで作っていましてこちらです。
メール本文はドキュメントで作っていましてこちらです。
{社名}、{姓}、{名}の3か所をそれぞれの送り先に合わせて差し込みをします。
スクリプトはこちらです。
function insertName(){ /* スプレッドシートのシートを取得と準備 */ var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* ドキュメント「メール本文テスト」を取得する */ var docTest=DocumentApp.openById("XXXXXXXXXXXX"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strCompany=mySheet.getRange(i,1).getValue(); //社名 var strSecond=mySheet.getRange(i,2).getValue(); //姓 var strFirst=mySheet.getRange(i,3).getValue(); //名 var strBody=strDoc.replace(/{社名}/,strCompany).replace(/{姓}/,strSecond).replace(/{名}/,strFirst); //社名、姓名を置換 Logger.log(strBody); //ドキュメントの内容をログに表示 } }
スクリプトの流れとしては
- スプレッドシートを取得
- ドキュメントからメール本文をstrDocに取得
- スプレッドシートの各レコードについて
- 社名、姓、名をstrDocに差し込んでstrBodyを作成
- strBodyをログ出力
となります。
今回は3-2の部分以降をGmailで送信するという内容に変更していけばOKということですね。
スプレッドシートのアドレス宛にGmailでメールを送る
Google Apps Scriptを使ってGmailでメールを送る方法はこちらの記事でお伝えしています。
GmailApp.sendEmailメソッドを使います。引数として
- toアドレス
- 表題
- 本文
- from:fromアドレス(任意)
- name:差出人名(任意)
が必要でした。fromアドレスとnameはなくても良いのですが、メルマガとしてはあるべきなので設定することにします。
表題、fromアドレス、差出人名を準備
表題、fromアドレス、差出人名については、各レコードに依存せずに固定の値なのでfor文の外で指定をしておきます。
var strSubject="メルマガ送信テスト"; //表題 var strFrom="XXXX@XXXX.co.jp"; //From var strSender="いつも隣にITのお仕事"; //差出人
メールアドレスを取得してメールを送信
各レコードのtoアドレスはD列に記載されていますので
var strTo=mySheet.getRange(i,4).getValue(); //toアドレス
で取得します。
これでGmailで送信するための引数はすべて揃いましたのであとは送るだけ。
/* メールを送信 */ GmailApp.sendEmail( strTo, //toアドレス strSubject, //表題 strBody, //本文 { from: strFrom, //fromアドレス name: strSender //差出人 } );
これでOKなはずです。
メルマガ配信の実行結果
実行をしてみますと
無事にメールが送られていますね。ちゃんと、社名や宛名の姓名などの差し替えもきいていますね。
現在は2件だけですが、件数が多くなった場合はとってもメール送信が楽になります。
ただ、Google Apps Scriptの仕様上、一般ユーザーの場合は1日の最大メール配信数が100通という制限がありますので、スプレッドリストに100件を超える宛先がある場合は数日にわけて配信する必要があります。(Businessユーザーなら1,500通まで)
その点は次回以降、解決をしていければと思います。
まとめ
以上、Google Apps Scriptで超簡易メールマガジンシステムを作成しました。
スクリプトはこちらです。
function insertName(){ /* スプレッドシートのシートを取得と準備 */ var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* ドキュメント「メール本文テスト」を取得する */ var docTest=DocumentApp.openById("XXXXXXXXXXXX"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 /* メール表題、fromアドレス、差出人名を準備 */ var strSubject="メルマガ送信テスト"; //表題 var strFrom="XXXX@XXXX.co.jp"; //From var strSender="いつも隣にITのお仕事"; //差出人 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strCompany=mySheet.getRange(i,1).getValue(); //社名 var strSecond=mySheet.getRange(i,2).getValue(); //姓 var strFirst=mySheet.getRange(i,3).getValue(); //名 var strTo=mySheet.getRange(i,4).getValue(); //toアドレス var strBody=strDoc.replace(/{社名}/,strCompany).replace(/{姓}/,strSecond).replace(/{名}/,strFirst); //社名、姓名を置換 /* メールを送信 */ GmailApp.sendEmail( strTo, //toアドレス strSubject, //表題 strBody, //本文 { from: strFrom, //fromアドレス name: strSender //差出人 } ); } }
ドキュメントやスプレッドシートの準備は必要ですが、とってもシンプルなスクリプトで各種Google Appsを操作そして連携できますね。
さすが、Google Apps Script!
次回はお伝えした通り、1日100件の壁がありますので、それをうまく対処していきたいと思います。
どうぞお楽しみに!