Googleフォームの回答者に自動返信メールを送るには、まずフォームの設定の「回答のコピーを回答者に送信」で足りるかを確かめ、件名や本文を自分で決めたい場合にGAS(Google Apps Script)を使います。
GASを使う場合は、フォームに紐づいたスクリプトに送信用の関数を書き、トリガーで「フォーム送信時」に動くように設定します。
この記事は、問い合わせや申し込みのフォームで、受付の確認メールを自動で送りたい方に向けたものです。
掲載したコードは、2026年10月15日にNode.jsの模擬環境で、本文の組み立てと、メールアドレスがない場合に送らない処理を確かめました。
実際のGoogleフォームとGmailでの送信は試していないため、使う前に自分のアドレスで必ずテストしてください。
標準機能で足りるかを確かめる
Googleフォームには、回答者のメールアドレスを集めている場合に、回答のコピーを回答者に送る機能があります(Googleドキュメントエディタヘルプ:フォームの回答を表示、管理する)。
- フォームの上部にある[設定]をクリックする
- [メールアドレスを収集する]で、「確認済み」か「回答者からの入力」を選ぶ
- [回答]の横にある下矢印をクリックする
- [回答のコピーを回答者に送信]で、「リクエストされた場合」か「常に表示」を選ぶ
| やりたいこと | 向いている方法 |
|---|---|
| 回答した内容を、回答者に控えとして届けたい | 標準機能(回答のコピー) |
| 件名や本文を、自社の言葉で書きたい | GAS |
| 送信者名や返信先を指定したい | GAS |
| 回答の内容によって、送る文面を変えたい | GAS |
公式ヘルプでは、迷惑メールのフィルタなどにより、回答のコピーが届かない場合があるとも説明されています。
GASで自動返信を作る手順
- フォームの設定で、[メールアドレスを収集する]をオンにする
- フォームの編集画面の右上にあるメニューから、スクリプトエディタを開く
- 下のコードを貼り付けて保存する
- 左側のトリガーの画面で[トリガーを追加]を選び、実行する関数に「sendAutoReply」、イベントのソースに「フォームから」、イベントの種類に「フォーム送信時」を選ぶ
- 表示される権限の確認で、メールの送信を許可する
- 自分のメールアドレスでフォームに回答し、メールが届くかを確かめる
// フォームに紐づいたスクリプトに貼り付けて使う
const SUBJECT = 'お問い合わせを受け付けました';
const SENDER_NAME = 'お問い合わせ窓口';
const REPLY_TO = ''; // 返信先を別のアドレスにしたい場合だけ入れる
function sendAutoReply(e) {
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;
}
MailApp.sendEmail(to, SUBJECT, body, options);
}トリガーの設定方法は、GASのトリガーの設定方法で詳しく説明しています。
コードの動き
| 部分 | していること |
|---|---|
| e.response | フォーム送信時のイベントから、送られた回答を受け取る |
| getRespondentEmail() | 回答者のメールアドレスを取り出す(取り出せない場合は送らずに終わる) |
| getItemResponses() | 設問ごとの回答を取り出し、「■ 設問名」と回答の形に並べる |
| MailApp.sendEmail() | 件名・本文・送信者名を付けて送る |
Apps Scriptのリファレンスでは、getRespondentEmail() は、フォームでメールアドレスの収集が有効な場合に回答者のアドレスを返すと説明されています(Apps Script:FormResponse)。
フォーム送信時のイベントでは、response として回答全体を受け取れることも、トリガーのイベントの説明に書かれています(Apps Script:Event objects)。
チェックボックスのように複数の答えがある設問は、「、」でつないで1行にしています。
グリッドの設問は形が違うため、使う場合は本文を確かめて調整してください。
送信者名と返信先
SENDER_NAME に入れた名前が、受け取った人のメールで送信者名として表示されます。
返信を別の担当者に届けたい場合は、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.getRemainingDailyQuota() で確かめられます。
回答が多いフォームでは、上限を超えた分の自動返信が送られなくなるため、標準機能と組み合わせるか、Google Workspaceのアカウントで運用します。
届かないときの確認
- フォームの設定で、メールアドレスを収集しているか
- トリガーのイベントの種類が「フォーム送信時」になっているか
- Apps Scriptの実行数の画面で、エラーが出ていないか
- 受け取った側の迷惑メールのフォルダーに入っていないか
- 1日の送信数の上限を超えていないか
スクリプトエディタで関数を直接実行すると、フォームの回答がないためエラーになります。
動作を確かめるときは、実際にフォームから回答を送ってください。
回答の通知を、回答者ではなく社内の別のアドレスに送りたい場合は、Googleフォームのお問い合わせを別のメールアドレスに転送する方法を参考にしてください。
