【応用編】Googleフォーム転送&返信スクリプト
Google Driveを使ったフォーム作成応用編。
色々と出来ることはありますが、今回はスクリプトにフォーム送信時のスクリプトについて。
フォームの作り方は【基本編】で紹介したのでそちらを参照ください。
メール送信時スクリプト(共通手順)
1.基本的なフォームを作成後に回答先のスプレッドシートを作成します。
すると、作成したフォームの下に回答保存用のスプレッドシートが追加されます。
2.スクリプトを作成します。
ツール→スクリプトエディタを開きます。
モーダルウィンドウでなんやらかんやら出てきますが閉じてOK
転送用スクリプト設定手順
3.スクリプトの編集
編集画面にはデフォルトでfunction myFunctionとか書いてあるけど、それは消して以下コピペ。
function sendForm(e){ var subject = "[Contact via Contact Form]"; //件名 var body = "\n-------------------------------------"; //以下本文 // カラムの指定 var PRE='\n\n['; var AFT=']\n\n'; var NAME_FORM_NAME = '名前';//スプレッドシート1行目の項目名 var MAIL_FORM_NAME = 'Eメール';//スプレッドシート1行目の項目名 var SPORTS_RADIO_BOX = '好きなスポーツはなんですか。';//スプレッドシート1行目の項目名 var SPORTS_CHECK_BOX = 'スポーツ経験はありますか。';//スプレッドシート1行目の項目名 var BODY_FORM_NAME = 'スポーツについて語ってください。';//スプレッドシート1行目の項目名 var to = "hogehogehogehoge@gmail.com";// メール送信先 var name = e.namedValues[NAME_FORM_NAME]; body+=PRE+NAME_FORM_NAME+AFT+name; var mailAddress = e.namedValues[MAIL_FORM_NAME]; body+=PRE+MAIL_FORM_NAME+AFT+mailAddress; var radioBox = e.namedValues[SPORTS_RADIO_BOX]; body+=PRE+SPORTS_RADIO_BOX+AFT+radioBox; var checkBox = e.namedValues[SPORTS_CHECK_BOX]; body+=PRE+SPORTS_CHECK_BOX+AFT+checkBox; var content = e.namedValues[BODY_FORM_NAME]; body+=PRE+BODY_FORM_NAME+AFT+content+"\n"; MailApp.sendEmail(to, subject, body); //メールを送信 }
誰でも直感的に使えるように整理してあるので変数を沢山使っていますが、プログラムとして作動しているのはe.namedValuesでシートから取得するのと、最後の行のメール送信のみです。
仕組みが分かる人はやろうと思えば1行で書けますね。
返信スクリプトが要らない場合はそのまま下記の『共通手順続き』まで。
返信用スクリプト設定手順
3.スクリプトの編集
転送メールと同様の確認メールを送信したい場合は最後の一行を
MailApp.sendEmail(to, subject, body, {bcc:"hogehoge@henshin.com"});
とすれば、全く同じメールがbccで送られる。(CCとReplyToも追加可能)
自分をBCCにしたい場合はvar to = のアドレスと入れ替えればOK
まったく別の内容で送信したい場合は色々書き換えることもできますが新しいスクリプトを追加したほうが楽でしょう。
なので殆どの手順は先ほどと同じですがスクリプトに以下のように記述します。
function sendMailFromForm() { Logger.log('sendMailFromForm() debug start'); // 件名、本文、フッター var subject = "題名はここ"; var body ="本文内容(\nで改行)"; var footer ="\n\n\n\nフッター内容\n"; // 入力カラム名の指定 var NAME_FORM_NAME = '名前';//スプレッドシートの項目名 var MAIL_FORM_NAME = 'メール';//スプレッドシートの項目名 var SUBJ_FORM_NAME = '題名';//スプレッドシートの項目名 // メール送信先 var admin = "";//同じ内容を自分宛に送信したい場合に自分のアドレスを入力 var cc = ""; // Cc: var bcc = ""; // Bcc: var reply = ""; // Reply-To: var to = ""; // To: 入力者のアドレスが自動で挿入されます try{ // スプレッドシートの操作 var sh = SpreadsheetApp.getActiveSheet(); var rows = sh.getLastRow(); var cols = sh.getLastColumn(); var rg = sh.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var j = 1; j <= cols; j++ ) { var col_name = rg.getCell(1, j).getValue(); // カラム名 var col_value = rg.getCell(rows, j).getValue(); // 入力値 if ( col_name === NAME_FORM_NAME ) { body =col_value+"様"+"\n\n"+body; } if ( col_name === MAIL_FORM_NAME ) { to = col_value; } if ( col_name === SUBJ_FORM_NAME ) { subject += col_value; } } body += footer; // 送信先オプション var options = {}; if ( cc ) options.cc = cc; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; // メール送信 if ( to ) { MailApp.sendEmail(to, subject, body, options); }else{ MailApp.sendEmail(admin, "【Failed】Please confirm your E-mail", body); } }catch(e){ MailApp.sendEmail(admin, "【Failed】Connection error", e.message); } }
コピペしてスプレッドシートのカラム名だけ変更すればそのまま使用可能。
入力内容&本文の前に○○様という宛名が設定可能。
先ほど同様CCやBCCも追加可能。
色々な処理などが追加されていますが、基本は最初のスクリプトと同様変数を辿って行けばsendEmailに情報を挿入しているだけです。
共通手順続き
4.トリガーの設定
スクリプトが書き終わったらリソース→Current Project Trigger→新しいトリガーを追加
「起動時」になっている右側のドロップメニューを「フォーム送信時」に切り替えます。
あとは認証云々と言うのが出てきたら全部OKすれば完了。
何も間違っていなければフォームから送信した内容が送信先に設定したメールアドレスに送信されているはずです。
ちょっとしたイベントのコンタクトフォームとかに使えますね。
デメリットとしては入力した内容が確認できずに送信されてしまう点ですがフォームのソースを覗いてPHPを応用すればJavascriptやPHPでもより詳細なバリデーションや送信前の確認なども出来ます。
それについては近いうちに(忘れないうちに)紹介したいと思います。
※この記事は前ブログの記事に加筆・修正したものになります。
「【応用編】Googleフォーム転送&返信スクリプト」への1件のフィードバック