見出し画像

Googleフォームで、希望者にのみ素敵な受付確認メールを自動送信できるスクリプト(GAS)を作ってみた!


はじめに

私はアーティスト等のイベント申し込みフォームを設置する機会が比較的多いのですが、その際、毎回Googleフォームを使用しています。Googleフォームであれば、Googleアカウントさえあれば、入力項目を設定するだけでフォームを簡単に公開することができます。

一方、Googleフォーム自体が持つ「回答のコピーを回答者に送信」機能 (確認メールの自動送信機能) を有効にした場合、

 ・メールの差出人は「Googleフォーム」になる
 ・メール本文のフォーマットは既定のものが使用され変更不可
 ・ユーザーはメールアドレスの記入もしくはGoogleアカウントへのログインが必須 (任意にできない)

といった課題がありました。

つまり、 メールの見栄えの問題に加え、Googleアカウントを持っていなかったり、メールアドレスを知られたくない (確認メールも不要な) ユーザーにとっては、Googleフォームが持つデフォルトのメール自動送信機能はあまり嬉しくない、ということになります。

そこで、本記事では、Googleフォームに独自のスクリプト (GAS: Google Apps Script) を設定することで、これらの課題を解決し、下記のようなメールを送信できるようにする方法をご紹介いたします。

本記事で送信できるようになる確認メールのサンプル

Googleフォームの作成とGASの設定方法

まず、通常通りGoogleフォームを作成します。Googleドライブにログインし、「新規」から「Googleフォーム」を選択します。

Googleドライブでのフォーム作成画面

次に、フォームの編集画面で、フォームの入力項目を設定します。この際、「お名前」「メールアドレス」というタイトルの項目を追加しておきます。ここに入力されたメールアドレスに確認メールか送信されます。また、「お名前」はメール本文で使用されます。(これらの項目のフォーム中の位置は自由ですが、タイトルを他のものに変更したい場合には、後述のスクリプト (GAS) の設定も合わせて変更する必要があります)

Googleフォーム編集画面

なお、フォームの「設定」では、下記の画像のように「メールアドレスを収集する」は「収集しない」に設定するようにしてください。(本記事では、Googleフォームのメール送信機能は使わず GASによるメール送信を行うため)

Googleフォーム設定画面

次に、右上のボタンから「スクリプトエディタ」を開きます。

スクリプトエディタを開く方法

スクリプトエディタを開くと以下のような画面になるので、まずは上の赤枠にこのスクリプト (プロジェクト) のタイトルを記入します。次にスクリプトのコード (詳細は次の章で説明) を下の赤枠内にコピペします。その際、もともとあったコードはすべて消してしまってください (上書き)。

スクリプトエディタ画面

スクリプトをコピペしたら、赤丸のボタンで保存します。

スクリプトエディタにスクリプトをコピペした後の状態

次に、画面左側にあるアラームのアイコンを選択し「トリガーを追加」ボタンを押します。

トリガー追加画面

すると、以下のような画面が開きますので、

 ・実行する関数を選択 → submitForm
 ・実行するデプロイを選択 → Head
 ・イベントのソースを選択 → フォームから
 ・イベントの種類を選択 → フォーム送信時

を選択し「保存」を押します。

トリガー設定画面

※ なお、このステップでイベントのソースを「スプレッドシート」にし、フォームに入力された回答をスプレッドシートから取得する例 (スクリプトもフォームではなくスプレッドシート側に設定する) がよく紹介されていますが、Googleフォーム→スプレッドシートに回答が書き込まれる前にスクリプト (GAS) が動作してしまい、回答を取得できないケースを何度か経験したことがあるので、おすすめしません。本記事では、Googleフォームから直接回答を取得し、メールを送信します。

以下のような画面が表示されるので、使用するGoogleアカウントを選択します。

Googleアカウント選択画面

続いて警告が表示されるので、「Advanced」ボタンを押します。

警告画面1

さらに、Go to XXXXX (自分が設定したプロジェクト名) ボタンを押します。

警告画面2

最後に「Allow」ボタンを押すことでトリガーの設定を完了します。

トリガーの許可画面

以上まで完了すると、以下のように、設定されたトリガーが表示された状態になります。

トリガー一覧画面

以上でメールの自動送信設定は完了になります。実際に作成したフォームに記入し、メールが送信されることをご確認ください。

もしメールがうまく自動送信されない場合には、トリガーの1つ下にある ▶️ ボタン (実行数) からスクリプトの実行履歴・エラーを確認の上、< > ボタンから再度スクリプトの内容を確認・修正してください。

確認メール自動送信用スクリプト

私が作成した、確認メール自動送信用のスクリプト (GAS) を以下に示します。スクリプト中にも説明が書いてありますが、設定は全部で6項目あります。用途に合わせてスクリプトを修正後、Googleフォームに設定し使用するようにしてください。

スクリプトの設定項目とメール本文の対応関係

送信される確認メールのフォーマットは以下の通りです。

差出人: Hoge 事務局 <フォーム設置者のアドレス> ← 設定4
件名: Hoge イベント申し込み受付 ← 設定1 + 設定2
宛先: xxxxx@yyyyy.zzz ← 記入されたアドレス + 設定6

トロさま ← 記入された名前

いつもHogeを応援いただき、誠にありがとうございます。 ← 設定1
以下の通り、イベント申し込みを受け付けました。 ← 設定2

[フォームの項目名1]
フォームの記入内容1
:
[フォームの項目名2]
フォームの記入内容2
:
(以下繰り返し)

※ このメールは送信専用です。お問い合わせはHPまでお願いいたします。 ← 設定5
--
Hoge 事務局 ← 設定4
Official Site: https://hoge.com/
 ← 設定4
X (Twitter): https://twitter.com/hoge
 ← 設定4

上記の 設定1〜設定6 について、スクリプト内で設定の変更が可能です。

 ・設定1:アーティスト名
 ・設定2:フォームの目的
 ・設定3:名前とメールアドレス記入欄のタイトル
 ・設定4:メールの送信元情報
 ・設定5:署名の直前に挿入する注意事項
 ・設定6:メールの追加送信先アドレス

なお、Googleフォーム内での「お名前」と「メールアドレス」記入欄のタイトルは、設定3 で変更可能です。

スクリプト (GAS) のコード

以下のスクリプトをスクリプトエディタ画面にコピペし、設定1〜設定6 を適切に変更した上でご使用ください。変更する際は、シングルクウォート ' 内の文字列 (緑色の部分) のみを編集するようにしてください。(例: const artist = '最終未来少女';)

////////////////////////////////////////////////////////////////////////////
// Googleフォーム 確認メール送信スクリプト
//
// [使い方]
// 1. 名前とメールアドレスの記入欄があるフォームを作成する
// 2. スクリプト内の 設定1〜設定6 を必要に応じて変更する
// 3. Googleフォームにこのスクリプトを設定する
//
// ※ メールはフォームが設置されているGoogleアカウントのアドレスから送信されます。
////////////////////////////////////////////////////////////////////////////

// 設定1: アーティスト名 (メールのタイトルと本文で使用)
const artist = 'Hoge';

// 設定2: フォームの目的 (メールのタイトルと本文で使用)
const purpose = 'イベント申し込み';

// 設定3: 名前とメールアドレス記入欄のタイトル
const title_name = 'お名前';
const title_email = 'メールアドレス';

// 設定4: メールの送信元情報 (メールの From: と署名欄で使用)
const sender = 'Hoge事務局';
const site_url = 'https://hoge.com/';
const twitter_url = 'https://twitter.com/hoge';

// 設定5: 署名の直前に挿入する注意事項 (不要の場合は空欄に)
const notice = '※ このメールは送信専用です。お問い合わせはHPまでお願いいたします。';

// 設定6: メールの追加送信先アドレス (Cc:/Bcc:) (不要の場合は空欄に)
const mail_cc = '';
const mail_bcc = '';

////////////////////////////////////////////////////////////////////////////
// これ以降は修正不要
////////////////////////////////////////////////////////////////////////////

// フォームで 「送信」 が押された時に呼び出される関数
function submitForm(e) {
  let name = '';
  let mail_subject;
  let mail_from;
  let mail_to = '';
  let mail_body = '';
  let mail_sign;
  let options;

  // フォームの情報を取得
  FormApp.getActiveForm();
  let items = e.response.getItemResponses();
  
  // 質問のタイトルと回答を取得
  for (let i = 0; i < items.length; i++) {
    let title = items[i].getItem().getTitle().trim();
    let answer = items[i].getResponse().trim();
    
    // メール本文に反映
    mail_body += '[' + title + ']\n';
    mail_body += answer + '\n\n';

    // 名前とメールアドレスを保存しておく
    switch(title) {
      case title_name:
        name = answer;
        break;
      case title_email:
        mail_to = answer;
        break;
    }
  }

  // メールアドレスが未記入だったら何もしない
  if (mail_to == '') return;

  // 名前が未記入だったら名前を「匿名」とする
  if (name == '') name = '匿名';

  // メールのタイトル
  mail_subject = artist + ' ' + purpose + '受付';

  // メールの本文
  mail_body = name + 'さま\n\n'
            + 'いつも' + artist + 'を応援いただき、誠にありがとうございます。\n'
            + '以下の通り、' + purpose + 'を受け付けました。\n\n'
            + mail_body;

  // 注意事項の挿入
  if (notice != '') mail_body += notice + '\n';

  // メールの署名
  mail_sign = '--\n'
            + sender + '\n'
            + 'Official Site: ' + site_url + '\n'
            + 'X (Twitter): ' + twitter_url + '\n';

  // メールを送信
  options = { name:sender, cc:mail_cc, bcc:mail_bcc };
  GmailApp.sendEmail(mail_to, mail_subject, mail_body + mail_sign, options);
}

////////////////////////////////////////////////////////////////////////////
// スクリプトここまで
////////////////////////////////////////////////////////////////////////////

スクリプトはJavaScriptで書かれています。仕組みとしては、フォームが送信されると、submitForm() 関数が呼び出され、引数 e に渡ってきたフォームへの入力内容をもとにメール本文を組み立て、指定されたメールアドレスに送信するだけです。上記のコードを変更することで、メール本文のフォーマットを変更することも可能ですので、プログラミングに明るい方はぜひ挑戦してみてください。

おわりに

Googleフォームは、イベントなどの申し込みを受け付ける手段としては大変便利なものです。一方で、確認メールの自動送信については、メールアドレスを教えたくないというユーザーも多く、メールアドレスの記入やGoogleアカウントへのログインを全員に強制するわけにもいかないため、実際には運用・実現できていないケースが多かったと思います。

そういった場合にも、本記事で紹介した方法を用いれば、希望するユーザー (メールアドレスの提供が可能なユーザー) にのみ独自フォーマットの確認メールを送信することができるので、ユーザービリティの向上に繋がると思います。ご参考になれば幸いです。

この記事が気に入ったらサポートをしてみませんか?