はじめに
今回のビジボットは先日作成した「Googleスプレッドシート – ボタンを押すだけでメールを送信する機能」をベースに、スプレッドシートにメールアドレスの一覧リストがあれば、それを順番に送信するプログラムを作成しました。
正直、担当者が抜けてるとかアドレスが抜けてるとか、そういったチェック処理はしてないです。(笑)
↓↓前回記事↓↓
それでは、実行環境とコードについて説明していきたいと思います。
1.送信フォーマットを作成する
今回は3つのシートを作成して実行してみます。
- メールリスト
- 内容テンプレ
- メールテンプレ
それぞれシートで設定した簡単な数式も説明したいと思います。
※数式を使った方がより自動で簡単にできるから使ってます。
2.メールリスト
ここでは送信する宛先と担当者の名前を一覧で登録しておくシートで、数式など利用はしておらずそのままのデータを登録するイメージです。
※配信リストがあれば配信アドレスをセットします。

3.内容テンプレ
ここでは送信するための内容(本文)にあたる部分を書いていきます。送信する人によって本文を毎回変えて送っていることはあまりないと思うので、内容(本文)のテンプレートを作っていきます。
「宛先」と「担当者名」はプログラムで自動取得するため、空欄にしておいてください。

4.メールテンプレ
ここでは最終的に送信する宛先と件名(統一)、本文を入れてます。
Toには以下数式を入れておきます。
=’内容テンプレ’!B1
次にSubjectですが、ここもメールによって内容変えることはあまりないと思うので今回は「メルマガ風一括送信」とつけます。
最後にBodyですが、以下を入れておきます。
=’内容テンプレ’!B2&” さま”&char(10)&’内容テンプレ’!B3
すると、内容テンプレで取得した値を担当者であれば「さま」をつけた形にするなどカスタムできます
コピペだとシングルクォートが全角になってしまう場合があります。

5.プログラムの記述
以下今回作成したコードをそのまま記述しています。
解説は今回それぞれのコードの中に入れてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
function goGoMM() { //アクティブシートで指定した(こっちの方が一般的ね(笑)) var sheet = SpreadsheetApp.getActiveSpreadsheet(); //「メーリングリスト」のシートをアクティブにして、シート情報をmListに取得 var mList = sheet.setActiveSheet(sheet.getSheetByName("メールリスト")); //「内容テンプレ」のシートをアクティブにして、シート情報をbTempに取得 var bTemp = sheet.setActiveSheet(sheet.getSheetByName("内容テンプレ")); //「メールテンプレ」のシートをアクティブにして、シート情報をmTempに取得 var mTemp = sheet.setActiveSheet(sheet.getSheetByName("メールテンプレ")); //取得したmListの最終行を取得する var lastR = mList.getLastRow(); Logger.log("【lastR】:" + lastR); //lastRは最初から最後の行までをカウントしているので、対象となるデータが入っている個数をカウントしてしまってます。(タイトルもカウントしているってこと) var popUp = Browser.msgBox("送信確認!","送信対象数"+lastR+"件です。(1行目もカウントしてます)実行しますか?", Browser.Buttons.OK_CANCEL); if (popUp == 'ok') { //取得した最終行までの情報を配列で取得する var mlvalue = mList.getRange(1, 1, lastR, 2).getValues(); Logger.log("【mlvalue】:" + mlvalue); //lastRは6だが、1行目はタイトルなのでX回繰り返して欲しいため、iがより大きい場合は実行終了とする for(var i = 1; i < lastR; i++) { Logger.log("【mlvalue[" + i + "][0]】:" + mlvalue[i][0]); //mlvalueで取得した値を「内容テンプレ」の宛先にセット bTemp.getRange(1, 2).setValue(mlvalue[i][0]); Logger.log("【mlvalue[" + i + "][0]】:" + mlvalue[i][1]); //mlvalueで取得した値を「内容テンプレ」の担当者名にセット bTemp.getRange(2, 2).setValue(mlvalue[i][1]); //宛先と担当者名をセットし終わったら送信情報を取得 var add = mTemp.getRange(1,2).getValue(); var mailSubject = mTemp.getRange(2,2).getValue(); var mailBody =mTemp.getRange(3,2).getValue(); //送信情報をセットして送信! GmailApp.sendEmail(add, mailSubject, mailBody); } Browser.msgBox("送信しました"); } else { Browser.msgBox("キャンセルしました"); } } |
上記実行すると、「メールリスト」に入っているメーリングリストに対して担当者名とアドレスが取得され、送信したらまた次の値(担当者名とアドレス)をセットして送信を繰り返します。
繰り返す回数としては「メールリスト」の最終行文処理を繰り返すとしています。
for文がコピペすると「for(var i = 1; i < lastR; i++) {」になっている場合がありエラーになることがありますが、その場合は手直ししてもらえればと思います…orz
まずはいつも通り、送信確認が出てきます。
※表示用の変数を用意すればしっかりと「lastR – 1」で正確な値5が出てくる記述は可能です(笑)

処理が完了すると以下送信が完了通知を表示します。

そして処理の中に今回「Logger.log()」を入れているので、上記実行した結果をログで表示するとこんな感じ。
取得したい値がしっかりと取れていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
[19-02-03 07:22:59:721 JST] 【lastR】:6 [19-02-03 07:23:15:837 JST] 【mlvalue】:メール,担当者名,bzbot@bzbot.work,担当A,bzbot@bzbot.work,担当B,bzbot@bzbot.work,担当C,bzbot@bzbot.work,担当D,bzbot@bzbot.work,担当E [19-02-03 07:23:15:838 JST] 【mlvalue[1][0]】:bzbot@bzbot.work [19-02-03 07:23:15:840 JST] 【mlvalue[1][0]】:担当A [19-02-03 07:23:16:253 JST] 【mlvalue[2][0]】:bzbot@bzbot.work [19-02-03 07:23:16:255 JST] 【mlvalue[2][0]】:担当B [19-02-03 07:23:16:804 JST] 【mlvalue[3][0]】:bzbot@bzbot.work [19-02-03 07:23:16:806 JST] 【mlvalue[3][0]】:担当C [19-02-03 07:23:17:204 JST] 【mlvalue[4][0]】:bzbot@bzbot.work [19-02-03 07:23:17:206 JST] 【mlvalue[4][0]】:担当D [19-02-03 07:23:17:665 JST] 【mlvalue[5][0]】:bzbot@bzbot.work [19-02-03 07:23:17:666 JST] 【mlvalue[5][0]】:担当E |
そして受信ボックスを開くと送信がされたことも確認できました。
それぞれの担当者も自動(可変)で送信されています。

今回大きく学んだことはLogger.log ()で取得した結果解析をして記事に組み込んだほうがわかりやすいかな?と感じました。(笑)
ボタンに実行するfunctionをセットする方法などは前回の記事を参照してください。
改めてリンクはこちらに載せておきます。
ちなみに、ログの確認方法は以下記載しておきます!

最後までお付き合い頂きありがとうございました!