こんにちは!
Yuki (@yukibnb) です。
今回はGoogle Apps Script (GAS) を使ってGoogleフォーム回答者と管理者に異なる内容のメールを自動送信する方法を紹介します。
コピペでそのまま使えるスクリプトに加えて、みなさん自身でカスタマイズしやすいようにポイントも詳しく解説します。
では見ていきましょう!
はじめに
実現したいこと
前提知識
今回紹介する内容は当ブログの以下記事の応用版です。
基本的には同じような手順となりますので、上記記事をすでにお試しの方はサクサク設定できると思います。
本記事の内容だけでも設定できますが、個々のポイントの細かい解説が気になる方は上記記事もあわせてご覧ください。
今回使用するサンプルフォーム
今回使用するサンプルGoogleフォームはこちらです。架空の「〇〇イベント」というイベントの参加応募フォームです。
一番上のメールアドレスに関する質問は[メールアドレスを収集する]オプションを使用しています。
[メールアドレスを収集する]オプションの詳しい解説は以下記事をご覧ください。
【コピペでOK!】GASでGoogleフォーム回答者のメールアドレスを取得する方法
そして「姓」、「名」、「電話番号」、「このイベントをどこで知りましたか?」という質問が続きます。
このGoogleフォームの回答者にお礼メールを、管理者に回答受信メールをそれぞれ自動送信します。
社外向けの応募フォームや問い合わせフォームなどだけでなく、社内向けの〇〇報告フォームや〇〇申請フォームなどあらゆるタイプのフォームで活用できます。
コピペでOK!Googleフォーム回答者と管理者に異なる内容のメールを自動送信する方法
スクリプトエディタを開く
Googleフォーム管理画面を開き、次の手順でGoogle Apps Scriptのスクリプトエディタを開いてください。
- 管理画面右上にある[⋮](点が縦に3つ並んだアイコン)をクリックする
- [スクリプトエディタ]をクリックする
するとスクリプトエディタが開きます。次の2点はお好きな名前に変更してください。
- プロジェクト名 (「無題のプロジェクト」と書いている箇所)
- スクリプト名 (「コード.gs」と書いている箇所)
スクリプトをコピペする
スクリプトエディタに以下のスクリプトをコピペしてください。
スクリプトエディタにもともと入力されていたfunction myFunction() { }
は消してください。
function autoEmails(e) { /* ◆◆ ↓↓ 回答者へのお礼メール ↓↓ ◆◆ */ /* ステップ1: フォームのデータを取得する */ //すべての質問と回答を取得する let itemResponses = e.response.getItemResponses(); //回答者のメールアドレスを取得する let recipient = e.response.getRespondentEmail(); /* ステップ2: 必要なデータを抽出する */ //個々の質問と回答を格納するための空配列を宣言する let questionAndAnswers = []; //for文(ループ)で変数itemResponsesから個々の質問と回答を取得する for(let i = 0; i < itemResponses.length; i++) { //質問のタイトルを取得する let questionTitle = itemResponses[i].getItem().getTitle(); //回答を取得する let answer = itemResponses[i].getResponse(); //未回答の質問かどうかで送信文章を調整する if(!answer) { questionAndAnswers.push(questionTitle + ": 未回答"); } else { questionAndAnswers.push(questionTitle + ": " + answer); } } /* ステップ3: 宛先、件名、本文を決める */ //メールの件名 //★★★お好きな件名に変更ください★★★ let subject = "【受付完了】〇〇イベントにご応募ありがとうございます" //メールの本文 //★★★お好きな本文に変更ください★★★ let body = "この度は〇〇イベントにご応募ありがとうございます。\n" + "\n" + "ご応募内容にお間違いがないかご確認頂けますようお願いいたします。\n" + "\n" + "============\n" //一次元配列questionAndAnswersをjoinメソッドを使って文字列を作成する //区切り文字は改行"\n" + questionAndAnswers.join("\n") + "\n" + "============\n" + "\n" + "〇〇イベントへのご参加心よりお待ちしております。" + "\n\n" + "------------\n" + "〇〇イベント実行委員会\n" + "Email: info@〇〇event.com\n" + "TEL: 0120-〇〇〇-〇〇〇\n" + "HP: https://〇〇event.com"; /* ステップ4: 回答者にメールを送信する */ //回答者にメールを送信する GmailApp.sendEmail(recipient, subject, body); /* ◆◆ ↑↑ 回答者へのお礼メール ↑↑ ◆◆ */ /* ================================== */ /* ◆◆ ↓↓ 管理者へのメール ↓↓ ◆◆ */ /* ステップ5: 管理者向けメールの宛先、件名、本文を決める */ //★★★管理者のメールアドレスを入力してください★★★ //複数名の管理者にメールしたい場合、カンマで区切って入力してください //例) "tanaka@mycompany.com, suzuki@mycompany.com" let adminRecipient = "管理者のメールアドレス"; //メールの件名 //★★★お好きな件名に変更ください★★★ let adminSubject = "【自動通知】Googleフォームで新規回答を受け付けました"; //メールの本文 //★★★お好きな本文に変更ください★★★ let adminBody = "Googleフォームで新規回答を受け付けました。\n" + "\n" + "内容を確認しご対応をお願いいたします。\n" + "\n" + "============\n" //一次元配列questionAndAnswersをjoinメソッドを使って文字列を作成する //区切り文字は改行"\n" + questionAndAnswers.join("\n") + "\n" + "============\n"; /* ステップ6: 管理者にメールを送信する */ //管理者にメールを送信する GmailApp.sendEmail(adminRecipient, adminSubject, adminBody); /* ◆◆ ↑↑ 管理者へのメール ↑↑ ◆◆ */ }
スクリプトを保存する
スクリプトをコピペするとこのようになります。
画像内のアイコンをクリックし、コピペしたスクリプトを保存してください。
トリガーを設定する
次にコピペしたスクリプトの関数autoEmails
のトリガーを設定します。
トリガーを設定することで回答者が回答を送信した時に関数autoEmails
が自動実行され、回答者と管理者に別々のメールが送信されます。
以下のようにトリガーを設定し[保存]ボタンをクリックしてください。
autoEmails
- [Head]
- [フォームから]
- [フォーム送信時]
- [毎日通知を受け取る]
トリガー設定方法の詳しい解説は以下記事をご覧ください。
【簡単!】Googleフォーム送信時にGASを自動実行する方法
GASを承認する
トリガー設定画面の[保存]ボタンをクリックすると、承認を求めるポップアップが表示されます。
GASを実行するGoogleアカウントをクリックし、承認しましょう。
承認手順の詳しい解説は以下記事をご覧ください。画像やGIF動画付きで詳しく確認できます。
【もう迷わない!】GAS初回実行時の承認方法
回答者画面から回答を送信する
回答者画面を開き、それぞれ回答を入力し送信しましょう。
回答者と管理者に異なる内容のメールが自動送信される
無事回答者と管理者にそれぞれ異なる内容のメールが自動送信されました。
それぞれのメール文面には回答内容が反映されています。
これでGoogleフォーム回答者にお礼メールを、そして管理者に回答受信メールを自動送信するGASの設定が完了しました!
では次にみなさん自身のGoogleフォームで自動メールを活用するためのポイントや注意点を解説します。
カスタマイズのポイントを紹介
2つのパート
関数autoEmails
は2つのパートで構成されています。
パートA: 回答者へのお礼メール
/* ◆◆ ↓↓ 回答者へのお礼メール ↓↓ ◆◆ */ 中略 /* ◆◆ ↑↑ 回答者へのお礼メール ↑↑ ◆◆ */
スクリプト前半部分のパートで回答者へのお礼メールを送信しました。
上記のようにコメントで囲った部分です。
このパートの中には以下4つのステップがあります。
- フォームのデータを取得する
- 必要なデータを抽出する
- 宛先、件名、本文を決める
- 回答者にメールを送信する
ステップ1~4の内容は以下基本版の記事と全くと同じです。ステップ1~4の詳しい解説は以下記事をご覧ください。
【コピペでOK!】GASでGoogleフォーム回答者にお礼メールを自動送信する方法
パートB: 管理者への回答受信メール
/* ◆◆ ↓↓ 管理者へのメール ↓↓ ◆◆ */ 中略 /* ◆◆ ↑↑ 管理者へのメール ↑↑ ◆◆ */
スクリプト後半部分のパートで管理者への回答受信メールを送信しました。
上記のようにコメントで囲った部分です。
手順自体は回答者向けと大きな違いはありません。
管理者向けの宛先adminRecipient
、件名adminSubject
、本文adminBody
を作成し、sendEmail
メソッドで管理者にメールを送信しました。
みなさん自身で本スクリプトをカスタマイズする際は、AとBどちらのパートか、1~6どのステップかを意識して頂くとスムーズにカスタマイズすることができます。
注意点
[メールアドレスを収集する]オプションを利用しない場合
//回答者のメールアドレスを取得する let recipient = e.response.getRespondentEmail();
今回紹介したGASのスクリプトでは、getRespondentEmail
メソッドを使用して回答者のメールアドレスを取得しています。
[メールアドレスを収集する]オプションを使用していない場合、getRespondentEmail
メソッドでは回答者のメールアドレスを取得できません。
その際は以下記事を参考にして回答者のメールアドレスを取得してください。
【コピペでOK!】GASでGoogleフォーム回答者のメールアドレスを取得する方法
未回答の質問がある場合
/* ステップ1: フォームのデータを取得する */ //すべての質問と回答を取得する let itemResponses = e.response.getItemResponses();
回答者がGoogleフォームで回答を送信すると、フォームのデータはe
となり、関数autoEmails
に渡されます。
そしてe
の中からすべての質問と回答を取得し、変数itemResponses
に格納します。
ただし、以下の質問タイプが「未回答」だった場合、それらの質問の内容と回答はe
に含まれません。
- ラジオボタン
- チェックボックス
- プルダウン
- 均等目盛
- 選択式 (グリッド)
- チェックボックス (グリッド)
e
に含まれないということは、for文で質問の内容と回答を取得することはできませんので送信メールの文章にも含まれません。
そのためこれらの質問タイプを使用する場合、回答を必須にすることをおすすめします。
まとめ
今回はGoogle Apps Script (GAS) を使ってGoogleフォーム回答者と管理者に異なる内容のメールを自動送信する方法を紹介しました。
応募フォーム、問い合わせフォーム、営業報告フォーム、経費申請フォーム、備品発注依頼フォームなど社外向け、社内向け問わず様々な場面で活用できます。
次回記事もご期待ください!