2011年06月22日(Wed)
■ GoogleDocsのフォームからメールを送信する。
ちょっと必要があって調べた結果、GoogleDocsのフォームからデータ送信時、メールを送信するには二種類の方法があることがわかった。
ひとつは、フォームsubmit時に、データ更新があったことだけをスプレッドシートの所有者にメール送信する方法。これは、該当スプレッドシートの「ツール→通知の設定」で次のような項目があるので、「ユーザがフォームを送信したとき」と「メール その都度」をチェックし保存すれば良い。届くメールにはスプレッドシートのURLも記載されていて便利。
もうひとつは、フォームsubmit時に、フォームに登録したデータをメールに記載して、指定したメールアドレスに送信したい場合。これは、該当スプレッドシートにフォームに記入されたデータを読み込みメールに書き込むコードを書いて、イベントと関連づける。参考にしたのは、Google Docsのフォーム投稿者に確認メールを送信する - _development,。
手順としては、
- メール送信したいフォームのあるスプレッドシートを開く
- ツール→「スクリプト エディタ」を起動する
- スクリプト エディタ上で、メールを送信するコードを書く
- コードを保存する
- スクリプト エディタのトリガー→「Current Script's trigars」をクリック
- 現在のスクリプトトリガー→「No triggers set up. Click here to add one now.」をクリック
- Runに書いたコードのfunction名を指定、Eventsに「On from submit」を指定して保存
スクリプト エディタで拾えるカラムは、アルファベットでないとダメなので、フォーム作成時に、「質問のタイトル」は英語などアルファベットで記入し、捕捉文に日本語のタイトルや説明を入れるという工夫が必要。
わたしが書いたコードサンプル。
function onFormSubmit(e) { try { var email = e.namedValues["e-mail address"].toString() ; var name = e.namedValues["name"].toString() ; var subject = e.namedValues["subject"].toString() ; var message = e.namedValues["message"].toString() ; var msg = "差出人: " +name + "<"+ email + ">"+"\r\n"; msg += "題名: " + subject + "\r\n\r\n"; msg += "メッセージ本文: \r\n " + message + "\r\n"; MailApp.sendEmail(email, "[お問い合わせフォーム]"+subject, msg); } catch (e) { //エラーが発生した場合に管理者にメールを送信する MailApp.sendEmail("admin@example.com", "Error report", e.message); } }