【Google Apps Script(GAS)】メール本文をテンプレートから読み込んで送付する
- Google Apps Script内で長文メールを記述するのは面倒
- メール本文を手軽に書き換えられるようにしたい
「GoogleフォームでThankYouメールを自動返信する方法」でGoogle Apps Scriptでメールを送信する方法を解説していますが、こちらの解説ではメール本文をプログラム内で作成しているため、修正する時にいろいろと手間が発生します。
- 全体像が見えづらい
- 想定していた本文よりも改行が多い or 少ない
- 修正するたびに(正常に動作するかの)送信テストする必要がある
プログラムで記述する場合は改行など特殊な文字はコードを使って記述されます。ありがとうございます。\n\n
と書かれていても、改行が入ることが目で見てわかりづらいですね。
プログラムの記述方法を工夫してみやすくしておくこともできますが、それも手間です。
メール本文を修正した後も、念のため動作確認が必要となります(自信があればよいのですが・・・)。
その手間を解消するためにGoogleドキュメントでメールのテンプレートを作り、必要な部分だけプログラムで置換してあげるようにします。
そうすることでプログラムのテストは初回のみで、メール文面を修正した時はテスト不要となります。
改行も改行コードではなく、Enterの入力で設定できるようになり、全体像も把握しやすくなります。
- フォームを作成する
- メール本文のテンプレートを作成する
- プログラム内でメールテンプレートを読み込む
- テンプレート内の置換対象文字列を置換する
フォームを作成する
まずはフォームを作成します。
「Googleドライブ」の「新規」→「その他」メニューから「Googleフォーム」を選択してフォームを作成します。
メニューにない場合は「+ アプリを追加」からメニューに追加してください。
Googleフォームが立ち上がったら質問を追加します。
フォームに追加する質問はなんでも良いのですが、自動返信に使用するので「お名前」の項目は必ず追加してください。
「設定」から「メールアドレスを収集する」にチェックを入れるとメールアドレスの質問が追加されます。
こちらも必ず設定してください。
Googleフォームの作成方法は「Googleフォームの作り方とScriptでの回答の取得方法」で解説しています。
- 「お名前」の項目は質問に必ず追加する。
- 「設定」から「メールアドレスを収集する」にチェックを入れる
Googleドキュメントでテンプレートを作成する
次にGoogleドキュメントでメール本文のテンプレートを作成します。
メール本文はお問い合わせに対する自動返信を想定して作っていこうと思います。
※このメールはシステムからの自動返信です {{お名前}}様 お問い合わせありがとうございました。 以下の内容でお問い合わせを受け付けいたしました。 3営業日以内にご連絡いたしますので 今しばらくお待ちくださいませ。 —————————————————— GASタマイズ ——————————————————
このようにテンプレートを用意しました。
ブラウザのGmailからメールを作成する感覚で改行を使って、全体的なレイアウトを整えたり、著名を付けています。
{{お名前}}
の部分はお問い合わせフォームの「お名前」の項目で入力された内容で置換する予定の部分です。
プログラムに直接書くより、見やすく作れます。
作ったテンプレート使ってメール本文を作成する
フォームとメールのテンプレートができたら、作ったテンプレートを読み取って、メール本文を作成するプログラムを記述していきます。
記述が終わったら自動返信の設定を忘れないようにしましょう。
スクリプトエディタを起動してプログラムを書き込む
まずは、プログラムを記述するために「メニュー」->「スクリプトエディタ」からスクリプトエディタを起動します。
全体のプログラムはこちらです。
プログラムはコピペで使用できますが、★テンプレートドキュメントのIDの'1234567890abcdefghi'
の部分を先に作ったテンプレート(Googleドキュメント)のIDに変更する必要がありますのでご注意ください。
const MESSAGE_TEMPLATE_ID = '1234567890abcdefghi'; // ★テンプレートドキュメントのID
function sendThankYouMailWithTemplate(e) {
// ワーク変数
var name = '';
//回答のオブジェクトを取得
var itemResponses = e.response.getItemResponses();
// 回答者のメールアドレスを取得
var mail = e.response.getRespondentEmail();
//回答内容を取得
for (var i = 0; i < itemResponses.length; i++) {
var itemResponse = itemResponses[i];
var question = itemResponse.getItem().getTitle();
var answer = itemResponse.getResponse();
// 質問が「お名前」の場合
if (question == 'お名前'){
name = answer;
}
}
// メッセージを作成
var message = DocumentApp.openById(MESSAGE_TEMPLATE_ID).getBody().getText();
message = message.replace('{{お名前}}', name);
var title = 'お問い合わせを受け付けました。';
GmailApp.sendEmail(mail, title, message);
}
プログラムの解説
今回のポイントとなる箇所のプログラムを解説していきます。
メール本文に使うテンプレートを読み込むために、プログラムの冒頭でGoogleドキュメントのIDをconstで宣言しています。
このGoogleドキュメントのIDを使用してテンプレートをプログラム内で読み込むことができます。
引数に設定したeからgetItemResponses()で回答情報を取得することができます。
取得した回答情報(itemResponses)は配列形式なので、for文で一つ一つ取り出していき「お名前」の項目の回答を抽出します。
メッセージを作成する部分をテンプレートから読み込むようにしています。DocumentApp.openById(MESSAGE_TEMPLATE_ID).getBody().getText();
でGoogleドキュメントをStringで読み込むことができます。
読み込んだテンプレートを基にmessage.replace('{{お名前}}', name);
でアンケートの回答から取得した「お名前」で置換しています。
フォームが送信された時に動くようにトリガーを設定する
プログラムが書けたら、「トリガー」を設定していきます。
「トリガー」とは、プログラムを実行するきっかけだと思ってください。
トリガーを設定することで「毎日実行する」、「フォームの入力内容が送信されたら実行する」などプログラムに合わせて、実行タイミングを設定します。
今回の自動返信であれば、「フォームの入力内容が送信されたら実行する」を設定していくことになります。
トリガーの設定ダイアログを開く
トリガーを設定するために「トリガー設定ダイアログ」を立ち上げます。
スクリプトエディタの左メニューから「トリガー」を選択すると設定されているトリガーを確認できる一覧画面が開きます。
一覧画面の右下に「 トリガーを追加」ボタンをクリックすると図のようなダイアログが立ち上がります。
トリガーを設定する
「トリガー設定ダイアログ」が立ち上がったら、設定を行なっていきます。
いくつか設定項目がありますが、下記の項目を変更して「保存」ボタンをクリックてください。
実行する関数を選択:myFunction
イベントのソースを選択:フォームから
イベントの種類を選択:フォームの送信時
これで自動返信機能をつける作業は終わりになります。
最後にテストをしてしっかり動くことを確認しましょう。
フォームから入力を送信してテストする
「プログラムの書き込み」と「トリガーの設定」が終わったら、プログラムがしっかり動いて、自動返信が届くことを確認します。
実はプログラムがちゃんと動いていなかった・・・、トリガーの設定内容を間違っていたなどがあると意図した通りに動かないので、最後にしっかりと確認するようにしてください。
まとめ
自動送信するメールをGoogleドキュメントを使ってテンプレート化する方法を解説しました。
テンプレート化することで、プログラムで修正が必要な文章とあらかじめ作っておける文章を分けることができるので、メンテナンスが簡単になります。
メール自体も読みやすいレイアウトにしたり、装飾をしたりするので、Googleドキュメントで書くことで編集しやすいメリットがあるかと思います。
現役のシステムエンジニアです。
システム構築の経験を活かして、GoogleWorkspaceを使って業務効率化のための仕組み作りを考えています。