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

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

ただいまの
回答率

90.12%

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 5,775

spidernyan

score 5

 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の情報で見よう見まねで作ったものですが、今まで問題なく使えていました。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

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
エラー率 -

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/16 09: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);
    }

    キャンセル

  • 2018/11/16 10:15

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

    キャンセル

  • 2018/11/17 15:29

    内容をご確認いただき、ありがとうございます。
    「// FormApp.getActiveForm()」を追加し、「実行」を行ったところ、
    【TypeError: undefined からプロパティ「response」を読み取れません。(行 3、ファイル「コード」)表示しない】のエラーがでました。
    しかし、試しに作成したフォームに入力したところ、希望内容(入力されたメールアドレスへの自動返信メールの送信および、担当者メールアドレス記載への申し込み控えの送信)ができました。

    後ほど、行ったことを記載させていただきます。
    別の方からいただいたコメント「トリガーによる動作はトリガーのもととなる操作(つまりフォームの記入と送信)をしなければ"テスト"することさえできないです。」がヒントになり、テスト=スクリプトエディタでの実行ができないだけで、入力したら、希望内容のことができるかもしれない、と考え行ったところ、できるようになりました。

    実行ができない理由はわかりませんが、この度は不慣れな自分へのご丁寧なアドバイス、ありがとうございました。

    キャンセル

0

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

ここに書かれた

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

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

似たメッセージで

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/16 10:01

    ご回答ありがとうございます。

    トリガーの設定については、

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

    としました。
    何か不足な点がありましたら、ご教示いただけますと幸いです。

    キャンセル

  • 2018/11/16 10:11 編集

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

    キャンセル

  • 2018/11/17 15:28

    ありがとうございます。
    「// FormApp.getActiveForm()」を追加し、「実行」を行ったところ、
    【TypeError: undefined からプロパティ「response」を読み取れません。(行 3、ファイル「コード」)表示しない】のエラーがでました。
    しかし、試しに作成したフォームに入力したところ、希望内容(入力されたメールアドレスへの自動返信メールの送信および、担当者メールアドレス記載への申し込み控えの送信)ができました。

    後ほど、行ったことを記載させていただきます。
    いただいたコメント「トリガーによる動作はトリガーのもととなる操作(つまりフォームの記入と送信)をしなければ"テスト"することさえできないです。」がヒントになり、テスト=スクリプトエディタでの実行ができないだけで、入力したら、希望内容のことができるかもしれない、と考え行ったところ、できるようになりました。

    実行ができない理由はわかりませんが、この度は不慣れな自分へのご丁寧なアドバイス、ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • Google Apps Scriptに関する質問
  • エラーがでました。Googleフォーム送信時に自動返信メールおよび、控えを登録アドレス(担当者メールアドレス記載 部分に書いたアドレス)に送りたいです。