スプレッドシートを使わずにGoogleフォームの入力後に自動返信メールを送る
はじめに
先日、 Googleフォームを使ってみる&カスタマイズしてみるという記事を書きました。
今回はフォームに入力されたメールアドレスに自動返信を行う機能を作ってみます。
Googleフォームの自動返信メールに関しては他の方のブログにも色々まとめられていたのですが、基本的にはスプレッドシートに保存してからメールを送信するというものでした。
スプレッドシートに保存する場合、 スプレッドシートの制限を気にする必要があったので今回は、スプレッドシートに保存せず自動返信メールを送る方法を探してみました。
フォームに大量のトラフィックや多数の回答が予測される場合、スプレッドシートに保存できるのは回答値の最初の 400,000 セルのみのため、Google フォームで回答を保存することをおすすめします。フォームの概要ビューや CSV でダウンロードしたファイルには、送信されたすべてのフォーム回答が常に反映されます。
と書かれており、スプレッドシートに保存しなくてもcsvであればフォームのページからダウンロードできるので、スプレッドシートの制限に引っかかる可能性がある場合はGoogleフォームでのみ回答を保存するようにしたほうがよいみたいです。
フォーム送信時のイベント調査
Google Apps ScriptのEventの項目を確認すると、Form Submit Eventsというのが定義されており、e.responseでFormResponseオブジェクトにアクセスできると書かれています。
FormResponseオブジェクトの項目を確認すると、サンプルコードもあり、これらを使えばスプレッドシートを使わずに返信メールを作ることができそうです。
サンプルフォーム作成
メールアドレスとクイズがあるフォームを作ってみます。
入力されたクイズの解答によって返信メッセージを変えて、入力されたメールアドレスに自動返信を行うようにします。
イベント設定
- メニューバーの「ツール」から「スクリプト マネージャ」を選択
- 「New」をクリックしてスクリプト作成ページへ移動
- スクリプト作成ページへ移動
とりあえず「閉じる」を選択
- デフォルトで表示されているmyFunctionは削除
- 以下のサンプルコードを貼付けて保存
function sendEmail(e) {
var formResponse = e.response;
var itemResponses = formResponse.getItemResponses();
var mailto = itemResponses[0].getResponse();
var answer = itemResponses[1].getResponse();
var text = '';
switch(answer) {
case "だが断る":
text = "NO!NO!NO!";
break;
case "だから気に入った":
text = "YES!YES!YES!YES!YES!";
break;
}
MailApp.sendEmail(mailto, "mail_replyのテスト", text);
}
- メニューバーの「リソース」から「現在のプロジェクトのトリガー」を選択
- 「今すぐ追加する」をクリック
- 「sendEmail」、「フォームから」、「フォーム送信時」でトリガーを作成
- 承認画面が表示されるのでスクリプトの承認を行う
- フォームの「スクリプト マネージャ」をリロードするとsendEmailが設定されている
確認
- フォームのメニューバーにある「ライブフォームを表示」をクリック
- 表示されたフォームにメールアドレスと回答を入力して送信
入力メールアドレスにメールが届きます
まとめ
フォームイベントを使用することで、スプレッドシートなしでメールの自動返信機能を作ることができました。
クイズの問題が気になった方は こちらをぜひ読んでみてください。