一斉メール送信の仕組みを自分で用意するのは考慮することが色々あって正直ダルいのですが、GASを利用すれば比較的かんたんに実現できます。
大まかな流れは以下の通りです。
- 文面をGoogleドキュメントで作成
- 送信者のメールアドレスと差込みたい値の一覧をGoogleスプレッドシートにまとめる
- スプレッドシートにAppsScriptを追加
専門学校の講師をしているのですが、生徒宛に実習用サーバのアカウントをメールで通知する際に利用していました。
ご注意
また申し訳ありませんが迷惑メールへの利用を抑止する目的で、プログラムの全文は有料といたします。
準備
文面を作成
Googleドキュメントに以下のような文面を準備します。 {{文字列}}
に当たる部分を送信時にスプレッドシートの値で置き換えます。これは別の書式(例えば%:文字列:%
など)にしてもかまいません。
{{studentnum}} {{name}} さん こんにちは。 月曜日の講義を担当している勝部です。 講義中に使用するWebサーバのアカウント情報を送付します。 ■SSH/SFTP ユーザーID: {{sshid}} パスワード: {{sshpw}} ポート番号: 22
このとき作成したGoogleドキュメントのURLをメモしておいてください。
送信先とデータを作成
Googleスプレッドシートを新規に作成し、必要なデータを入力します。
- 1行目はプログラムからは無視するので、メモ代わりです
- (当然ではありますが)送信先のメールアドレスが必ず必要です
プログラムを準備
スプレッドシートのメニューから「機能拡張」→「AppsScript」とたどります。
プログラムを記述する画面が出てくるので、プログラム全文 に掲載しているコードをコピペします(最初に入力されている情報はすべて消してOKです)
コード中にある以下の内容は適宜ご変更ください。
- GoogleドキュメントのURL
- メールの件名
- 差出人名
実行する
ここまで準備が整ったらあとは「実行」ボタンをクリックすれば、自動的にGMailからメールが送信されます。
実際に送信された文面はconsole.log()
で「実行ログ」に出力されるので、内容を確認することができます。
大まかな原理
GASの入門的な情報や詳細な使い方は過去記事を参照ください。ここではざっくりと利用している機能だけかいつまんで説明します。 blog.katsubemakito.net
ドキュメントの内容を取り出す
Googleドキュメントの内容はわずか2行で取り出すことができます。変数docText
に文面が入ります。
const doc = DocumentApp.openByUrl('https://docs.google.com/document/d/xxxxxxxxxx/edit'); const docText = doc.getBody().getText();
スプレッドシートの内容を取り出す
スプレッドシートの内部にGASを仕込む場合、getActiveSheet
メソッドで現在開いているシートのオブジェクトを取ってこれますので、これを利用して各種処理を行います。
const sheet = SpreadsheetApp.getActiveSheet(); // 現在のシートのオブジェクトを取得 const lastRow = sheet.getLastRow(); // 最後の行数を取得 for(let i=1; i<=lastRow; i++){ const name = sheet.getRange(i, 2).getValue(); // i行目の2列目の値を取り出す }
最終的にメールの本文を作成する際に、このスプレッドシートの内容で差込みを行う場合は、単純に文字列置換をしてやればOKです。以下ではnameを置換していますが、複数ある場合は同様の処理を追加します。
const body = docText.replace('{{name}}', name)
メールを送信する
GMailでメールを送信する場合はsendEmail
メソッドを実行するだけです。
GmailApp.sendEmail( 'foo@example.com', '件名', 'ここにメールの本文', { 'name': 'M.Katsube' // 差出人の名前 } );
プログラム全文
前述の通り迷惑メール送信への利用抑止のため、コード全文は有料とさせていただきたいと思います。
購入前に次の内容をご確認ください。
- プログラムを有効に利用するためには、初心者レベルのプログラミング(JavaScript)の知識が必要です。
- プログラムの転載や販売などは禁止します。
- プログラムを実行したことにより損害などが生じた場合でも、こちらでは責任を負いません。
非常にシンプルなコードですので、ある程度の知識がある方ならここまでの情報があればゼロから記述するのは難しくありません。ご自身の時短、または当ブログへの支援目的でご購入いただければと思います。