Amazon11/12まで!スマイルSale開催中!セール会場へ

GASでGoogleフォームの自動返信メールを作る方法|回答内容の差し込みと送信確認

GASでGoogleフォームの自動返信メールを作る方法(Googleメソッドのロゴと記事タイトル)

Googleフォームの回答者に自動返信メールを送るには、まずフォームの設定の「回答のコピーを回答者に送信」で足りるかを確かめ、件名や本文を自分で決めたい場合にGAS(Google Apps Script)を使います。

GASを使う場合は、フォームに紐づいたスクリプトに送信用の関数を書き、トリガーで「フォーム送信時」に動くように設定します。

この記事は、問い合わせや申し込みのフォームで、受付の確認メールを自動で送りたい方に向けたものです。

掲載コードは2026年10月23日に、送信しない初期設定、イベントの確認、送信残数の確認を追加しました。

Node.jsの模擬環境で分岐と本文の組み立てを確認しており、Google上での実送信検証とは異なります。

実際のGoogleフォームとGmailでの送信は試していないため、使う前に自分のアドレスで必ずテストしてください。

目次

標準機能で足りるかを確かめる

Googleフォームには、回答者のメールアドレスを集めている場合に、回答のコピーを回答者に送る機能があります(Googleドキュメントエディタヘルプ:フォームの回答を表示、管理する)。

  1. フォームの上部にある[設定]をクリックする
  2. [回答]の横にある下矢印をクリックする
  3. [メールアドレスを収集する]で、「確認済み」か「回答者からの入力」を選ぶ
  4. [回答のコピーを回答者に送信]で、「リクエストされた場合」か「常に表示」を選ぶ
やりたいこと向いている方法
回答した内容を、回答者に控えとして届けたい標準機能(回答のコピー)
件名や本文を、自社の言葉で書きたいGAS
送信者名や返信先を指定したいGAS
回答の内容によって、送る文面を変えたいGAS
標準機能とGASの使い分け

公式ヘルプでは、迷惑メールのフィルタなどにより、回答のコピーが届かない場合があるとも説明されています。

スポンサーリンク

GASで自動返信を作る手順

  1. 練習用フォームの[メールアドレスを収集する]を「確認済み」にする。回答内容を手入力の未確認アドレスへ送らない
  2. フォームの編集画面の右上にあるメニューから、スクリプトエディタを開く
  3. 下のコードを貼り付けて保存する
  4. 左側のトリガーの画面で[トリガーを追加]を選び、実行する関数に「sendAutoReply」、イベントのソースに「フォームから」、イベントの種類に「フォーム送信時」を選ぶ
  5. 表示される権限の確認で、メールの送信を許可する
  6. DRY_RUNがtrueのまま、自分だけが使う練習フォームへ架空の回答を送り、送信なしのログを確認する。その後、自分だけを対象にfalseへ変更し、別のテスト回答で受信を確認する
// フォームに紐づいたスクリプトに貼り付けて使う
const DRY_RUN = true; // trueではメールを送らない
const SUBJECT = 'お問い合わせを受け付けました';
const SENDER_NAME = 'お問い合わせ窓口';
const REPLY_TO = ''; // 返信先を別のアドレスにしたい場合だけ入れる

function sendAutoReply(e) {
  if (!e || !e.response) {
    throw new Error('フォームからのフォーム送信時イベントが必要です。');
  }
  const response = e.response;
  const to = response.getRespondentEmail();
  if (!to) {
    console.log('回答者のメールアドレスを取得できないため、送信しませんでした。');
    return;
  }

  const lines = response.getItemResponses().map(function (itemResponse) {
    const answer = itemResponse.getResponse();
    const text = Array.isArray(answer) ? answer.join('、') : String(answer);
    return '■ ' + itemResponse.getItem().getTitle() + '\n' + text;
  });

  const body = [
    'お問い合わせいただき、ありがとうございます。',
    '次の内容で受け付けました。',
    '',
    lines.join('\n\n')
  ].join('\n');

  const options = { name: SENDER_NAME };
  if (REPLY_TO) {
    options.replyTo = REPLY_TO;
  }
  if (DRY_RUN) {
    console.log('送信なしで本文を組み立てました。設問数: ' + lines.length);
    return;
  }
  if (MailApp.getRemainingDailyQuota() < 1) {
    throw new Error('送信可能な宛先数が残っていません。');
  }
  MailApp.sendEmail(to, SUBJECT, body, options);
}

トリガーの設定方法は、GASのトリガーの設定方法で詳しく説明しています。

コードの動き

部分していること
e.responseフォーム送信時のイベントから、送られた回答を受け取る
getRespondentEmail()回答者のメールアドレスを取り出す(取り出せない場合は送らずに終わる)
getItemResponses()設問ごとの回答を取り出し、「■ 設問名」と回答の形に並べる
MailApp.sendEmail()件名・本文・送信者名を付けて送る
コードの主な部分

Apps Scriptのリファレンスでは、getRespondentEmail() は、フォームでメールアドレスの収集が有効な場合に回答者のアドレスを返すと説明されています(Apps Script:FormResponse)。

フォーム送信時のイベントでは、response として回答全体を受け取れることも、トリガーのイベントの説明に書かれています(Apps Script:Event objects)。

この例はgetItemResponses()で取得できた設問の回答を本文に含めます。

未回答の設問は種類によって取得結果から省かれるため、すべての設問名がメールに載るとは限りません。

機密情報を扱うフォームではそのまま使わず、返信に必要な項目だけを選んでください。

チェックボックスのように複数の答えがある設問は、「、」でつないで1行にしています。

グリッドの設問は形が違うため、使う場合は本文を確かめて調整してください。

送信者名と返信先

SENDER_NAMEは表示名、REPLY_TOは返信先を指定する設定です。

このコードでは、トリガーを作成したアカウントからメールを送信します。

表示名や返信先を変えても、送信元のアカウント自体は変わりません。

作成者の権限で動く仕様は、インストール型トリガーの公式ガイドで確認できます。

返信を別の担当者に届けたい場合は、REPLY_TO にそのアドレスを入れます。

MailAppのリファレンスでは、返信できないアドレスから送る noReply の設定は、Google Workspaceのアカウントでだけ使え、Gmailのアカウントでは使えないと説明されています(Apps Script:MailApp)。

送信数の上限に注意する

Apps Scriptで送れるメールの宛先の数には、1日あたりの上限があります(Apps Script:Quotas for Google Services)。

アカウント1日にメールを送れる宛先の数
無料のアカウント(gmail.comなど)100
Google Workspaceのアカウント1,500
MailAppなどで送れる宛先の上限(2026年10月15日に公式で確認)

残りの宛先数は、MailApp.getRemainingDailyQuota()で確かめられます。

割り当てはユーザー単位なので、同じ作成者の別スクリプトによる利用も考慮してください。

日次の割り当ては最初のリクエストから24時間後にリセットされ、午前0時に回復するとは限りません。

上限は変更されることがあるため、本番運用前に公式の割り当て一覧を再確認します。

残数がなくなった場合、この例はエラーで止まり、後日の送信予約はしません。

Workspaceにも上限があります。

標準の回答コピーを併用すると2通届く場合があるため、どちらを使うか決めてください。

送信失敗時は回答と送信状況を照合し、未送信を確認してから対応します。

届かないときの確認

  • フォームの設定で、メールアドレスを収集しているか
  • トリガーのイベントの種類が「フォーム送信時」になっているか
  • Apps Scriptの実行数の画面で、エラーが出ていないか
  • 受け取った側の迷惑メールのフォルダーに入っていないか
  • 1日の送信数の上限を超えていないか

スクリプトエディタで関数を直接実行すると、フォームの回答がないためエラーになります。

動作を確かめるときは、練習用フォームから架空の回答を送ってください。

この例には回答IDによる二重送信防止や再送管理はありません。

他の共同編集者が作ったトリガーは自分の一覧には表示されないため、作成者ごとに重複がないか確認します。

同じイベントの再実行や重複トリガーでは再送されるため、トリガーは1つにし、送信状況が不明な失敗をそのまま再実行しないでください。

本番運用では回答IDと送信状態を管理する仕組みが別途必要です。

回答の通知を、回答者ではなく社内の別のアドレスに送りたい場合は、Googleフォームのお問い合わせを別のメールアドレスに転送する方法を参考にしてください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

須澤 元貴のアバター 須澤 元貴 代表社員

MOTOKI合同会社 代表社員。
アニメ・映像業界とゲーム業界で、2D・UI・3D・アニメーション制作、映像編集、ツール制作に携わってきました。
現在はWordPressを中心にWebサイトの制作とカスタマイズを手がけています。
著書に『Unity デザイナーズ・バイブル』『Unityゲーム プログラミング・バイブル 2nd Generation』(ボーンデジタル)。
岡山県出身、埼玉県在住。

目次