Google Drive (旧 Google ドキュメント) でフォームの投稿に確認メールを自動返信する方法

方法っていうかスクリプト。

Google Drive (旧 Google ドキュメント) のフォーム機能は便利ですね。
簡単な申し込みフォームぐらいならすぐ作れる。

ただひとつ悩ましいのは、
申し込みをした人に送信内容の控えを送る機能がないところ。

なので「申し込んだかどうか忘れた」とか
「日時や場所がわからなくなった」とかいうこともよく起こります。

またフォームの管理者に「投稿があった」ことを通知する機能はあるけど
具体的な投稿内容はその都度スプレッドシートを開かないとわからない。
(一応書いておくとこれは「ツール」→「通知ルール」から設定)

ただ Google Drive では Google Apps Script というのが使えて
いろんな処理を自動化することができますね。

というわけで、
Google Drive のフォームから投稿があったら
投稿者に確認メールを自動返信して
管理者にそのコピーを送信するスクリプトを書いてみました。

基本的な使い方

  1. Google Drive でフォームを作る

    ここは普通にやります。Google Driveのホームで「作成」をクリックして「フォーム」を選ぶ。
    なお、投稿者のメールアドレスを入れてもらう欄の「質問のタイトル」は「メールアドレス」という名前にしてください。(後ほど設定で変更可能)

    最後に右上の「保存」をクリック。保存したら「回答を表示」→「スプレッドシート」でスプレッドシートの画面へ移動します。

  2. スクリプトエディタを開く

    スプレッドシートで「ツール」→ “Script editor” を選ぶ。

  3. 自動返信用のスクリプトを貼り付ける

    デフォルトで入っている function myFunction() {} というやつは消して、ここにあるスクリプトをコピー&ペーストしてください。

    同じものをこの記事の末尾にも置いときます。

  4. スクリプトを保存する

    メニュー欄にある保存ボタンを押します。

    プロジェクトに名前をつけろと言われるので、適当な名前をつけます。
    最初から入っている「無題のプロジェクト」のままでも大丈夫だけど、まあ後から何だかわかるように「自動返信」か何か適当に。

  5. トリガーをセットする

    「こうなったときにスクリプトを起動してね」という指示を設定します。
    メニュー欄「リソース」→「現在のスクリプトのトリガー」を選ぶ。

    最初は何も設定されていないので “No triggers set up. Click here to add one now.” と書かれたリンクをクリック。

    「実行」欄にはスクリプトの関数名 sendConfirmation が入っていると思うのでそのまま。
    “Events” のところを “From spreadsheet” “On form submit” にして「保存」をクリック。

    この時点ではまだ保存はされず、次の承認ステップに移ります。

  6. スクリプトの実行を承認する

    “Authorization required” というタイトルで実行権限の承認を求めるダイアログが出るので、下にある “Authorize” をクリック。

    「認証されました。トリガーを保存できます。」というウィンドウが出たら承認完了。「閉じる」ボタンを押してトリガー設定の画面に戻ります。

  7. トリガーを保存する

    もう一度「保存」ボタンをおす。
    これで、フォームの投稿があったらメールが送信されるようになります。

テスト投稿

フォームを開いて、試しに何か投稿してみてください。
「メールアドレス」欄に入力したアドレスと
自分の Gmail アドレスに自動でメールが送られるはず。

設定を変えて使う

確認メールの件名やメール本文に入れる文章などは
用途に応じて変えることができます。
やり方は2とおり。

ソースを直接書き換える方法

ソース前半の宣言部分を書き換えると各種設定が変わります。
「テンプレート」については後述します。

//フォームでメールアドレスが入力される列の名前
var emailColName = "メールアドレス";

//テンプレートとして使うシートの番号。1枚目を0と数える。false にするとテンプレートを使わない。
var templateSheetId = false;

//テンプレートを使わない場合の確認メールの送信内容
//件名(デフォルトではフォームのタイトルが入ります)
var subject = ss.getName();

//冒頭に入れる文章
var bodyPre = "下記の内容で受け付けました。\n\n";

//末尾に入れる文章
var bodyPost = '';

//投稿内容の箇条書きにつける印
var bullet = ' - ';

//確認メールのコピーを送る管理者のメールアドレス
var adminEmail = ss.getOwner().getEmail();

//エラー発生時に管理者に送るメールの件名
var errorSubject = 'エラーが発生しました';

//スプレッドシートにつける送信済みマーク
var sentFlag = 'v';

//送信済みマークをつける列のタイトルと背景色
var sentHeaderTitle = '送信済み';
var sentHeaderBgColor = 'white';

//メールアドレスの列が見つからなかった場合のエラーメッセージ
var emailNotFoundMessage = 'メールアドレス用のフィールド名「' + emailColName + '」が見つかりませんでした';

テンプレートを使う方法

スクリプトをインストールする人と運用する人が違うとか
いちいちスクリプトを書き換えたくないとかいう場合には
スプレッドシートの別シートに各項目の内容を書くことで
設定を変えることができます。

まずはテンプレートを使うように設定を変更。
今のところ、ここだけはスクリプトを書き換える必要があります。

//テンプレートとして使うシートの番号。1枚目を0と数える。false にするとテンプレートを使わない。
var templateSheetId = 1; //【2枚目のシートをテンプレートとして使う場合】

スプレッドシート左下にあるシート追加のボタンを押して
できた新しいシートの次のセルに必要な内容を入れてください。

  • A1: 確認メールの件名
  • A2: 本文の冒頭に入れる文章
  • A3: 本文の末尾に入れる文章
  • A4: エラーが発生したとき管理者に送るメールの件名

その他の項目についても後日対応しますたぶん。

注意点

現状のものだと、確認メールの送信元は
フォーム所有者の Gmail アドレスになります。

これを “noreply” にすることもできるんだけど
どうも Google Apps ユーザー限定みたい。
ともかく、まだ実装してません。

今後の対応予定

  • スクリプトは一切書き換えなくてもテンプレートを使えるようにする
  • テンプレートで指定できる項目の追加
  • 送信元メールアドレスを noreply にする設定

こんなところかなあ。自分でもう少し使ってみてから改善します。

  • このエントリーをはてなブックマークに追加