Misc

注意: 自分自身のメモとして書いています。動作保証はしませんし、問い合わせされてもお答えできません。

Google フォームの投稿に対して自動返信メールを送るスクリプトの設定
参考にしたサイト: Googleフォームで自動返信システムをサクッとつくる

  1. google ドライブからフォームを作成する
  2. 返信用スクリプトを作成する
    フォームを開き、「ツール」→「スクリプトマネージャ」→「新規作成」→「フォーム」
    スクリプトの名前は auto-reply とか自動返信とか、分かればなんでもよい。
  3. テンプレ文面を削除かコメントアウト、下記の内容をコピペして適宜編集する
    function FormReply(e){
      // フォーム登録内容の取得
      var itemResponses = e.response.getItemResponses();
        
      // フォーム登録内容を文章としてコピー
      var post_copy = '';
      for (var i = 0; i < itemResponses.length; i++) {
        var itemResponse = itemResponses[i];
        var question = itemResponse.getItem().getTitle();
        var answer = itemResponse.getResponse();
        post_copy += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; 
      }
      
      // 送信先の名前
      var to_name = itemResponses[Q_NAME].getResponse() + ' 様\n\n';
      
      // 送信先メールアドレス
      var to_address = itemResponses[Q_ADDRESS].getResponse();
        
      // メッセージ本文
      var message = '[イベント名]へ参加申し込みをいただきありがとうございます。\n\n';  
      
      // あいさつ文
      var greeting = 'それでは、当日お待ちしております。\n\n';
      greeting += '名前(Name)\nMail:xx@xx\nURL:http://www.xx.xx\n\n';  
    
      // メールの送信
      // タイトル
      var title = '申し込みを受け付けました:[イベント名]';
      // メール本文
      var content = to_name + message + greeting + '- - - - -\n以下の内容でフォームが送信されました。\n\n' + post_copy;
      
      // 処理中の返信内容をログに保存
      Logger.log(to_address);
      Logger.log(content);
      
      GmailApp.sendEmail(to_address, title, content, {from:'xx@xx', name:'name', cc:'cc@xx'});
    }
    
  4. トリガーの設定
    「フォームに新規投稿があったら自動返信する」というスクリプトの起動条件を設定する。
     手順2、3のスクリプト編集画面で「リソース」→「現在のプロジェクトのトリガー」から新しいトリガーを追加で「フォームから」ー「フォーム送信時」と設定する。
     保存すると承認を求められるので、承認する。
  5. テストする
     フォーム本体の編集画面に戻り、「ライブフォームの表示」からテスト投稿してみる。

注意事項

  • 手順3:返信メールの from アドレスは、このフォームのオーナーである Gmail アカウントに紐付けられたアドレスでなければならない(GmailApp を起動してメールを送るため)。
    Gmail アカウントにメールアドレスを追加するには Gmail ホーム画面右上の歯車マーク→「設定」→「アカウントとインポート」タブ→「名前:」から。
  • 手順3:名前と送信先アドレスの位置(Q_NAME, Q_ADDRESS)はフォームの設問の設定順番による。
    n 番目の設問の回答を取り出すには itemResponses[n-1].getResponse() とする(順番のカウントが0始まりのため)。
  • 手順4:トリガーの承認はフォームのオーナーである Gmail アカウントのもとで行う。
    他のアカウントで承認すると、手順3で設定した返信メールの from アドレスと合致しないのでエラーになる。
    複数アカウントでフォームを共有して編集している場合には注意する。
  • 手順5:スクリプトの編集画面の「実行」ボタン(横向きの▲)を押してもエラーになるので、実行ボタンでのテストはしない。
    (技術的な理由:FormReply 関数の引数 e は、フォームから投稿があると中身が代入され、処理が終わるたび空に戻される(と思われる)。なので何も投稿せずに実行ボタンを押すと e が空なので「response は定義されていません」のようなエラーが出る。)