Googelフォームを使って、問合せフォームを5分で作る。自動返信メール編。

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){…}

catch(e){
MailApp.sendEmail(admin, “【失敗】Googleフォームからメール送信中にエラーが発生”, e.message);
}
は先程も書きましたが、try{処理1}catch(e){処理2} の処理1が実行できなかった場合に実行します。

 

Google Apps Script の学習本

参考にさせて頂いたサイト

Googleドキュメントのフォーム機能からGoogle Apps Scriptを使ってメール送信 [C!]
タイトルとURLをコピーしました