Googleドキュメントのフォーム送信時にメールでの通知

以前のスクリプトがGoogle App Scriptの変更により動作しなくなったため、下記内容は、2014年7月1日に改訂しました。今後もGoogle App Scriptのバージョンアップによって、動作しなくなる可能性があります。予めご了解ください。


Googleドキュメントのフォーム機能を利用して、参加申し込みフォームなどを作成した場合、申し込みした人に受付完了メールを送りたい場合があると思います。そいうときは、Google Apps Scriptを使えば、実現可能です。

Google Apps Scriptについては下記のサイトを参考にしてください。

http://codezine.jp/article/detail/5036 

ここでは、フォームの送信時に、送信された内容を申し込み人が入力したメールアドレスと管理者側であらかじめ設定したメールアドレスにメールするScriptのサンプルを提示しますので、これを参考してください。

下記のサンプルは、フォームが送信(サブミット)されたら、起動されるようにGoogleスプレッドシートの画面で設定しておきます。

動作の概要は、最終行を取得し、その中で申込者が入力することになっているメールアドレスが記述されているカラム名の値を送信先メールアドレスとして取得しています。その際にカラム名を格納しておくのが、MAIL_CLMN_NAMEという変数です。

つまり、最終行を取得したら、すべてのカラムを順番に取得して、変数bodyに格納しています。これがメール本文の内容になります。そして、カラム名が変数MAIL_CLMN_NAMEの値と同じ場合、変数mail_toにも格納しています。このmail_toがメールの送信先です。

あと、mail_admin変数には管理者のメールアドレスを指定しておき、メール送信の際に管理者にも同じメールが届くようにしています。


基本的には、subject, body, mail_admin, MAIL_CLMN_NAMEの4つの変数に、必要な値を代入するように下記のScriptを修正してから、Googleスプレッドシート(フォーム)の画面から、設定してください。
 
-------------------begin
// フォーム送信されたら起動され、最終行の内容をメールに記載して、送信する
function sendMailOnFormSubmitted(e) {
  Logger.log('sendMailByFormSubmitted() start');

  // 件名、本文
  var subject = "ここに送信するメールの件名を記述します"; 
  var body    = "ここに送信するメールの本文を記述します\n\n";

  // メールアドレス入力カラム名の指定 
  var MAIL_CLMN_NAME = 'メールアドレス';
  
  // メール送信先(管理者等)
  var mail_admin = "メールを送信する管理者のメールアドレスをここに記入します";
  var mail_cc    = mail_admin;
  var mail_reply = mail_admin;
  var mail_to    = '';

   try{
     // データの取得
     var data = e.response.getItemResponses();

     // メール本文作成と送信先メールアドレス取得
     for (var j = 0; j < data.length; j++ ) {
       body += "【"+data[j].getItem().getTitle()+"】\n";
       body += data[j].getResponse()+"\n\n";
       if(data[j].getItem().getTitle() == MAIL_CLMN_NAME){
         mail_to = data[j].getResponse();
       }
     }

     // メール送信
     if ( mail_to ) {
       MailApp.sendEmail(mail_to, subject, body, {replyTo : mail_reply});
       MailApp.sendEmail(mail_admin, subject, body, {cc : mail_cc, replyTo : mail_reply});
     }else{
       MailApp.sendEmail(mail_admin, "error spreadsheet none mailaddress", body, {cc : mail_cc, replyTo : mail_reply});
     }
  }catch(e){
     MailApp.sendEmail(mail_admin, "error spreadsheet func: sendMailByFormSubmiited()", e.message);
  }
}
-------------------end

 
尚、あくまでもサンプルなので、同時にたくさんの送信があった場合に着実に動作するかまでは検証してませんので、あらかじめご了承の上、ご利用ください。また、このサンプル利用により、いかなる被害、損害にあわれましても、当方ではいっさい責任を負いかねますので、この点もご理解の上、ご利用ください。

投稿日:2011-02-28