質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

3回答

27107閲覧

エラーがでました。Googleフォーム送信時に自動返信メールおよび、控えを登録アドレス(担当者メールアドレス記載 部分に書いたアドレス)に送りたいです。

spidernyan

総合スコア11

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2018/11/15 11:52

Googleフォーム送信時に自動返信メールおよび、控えを登録アドレス(担当者メールアドレス記載 部分に書いたアドレス)に送りたいです。

Googleフォームを使用して、イベントの申し込みフォームを使用していました。
先日まで(最後に作成したのは2018年10月末頃だったと思います)同じスクリプトエディタの内容でできましたが、
本日、同様にフォームを作成したところ、以下のエラーメッセージが発生しました。
自動返信メールも、控えのメールも飛ばなくなりました。
ソースコードの「担当者メールアドレス記載」は使用できるGmailを記載しております。

発生している問題・エラーメッセージ

TypeError: undefined からプロパティ「response」を読み取れません。(行 2、ファイル「コード」)

該当のソースコード

function submitForm(e){
var itemResponses = e.response.getItemResponses();
var message = '';
var username = '';
var mail = '';
for (var i = 0; i < itemResponses.length; i++) {
var itemResponse = itemResponses[i];
var question = itemResponse.getItem().getTitle();
var answer = itemResponse.getResponse();
if (question == '名前'){
username = answer;
}
if (question == 'メールアドレス'){
mail = answer;
}
message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
}
var address = '担当者メールアドレス記載';
var title = 'お申し込みフォームが送信されました';
var content = '以下の内容でフォームが送信されました。\n\n' + message;
GmailApp.sendEmail(address, title, content);
var title2 = 'お申し込みありがとうございます';
var content2 = username + ' 様\n\nこの度はお申し込みいただきありがとうございます。\n'
+ 'のちほど担当者よりご連絡させていただきますので、いましばらくお待ちください。\n'
+ 'このメールに心当たりの無い方は、お手数ですがこのアドレスまでご連絡いただきますようお願い申し上げます。\n\n'
+ '※このメールはお問い合わせをいただいた方に自動送信されます。\n\n'
+ '担当者名\n'
+ 'mail 担当者メールアドレス記載';
GmailApp.sendEmail(mail, title2, content2);
}

ソースコード

試したこと

以前作ったフォームをコピーして作成していましたので、一度スクリプトエディタの内容も削除し、保存。
改めて、11月10日以前に使えた同様の内容をコピーして再度保存を行いましたがエラーが出ました。

補足情報(FW/ツールのバージョンなど)

分かりにくいところがありましたら申し訳ありませんが、ご教示いただけましたら幸いです。

・今まで使えていた別のフォームで試した所、同じエラーが出ました。
・トリガーの設定(小さなポップアップからG Suite Developer Hubというページに飛ぶようになった)が変わってから初めて行いました。
・初心者でWEBの情報で見よう見まねで作ったものですが、今まで問題なく使えていました。

こちらのサイトも初めてです。無作法がございましたら、申し訳ありません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

ご回答いただいたURLにありました「// FormApp.getActiveForm()」を一行目に追加したところ、スクリプトエディタでの実行ではエラーがでましたが、作成したフォームに入力を行ったところ、うまくできました。
詳細は下部に記載します。

不慣れで説明もうまく出来ない中、ご回答いただいた皆様に感謝申し上げます。
本当にありがとうございました。

↓↓書いたコード↓↓

// FormApp.getActiveForm()
function submitForm(e){
var itemResponses = e.response.getItemResponses();
var message = '';
var username = '';
var mail = '';
for (var i = 0; i < itemResponses.length; i++) {
var itemResponse = itemResponses[i];
var question = itemResponse.getItem().getTitle();
var answer = itemResponse.getResponse();
if (question == '名前'){
username = answer;
}
if (question == 'メールアドレス'){
mail = answer;
}
message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n';
}
var address = '担当者メールアドレス記載';
var title = 'お申し込みフォームが送信されました';
var content = '以下の内容でフォームが送信されました。\n\n' + message;
GmailApp.sendEmail(address, title, content);
var title2 = 'お申し込みありがとうございます';
var content2 = username + ' 様\n\nこの度はお申し込みいただきありがとうございます。\n'

  • 'のちほど担当者よりご連絡させていただきますので、いましばらくお待ちください。\n'
  • 'このメールに心当たりの無い方は、お手数ですがこのアドレスまでご連絡いただきますようお願い申し上げます。\n\n'
  • '※このメールはお問い合わせをいただいた方に自動送信されます。\n\n'
  • '担当者名\n'
  • 'mail 担当者メールアドレス記載';

GmailApp.sendEmail(mail, title2, content2);
}

↑↑ここまで↑↑

▼行った手順
(括弧内は私が行ったことです)

(フォーム作成)

(スクリプトエディタを選択・スクリプトエディタが開く)

(上記記載のコードを記入)

(コードを保存)

(実行)

承認が必要です。

許可を確認(クリック)

アカウントの選択

(使用中のアカウントを使用)

このアプリは確認されていません
このアプリは、Google による確認が済んでいません。よく知っている信頼できるデベロッパーの場合に限り続行してください。
デベロッパーの場合は、この画面が表示されないようにするには確認リクエストを送信してください。

詳細

Google ではまだこのアプリを確認していないため、アプリの信頼性を保証できません。未確認のアプリは、あなたの個人データを脅かす可能性があります。

安全ではないページに移動

テスト(プロジェクト名)が Google アカウントへのアクセスをリクエストしています

(許可)

スクリプトエディタ画面にて【「TypeError: undefined からプロパティ「response」を読み取れません。(行 3、ファイル「コード」)表示しない】が表示される

同時に、「テスト をお使いの Google アカウントに接続しました。」のメールが届く

(スクリプトエディタの画面から「現在のトリガー」を選択)

(「テストのトリガーを追加」をクリック、下記のとおり選択)
実行する関数を選択  「submitForm」 ※選択の▼はありますが、これ以外の選択肢はありません。
実行するデプロイを選択「Head」 ※変更不可
イベントのソースを選択「フォームから」
イベントの種類を選択 「フォーム送信時」
エラー通知設定    「今すぐ通知を受け取る」

アカウントの選択

(使用中のアカウントを選択)

このアプリは確認されていません

詳細

安全ではないページに移動

テスト(プロジェクト名)が Google アカウントへのアクセスをリクエストしています

(許可)

(新しいトリガーが下記のとおり追加されました)
オーナー 自分
前回の実行 -
導入 Head
イベント フォーム送信時
関数 submitForm
エラー率 -

(作ったフォームでテスト入力)

希望通りできました。
※希望内容(自動返信メールの送信および、担当者メールアドレス記載への申し込み控えの送信)

投稿2018/11/17 06:47

spidernyan

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エラーメッセージをしっかり細かく見る必要があります。

ここに書かれた

undefined からプロパティ「response」を

はeがundefinedであることを意味しています。つまり、「関数を実行」などから試そうとした場合に起こるエラーが考えられます。
これは実行の仕方の問題ですので、フォーム送信時には正常に動いているスクリプトであっても関数を実行は必ず失敗することを意味します。

似たメッセージで

undefined からプロパティ「getItemResponses」を

となることがあります。これはスクリプトをフォームで書いたか、スプレッドシートで書いたかに依存します。というのは同じ「フォーム送信時」というトリガーでもイベントソースがフォームかスプレッドシートかによってeに渡されるオブジェクトが違うからです。例えばこの記事はdeveloperhubなどと関係ない時期のものですが、そのときからイベント引数が違っていて困ったことを示しています。

トリガー設定の項目は全てに意味がありますので、全て書かれることを推奨します。

投稿2018/11/16 00:20

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spidernyan

2018/11/16 01:01

ご回答ありがとうございます。 トリガーの設定については、 実行する関数を選択  「submitForm」 ※選択の▼はありますが、これ以外の選択肢はありません。 実行するデプロイを選択「Head」 ※変更不可 イベントのソースを選択「フォームから」 イベントの種類を選択 「フォーム送信時」 エラー通知設定    「今すぐ通知を受け取る」 としました。 何か不足な点がありましたら、ご教示いただけますと幸いです。
papinianus

2018/11/16 01:12 編集

繰り返しになってしまい申し訳ないですが「関数の実行」で試す限りは、「undefinedからプロパティ「response」を読みとれません」というエラーは回避できません。トリガーによる動作はトリガーのもととなる操作(つまりフォームの記入と送信)をしなければ"テスト"することさえできないです。
spidernyan

2018/11/17 06:28

ありがとうございます。 「// FormApp.getActiveForm()」を追加し、「実行」を行ったところ、 【TypeError: undefined からプロパティ「response」を読み取れません。(行 3、ファイル「コード」)表示しない】のエラーがでました。 しかし、試しに作成したフォームに入力したところ、希望内容(入力されたメールアドレスへの自動返信メールの送信および、担当者メールアドレス記載への申し込み控えの送信)ができました。 後ほど、行ったことを記載させていただきます。 いただいたコメント「トリガーによる動作はトリガーのもととなる操作(つまりフォームの記入と送信)をしなければ"テスト"することさえできないです。」がヒントになり、テスト=スクリプトエディタでの実行ができないだけで、入力したら、希望内容のことができるかもしれない、と考え行ったところ、できるようになりました。 実行ができない理由はわかりませんが、この度は不慣れな自分へのご丁寧なアドバイス、ありがとうございました。
guest

0

こちらと同様の状況のように思われますが、これは解決策になり得ますか?

https://ja.stackoverflow.com/q/50010

投稿2018/11/15 23:29

編集2018/11/15 23:30
kisojin

総合スコア899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

spidernyan

2018/11/16 00:58

ご回答ありがとうございます。同様だと思ったので、いただいたURLにありました「// FormApp.getActiveForm()」を追加してみました。 認証用ポップアップウィンドウが開くところまで行きましたが、その後は同じエラーがでてしまいました。 追加の場所などが間違っているのでしょうか。 ↓書いたコードです。 // FormApp.getActiveForm() function submitForm(e){ var itemResponses = e.response.getItemResponses(); var message = ''; var username = ''; var mail = ''; for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); var answer = itemResponse.getResponse(); if (question == '名前'){ username = answer; } if (question == 'メールアドレス'){ mail = answer; } message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; } var address = '担当者メールアドレス記載'; var title = 'お申し込みフォームが送信されました'; var content = '以下の内容でフォームが送信されました。\n\n' + message; GmailApp.sendEmail(address, title, content); var title2 = 'お申し込みありがとうございます'; var content2 = username + ' 様\n\nこの度はお申し込みいただきありがとうございます。\n' + 'のちほど担当者よりご連絡させていただきますので、いましばらくお待ちください。\n' + 'このメールに心当たりの無い方は、お手数ですがこのアドレスまでご連絡いただきますようお願い申し上げます。\n\n' + '※このメールはお問い合わせをいただいた方に自動送信されます。\n\n' + '担当者名\n' + 'mail 担当者メールアドレス記載'; GmailApp.sendEmail(mail, title2, content2); }
kisojin

2018/11/16 01:15

追加されたスクリプトに問題は無いと思われます。細かい内容になりますが、「認証用ポップアップウィンドウが開くところまで行きましたが、その後は同じエラーがでてしまいました。」の内容では詳細が分かりません。「認証用ポップアップウィンドウが開くところまで行きましたが、」とありますが、その後はどのような流れで進めた結果、「同じエラーがでてしまいました」の状態に至ったのでしょうか。スコープの使用を許可されたのでしょうか。トリガーを一度削除してから再度設定しなおしたのでしょうか。まず実行された内容を理解したいと思いますので、流れをお教えいただけますと助かります。
spidernyan

2018/11/17 06:29

内容をご確認いただき、ありがとうございます。 「// FormApp.getActiveForm()」を追加し、「実行」を行ったところ、 【TypeError: undefined からプロパティ「response」を読み取れません。(行 3、ファイル「コード」)表示しない】のエラーがでました。 しかし、試しに作成したフォームに入力したところ、希望内容(入力されたメールアドレスへの自動返信メールの送信および、担当者メールアドレス記載への申し込み控えの送信)ができました。 後ほど、行ったことを記載させていただきます。 別の方からいただいたコメント「トリガーによる動作はトリガーのもととなる操作(つまりフォームの記入と送信)をしなければ"テスト"することさえできないです。」がヒントになり、テスト=スクリプトエディタでの実行ができないだけで、入力したら、希望内容のことができるかもしれない、と考え行ったところ、できるようになりました。 実行ができない理由はわかりませんが、この度は不慣れな自分へのご丁寧なアドバイス、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問