前回Googleフォームの機能を使って問合せフォームの作成をしました。
このままでも良いのですが、問合せた方にお礼のメールが届きません。
そこで、自動返信という形で、問合せが完了したらお礼のメールを送るように設定します。
Googleフォームの自動返信設定方法
設定方法は、問合せフォーム(回答)のツール > スクリプトエディタをクリック。
空のプロジェクトを選択します。
下記のコードを貼り付けます。管理者(必須)の部分に、自分のメアドを入れます。これでフォームに入力された内容が自分にも届きます。
function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "[お問い合わせありがとうございます。]"; var body = "お問い合わせありがとうございます。\n\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n\n" + "後ほど担当者よりご連絡させていただきます。"; // 入力カラム名の指定 var NAME_COL_NAME = 'お名前'; var MAIL_COL_NAME = 'メールアドレス'; // メール送信先 var admin = "admin@example.com"; // 管理者(必須) var cc = ""; // Cc: var bcc = admin; // Bcc: var reply = admin; // Reply-To: var to = ""; // To: (入力者のアドレスが自動で入ります) //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = 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, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } }
貼り付けたらフロッピーのアイコンで保存(ctrl+s)します。
保存すると、名前を聞かれますので任意で入れてください。
今回はsend_mail_2014_02_26とします。
次にトリガーを設定します。
これで、フォームから問合せた人に自動で返信が届きます。
返信元のアドレスは、Googleフォームのアカウントになりますご注意ください。
返信元にしたいアドレスに、フォームの持ち主を変更して下さい。
下記の部分をフォームの項目(スプレッドシートのヘッダー)に合わせる事で項目の調整が可能です。
// 入力カラム名の指定
var NAME_COL_NAME = ‘お名前’;
var MAIL_COL_NAME = ‘メールアドレス’;
この部分は問合せフォームの質問項目と同じテキストにしてください。
Googleフォーム 自動返信の仕組みを説明。
function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "[お問い合わせありがとうございます。]"; var body = "お問い合わせありがとうございます。\n\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n\n" + "後ほど担当者よりご連絡させていただきます。"; // 入力カラム名の指定 var NAME_COL_NAME = 'お名前'; var MAIL_COL_NAME = 'メールアドレス'; // メール送信先 var admin = "admin@example.com"; // 管理者(必須) var cc = ""; // Cc: var bcc = admin; // Bcc: var reply = admin; // Reply-To: var to = ""; // To: (入力者のアドレスが自動で入ります)
function sendMailGoogleForm() {}
sendMailGoogleForm という関数を定義します。
{}内に関数内で実行される内容を記述しています。
var subject = “[お問い合わせありがとうございます。]”;
「subject」という変数に、「[お問い合わせありがとうございます。]」を代入します。
変数は「var 変数名 = 値」で定義します。JavaScriptの「=」は「等しい」という意味ではなく、「右辺を左辺に代入する」という意味です。
「var」は「これから変数を定義します」という宣言で、その後ろに変数名を書き、値を代入します。
ちなみに、 JavaScriptは文の最後がセミコロン(;)で終わります。
また、文字の場合はダブルコーテーションかシングルコーテーションで囲います。
var body
= “お問い合わせありがとうございます。\n\n”
+ “————————————————————\n”;
つまり上記の場合は、「body」という変数に「”お問い合わせありがとうございます。\n\n」を入れて更に「+」で次の文字「————————————————————\n」を代入しています。
\nは改行になります。
スプレッドシートの操作
try { // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols);
getActiveSheet(); 現在開いているシートを返す
.getLastRow(); シートの最終行を返す
.getLastColumn(); シートの最終列を返す
.getDataRange(); 指定範囲内に存在しているデータの要素を返す
var sheet=SpreadsheetApp.getActiveSheet(); 変数「sheet」に現在開いているシートを代入。
var rows = sheet.getLastRow(); 現在開いているシートの最終行を取得し、変数「rows」に代入。
var cols = sheet.getLastColumn(); 現在開いているシートの最終列を取得、変数「cols」に代入。
var rg = sheet.getDataRange(); 現在開いているシートの指定範囲内に存在しているデータの要素を取得し、変数「rg」に代入。
Logger.log(“rows=”+rows+” cols=”+cols); logger.logでログを記録する。
tryは実行する文章が実行できなかった場合に、エラーメッセージを返します。
try{
処理1
}catch(e){
処理2
}
処理1が実行できなかった場合、処理2を実行します。今回の場合は、処理2ではMailApp.sendmailで管理者に「【失敗】Googleフォームからメール送信中にエラーが発生」という題名で送信します。
catch(e)のeは変数です。エラー内容を取得しています。この取得したエラー内容を、次のようにメール本文に入れて送信します。
MailApp.sendEmail(宛先, “件名”, e.message);
メール件名・本文作成と送信先メールアドレス取得
// メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer;
var col_name = rg.getCell(1, i).getValue(); 1行のi列の、セルの値を取得し「col_name」に代入。
var col_value = rg.getCell(rows, i).getValue(); 最終行の値をi列目を取得し「col_value」に代入。
body += “【”+col_name+”】\n”;
上記で取得した「col_name」を「body」に代入する。\nは改行。
+=となっているので、代入時に置き換えるのではなく、追加していく。
body += col_value + “\n\n”;
上記で取得した「col_value」を「body」に代入する。\nは改行。
+=となっているので、代入時に置き換えるのではなく、追加していく。
if ( col_name === NAME_COL_NAME ) {
body = col_value+” 様\n\n”+body;
}
変数「col_name」に代入されているものが、「NAME_COL_NAME」と同じ(お名前)であれば、col_value+” 様\n\n”+body を「body」に代入します。
上記はif ( col_name === “お名前” ){….} と同じです。
if ( col_name === MAIL_COL_NAME ) {
to = col_value;
}
変数「col_name」に代入されているものが、「MAIL_COL_NAME」と同じ(メールアドレス)であれば、to に「 col_value」を代入します。
上記はif ( col_name === “メールアドレス” ){….} と同じです。
送信関連
// 送信先オプション 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, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); }
「MailApp.sendEmail」という、Google Apps Script関数を利用します。
MailApp.sendEmail(宛先,題名, メール中身,{ cc:ccのアドレス, bcc:bccのアドレス }) とい形で送信します。
ccのアドレスなどの赤字は省略可能です。
var options = {};
変数「option」に対し連想配列を代入します。連想配列にすることで、{キー1 : 値1, キー2:値2,….}という形式になります。
if ( bcc ) options.bcc = bcc;
bccがあれば、bcc(文字)をキーとして、値にはbcc(25行目辺りで代入したもの)を入れる。
つまり、次のような形になります。
var options = {bcc:”admin@example.com“};
catch(e){…}
質問などあればお気軽に!