🤖

Googleフォームの通知メール・自動返信メールのスクリプト

2023/02/27に公開

数年に1回必要になり、その度に調べてるので、備忘録です。
続きはこちら:Googleフォームを送信せずにGASをテスト/デバッグする方法

概要

問い合わせフォームから問い合わせがあった際、管理者への「こんな問い合わせが来ました」の通知メールや、回答者(問い合わせをした人)への「こんな内容の問い合わせを受け付けました。返信をお待ち下さい」の自動返信メールを送りたくなります。

Googleフォームでは、デフォルトの機能として「新しい回答についてのメール通知を受け取る」「回答のコピーを回答者に送信」という設定が可能です。

ですが、これらの設定で送信されるメールは、

  • 管理者への通知メールは「新しい回答があります。回答を表示(リンク)」のみで、リンク先に遷移しないと回答内容が見えない
  • 回答者へのメールは、Googleフォームのウェブページがそのまま埋め込まれたような見た目になり、見づらい

ため、個人的には好みではありません。

そうではなくて、管理者・回答者どちらにも、回答内容が簡潔にテキストのみでまとめられたメールを送りたいわけです。ついでに、管理者は通知メールにそのまま返信できるようにしたり、回答者宛のメールには簡単な挨拶文を入れたりもしたい。

こういうイメージです。

お問い合わせいただき、ありがとうございます。以下の内容でのお問い合わせを受け付けました。
-----
お名前:田中太郎
メールアドレス:example@gmail.com
問い合わせ内容:xxxについて教えて下さい。
-----
担当者から返信するので、しばらくお待ち下さい。

なので、Google Apps Script(以下、GAS)を書いて自分好みのメールを作成・送信するようにします。

コードと設定

フォーム編集画面の右上の「…」から「スクリプト エディタ」を選択し、こんな感じのコードを書いていきます。

function sendForm(e){  
  // 回答者のメールアドレスを取得
  const emailOfRespondent = e.response.getRespondentEmail();

  // 質問と回答を取得
  const responseItems = e.response.getItemResponses();

  // 回答内容をまとめる
  let responseContent = `------\\nメールアドレス:\\n${emailOfRespondent}`;
  for (let i = 0; i < responseItems.length; i++) {
    let responseItem = responseItems[i];
    let question = responseItem.getItem().getsubject();
    let answer = responseItem.getResponse();
    responseContent += `\\n\\n${question}:\\n${answer}`;
  }
  responseContent += '\\n------';

  // 自分のメールアドレス
  const emailOfAdmin = 'example@gmail.com'; 

  // 管理者向け通知メールの体裁を整える
  const subjectToAdmin = 'フォームから問い合わせがありました';
  const optionsForAdmin = {
    from: `xxxウェブサイト問い合わせフォーム<${emailOfAdmin}>`, 
    replyTo: emailOfRespondent
  }; 
  const msgToAdmin = `以下の内容でお問い合わせがありました。\\n\\n${responseContent}`;

  // 管理者向け通知メールを送る(宛先, タイトル, 内容, オプション)
  GmailApp.sendEmail(emailOfAdmin, subjectToAdmin, msgToAdmin, optionsForAdmin);

  // 回答者向け自動返信メールの体裁を整える
  const subjectToRespondent = 'お問い合わせありがとうございます';
  const optionsForRespondent = {
    from: `xxxウェブサイト問い合わせフォーム<${emailOfAdmin}>`, 
  }; 
  const msgToRespondent = `お問合せいただきありがとうございます。\\n以下の内容でお問い合わせを受け付けました。\\n\\n${responseContent}\\n\\nいただいた内容を確認し、ご連絡いたします。今しばらくお待ち下さい。\\n\\nxxxウェブサイト\\n${emailOfAdmin}`;
  
  // 回答者向け自動返信メールを送る(宛先, タイトル, 内容, オプション)
  GmailApp.sendEmail(emailOfRespondent, subjectToRespondent, msgToRespondent, optionsForRespondent);
}

コードを書いたら、あとはトリガーに「フォーム送信時」を設定して保存すればOK。トリガー保存時に、初回のみ認証を求められます。

補足

  • Googleフォームの設定で「メールアドレスを収集する」をオンにした場合、メールアドレスは回答内容とは別のものとして保存されるので、回答内容等は別途 e.response.getRespondentEmail(); で取得します。
  • 送信元メールアドレスはフォームのオーナーのGmailアドレス、およびその送信者アドレスとして設定済のもののみを設定可能です。それ以外の送信元になりすますことはできません。
  • 管理者向け通知メールの replyTo に回答者のメールアドレスを設定しておくとちょっと便利です。メールアプリで通知メールに「返信」をするだけで回答者へのメールを作成し始められます。
  • テスト時に困った件については別記事を書きました:Googleフォームを送信せずにGASをテスト/デバッグする方法

Discussion