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

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

前回Googleフォームの機能を使って問合せフォームの作成をしました。
このままでも良いのですが、問合せた方にお礼のメールが届きません。

そこで、自動返信という形で、問合せが完了したらお礼のメールを送るように設定します。

設定方法は、問合せフォーム(回答)のツール > スクリプトエディタをクリック。

問合せフォーム

空のプロジェクトを選択します。

問合せフォーム

下記のコードを貼り付けます。管理者(必須)の部分に、自分のメアドを入れます。これでフォームに入力された内容が自分にも届きます。

貼り付けたらフロッピーのアイコンで保存(ctrl+s)します。

保存すると、名前を聞かれますので任意で入れてください。

問合せフォーム

今回はsend_mail_2014_02_26とします。

問合せフォーム

次にトリガーを設定します。

問合せフォーム

問合せフォーム

これで、フォームから問合せた人に自動で返信が届きます。

返信元のアドレスは、Googleフォームのアカウントになりますご注意ください。
返信元にしたいアドレスに、フォームの持ち主を変更して下さい。

下記の部分をフォームの項目(スプレッドシートのヘッダー)に合わせる事で項目の調整が可能です。

// 入力カラム名の指定
var NAME_COL_NAME = ‘お名前’;
var MAIL_COL_NAME = ‘メールアドレス’;

この部分は問合せフォームの質問項目と同じテキストにしてください。

スポンサーリンク

Googleフォーム 自動返信の仕組みを説明。

function sendMailGoogleForm() {}

sendMailGoogleForm という関数を定義します。
{}内に関数内で実行される内容を記述しています。
var subject = “[お問い合わせありがとうございます。]”;

「subject」という変数に、「[お問い合わせありがとうございます。]」を代入します。

変数は「var 変数名 = 値」で定義します。JavaScriptの「=」は「等しい」という意味ではなく、「右辺を左辺に代入する」という意味です。
「var」は「これから変数を定義します」という宣言で、その後ろに変数名を書き、値を代入します。

ちなみに、 JavaScriptは文の最後がセミコロン(;)で終わります。
また、文字の場合はダブルコーテーションかシングルコーテーションで囲います。

var body
= “お問い合わせありがとうございます。\n\n”
+ “————————————————————\n”;

つまり上記の場合は、「body」という変数に「”お問い合わせありがとうございます。\n\n」を入れて更に「+」で次の文字「————————————————————\n」を代入しています。
\nは改行になります。

スプレッドシートの操作

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);

メール件名・本文作成と送信先メールアドレス取得

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 === “メールアドレス” ){….} と同じです。

 送信関連

「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ドキュメントのフォーム機能からGoogle Apps Scriptを使ってメール送信 [C!]
スポンサーリンク

シェアする