スプレッドシートを使わずにGoogleフォームの入力後に自動返信メールを送る


はじめに

先日、Googleフォームを使ってみる&カスタマイズしてみるという記事を書きました。

今回はフォームに入力されたメールアドレスに自動返信を行う機能を作ってみます。

Googleフォームの自動返信メールに関しては他の方のブログにも色々まとめられていたのですが、基本的にはスプレッドシートに保存してからメールを送信するというものでした。

スプレッドシートに保存する場合、スプレッドシートの制限を気にする必要があったので今回は、スプレッドシートに保存せず自動返信メールを送る方法を探してみました。

Googleフォームの公式ページには

フォームに大量のトラフィックや多数の回答が予測される場合、スプレッドシートに保存できるのは回答値の最初の 400,000 セルのみのため、Google フォームで回答を保存することをおすすめします。フォームの概要ビューや CSV でダウンロードしたファイルには、送信されたすべてのフォーム回答が常に反映されます。

と書かれており、スプレッドシートに保存しなくてもcsvであればフォームのページからダウンロードできるので、スプレッドシートの制限に引っかかる可能性がある場合はGoogleフォームでのみ回答を保存するようにしたほうがよいみたいです。

フォーム送信時のイベント調査

Google Apps ScriptのEventの項目を確認すると、Form Submit Eventsというのが定義されており、e.responseでFormResponseオブジェクトにアクセスできると書かれています。

FormResponseオブジェクトの項目を確認すると、サンプルコードもあり、これらを使えばスプレッドシートを使わずに返信メールを作ることができそうです。

サンプルフォーム作成

メールアドレスとクイズがあるフォームを作ってみます。

入力されたクイズの解答によって返信メッセージを変えて、入力されたメールアドレスに自動返信を行うようにします。

form1

イベント設定

  • メニューバーの「ツール」から「スクリプト マネージャ」を選択

form2

  • 「New」をクリックしてスクリプト作成ページへ移動

form3

  • スクリプト作成ページへ移動

form4

とりあえず「閉じる」を選択

  • デフォルトで表示されているmyFunctionは削除

form5

  • 以下のサンプルコードを貼付けて保存
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);
}
  • メニューバーの「リソース」から「現在のプロジェクトのトリガー」を選択

form6

  • 「今すぐ追加する」をクリック

form7

* 「sendEmail」、「フォームから」、「フォーム送信時」でトリガーを作成

form8

  • 承認画面が表示されるのでスクリプトの承認を行う

form9

form10

  • フォームの「スクリプト マネージャ」をリロードするとsendEmailが設定されている

form11

確認

  • フォームのメニューバーにある「ライブフォームを表示」をクリック

form12

  • 表示されたフォームにメールアドレスと回答を入力して送信

入力メールアドレスにメールが届きます

まとめ

フォームイベントを使用することで、スプレッドシートなしでメールの自動返信機能を作ることができました。

クイズの問題が気になった方はこちらをぜひ読んでみてください。

岸辺露伴は動かない (ジャンプコミックス)

参考