フォームを入力してもらったら、メールの自動返信を設定したい。
GAS を使って返信をする例が多く挙げられているが、みつけた例は文面をスクリプト内部に書き込んでいるようだ。
今回の利用シーンでは送る文面が長いのでスクリプトの外から文面を読み込ませたい。今回は、Google Document から TXTファイルを読み込み、それをメール文面とするスクリプトを ChatGPT で作り、設定してみた。
フォームの設定
「メールアドレスを収集」の設定をしておく
テキストファイルを作る
メール文面をTXTファイルにして Google Driveに保存。プレビューして URL の以下の箇所をコピー。
TXTファイルで保存できない場合はこちらを参照:
「Google Drive に .txt ファイルを保存する」
https://qiita.com/nanbuwks/items/f164e7b36e2cb4061cc0
スクリプトを設置する
フォームを表示し、メニューから「Apps Script」
以下をペースト。(ChatGPTで作成したもの)
/**
* 設定
*/
const CONFIG = {
// Googleドライブに置いたテキストファイルのID
BODY_FILE_ID: 'ここにテキストファイルIDを入力',
// 自動返信メールの件名
SUBJECT: 'フォームへのご回答ありがとうございます',
// フォームでメールアドレスを質問している場合の質問名
// フォーム標準の「メールアドレスを収集する」を使う場合も、
// 念のため設定しておいて構いません。
EMAIL_QUESTION_TITLE: 'メールアドレス',
// 送信者として表示する名前
SENDER_NAME: 'フォーム事務局'
};
/**
* フォーム送信時に実行される関数
*
* この関数はエディタから直接実行しないでください。
* フォーム送信トリガーによって実行されます。
*/
function onFormSubmit(e) {
if (!e || !e.response) {
throw new Error(
'フォーム送信イベントがありません。' +
'onFormSubmitを直接実行せず、フォームから回答を送信してください。'
);
}
const email = getRespondentEmail_(e.response);
if (!email) {
throw new Error(
'回答者のメールアドレスを取得できませんでした。' +
'フォームの「メールアドレスを収集する」を有効にするか、' +
`「${CONFIG.EMAIL_QUESTION_TITLE}」という質問を作成してください。`
);
}
const body = getMailBody_();
MailApp.sendEmail({
to: email,
subject: CONFIG.SUBJECT,
body: body,
name: CONFIG.SENDER_NAME
});
}
/**
* 回答者のメールアドレスを取得する
*/
function getRespondentEmail_(formResponse) {
// フォーム標準の「メールアドレスを収集する」を利用している場合
const collectedEmail = formResponse.getRespondentEmail();
if (collectedEmail) {
return collectedEmail.trim();
}
// 質問項目としてメールアドレスを入力させている場合
const itemResponses = formResponse.getItemResponses();
for (const itemResponse of itemResponses) {
const title = itemResponse.getItem().getTitle();
if (title === CONFIG.EMAIL_QUESTION_TITLE) {
const answer = String(itemResponse.getResponse()).trim();
if (isValidEmail_(answer)) {
return answer;
}
}
}
return '';
}
/**
* Googleドライブのテキストファイルから本文を読み込む
*/
function getMailBody_() {
const file = DriveApp.getFileById(CONFIG.BODY_FILE_ID);
// UTF-8のテキストとして読み込む
const body = file.getBlob().getDataAsString('UTF-8');
if (!body.trim()) {
throw new Error('メール本文のテキストファイルが空です。');
}
return body;
}
/**
* 簡易的なメールアドレス形式チェック
*/
function isValidEmail_(email) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}
/**
* 初回に一度だけ実行して、フォーム送信トリガーを作成する
*/
function setupTrigger() {
const form = FormApp.getActiveForm();
if (!form) {
throw new Error(
'このスクリプトをGoogleフォームの「Apps Script」から作成してください。'
);
}
// 同じ関数の重複トリガーを削除
ScriptApp.getProjectTriggers()
.filter(trigger =>
trigger.getHandlerFunction() === 'onFormSubmit' &&
trigger.getEventType() === ScriptApp.EventType.ON_FORM_SUBMIT
)
.forEach(trigger => ScriptApp.deleteTrigger(trigger));
ScriptApp.newTrigger('onFormSubmit')
.forForm(form)
.onFormSubmit()
.create();
console.log('フォーム送信トリガーを作成しました。');
}
6行目の以下の場所にIDを入力。
BODY_FILE_ID: 'ここにテキストファイルIDを入力',
IDは Google Drive のファイルID。先に取得したIDを使う。

保存しておく。
トリガ設定
「Advanced」

としてプロジェクトを選択

権限を選択し「Continue」

テスト
フォームに入力テスト、メールが来ていればOK.
==========================================
EasyEDA でオートルーティング
環境
Windows 11 Pro
NAS LinkStation LS210D
NASにアクセス
いろいろ方法があるが、今回はゲストログオンを有効にする
gpedit.msc を起動し、以下の項目を選び有効に変更する。












