Googleフォームの回答を基に自動返信メールを送信する方法と問題解決

JavaScript

GoogleフォームとApps Scriptを連携させて、自動返信メールを送る方法についてのよくある問題とその解決方法を解説します。特に、e.namedValuesが取得できない場合の原因と対策について詳しく説明します。

GoogleフォームとApps Scriptで自動返信メールを送る基本の流れ

Googleフォームを使って収集したデータをもとに、自動的に返信メールを送信するのは非常に便利な機能です。Apps Scriptを使用して、フォームの送信時に自動でメールを送ることができます。

以下のコードで、メールアドレスを収集している場合に送信できます。

function onFormSubmit(e) {
const email = e.namedValues["メールアドレス"];
MailApp.sendEmail(email, "ご回答ありがとうございます", "内容を受け付けました。");
}

このコードをフォームにバインドして、送信時に自動で返信メールを送信するように設定できます。

e.namedValuesが取得できない場合の原因

質問者の方が抱えている問題は、フォーム送信時にe.namedValuesが空またはundefinedになってしまうことです。これにはいくつかの原因が考えられます。

1つ目の可能性として、スクリプトがフォームに正しくバインドされていないことがあります。フォームの「︙」→「スクリプトエディタ」からスクリプトを作成している場合でも、バインドされていないことがあります。フォームに正しくバインドするためには、フォームから「スクリプトエディタ」を開いて、スクリプトが正しくリンクされているかを確認しましょう。

e.namedValuesではなくe.response.getItemResponses()を使う方法

フォームに正しくバインドされていない場合、e.namedValuesではなく、e.response.getItemResponses()を使用する方法があります。この方法を使うことで、フォームの各項目にアクセスできます。

function onFormSubmit(e) {
const responses = e.response.getItemResponses();
let email = "";
responses.forEach(function(response) {
if (response.getItem().getTitle() === "メールアドレス") {
email = response.getResponse();
}
});
MailApp.sendEmail(email, "ご回答ありがとうございます", "内容を受け付けました。");
}

このコードでは、フォームに記入された「メールアドレス」を特定し、対応するメールを送信することができます。

確認するべき設定と最適化

スクリプトがフォームに正しくバインドされているかを確認し、e.namedValuesが空にならないようにすることが重要です。もし、スクリプトエディタで「このプロジェクトはフォームにリンクされています」という表示が出ていない場合は、フォームを再度開き直して確認してみましょう。

また、Googleフォームの設定で「メールアドレスを収集しない」に設定していると、メールアドレスがフォーム内で自由入力となります。この場合、上記のように「メールアドレス」の項目名をスクリプトで指定することで、正しく取得できます。

まとめ

Googleフォームの回答をもとに自動返信メールを送る際にe.namedValuesが空になる問題は、フォームのバインド設定やコードの確認が必要です。もし、e.namedValuesが取得できない場合は、e.response.getItemResponses()を使用して個別に項目を取得する方法が有効です。これらの設定を確認することで、正しいメール送信が可能になります。

コメント

タイトルとURLをコピーしました