前提・実現したいこと
google form を使用してイベントの参加の確認をしています。
スクリプトエディタを使用して、フォームに回答送信の完了後に「回答ありがとうございました」のメールを自動送信しています。
そのメールを、設問の回答内容によって本文を送り分けしたいと思っています。
イベントの参加を問う設問(ラジオボタン)の回答が 「はい」 か 「いいえ」 かで、自動送信メールの内容を変えたいと思っています。
現時点では、送り分けをせず回答後に「ありがとうございました」という、受付完了のメールを送っており、正常に機能しています。
発生している問題・エラーメッセージ
ifを使ってメールの本文の送り分けをするように書いてみましたが、メールが送信されません。
設問の回答の選択肢によって本文を変えるというifの部分が間違っているのだとは思っているのですが、
エラーメッセージが特に出てこず、何が問題かわかっていません。
以下のエラーメッセージは出ますが、これは今正常に送れているものでも出ているので、普通に回答送信してメールアドレスを入力していれば問題ないものだと思っているので、関係ないと解釈しています。
エラー TypeError: Cannot read property 'response' of undefined SendMail @ コード.gs:15
※追記 2021/02/22 13:28
TypeError: Assignment to constant variable. at SendMail(コード:45:11)
該当のソースコード
GAS
1function SendMail(e){ 2 3 const QuestionName = "お名前"; 4 let Name = ""; 5 6 const QuestionID = "ID"; 7 let ID = ""; 8 9 const QuestionCon = "ご自身の意思で研究に参加"; 10 11 //現在時刻を取得してyyyy/MM/dd HH:mm形式に変換 12 const timeStamp = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'); 13 14 //回答者のメールアドレスを取得し、送信先に設定 15 const ToMailAddress = e.response.getRespondentEmail(); 16 17 //CCの設定(使用しない) 18 const CcMailAddress = ''; 19 20 //件名、本文 21 const Subject = '回答を受け付けました' + timeStamp; 22 const Body = ''; 23 24 25 const items = e.response.getItemResponses(); 26 27 for (let i = 0; i < items.length; i++) { 28 const item = items[i]; 29 const q = item.getItem().getTitle(); 30 const a = item.getResponse(); 31 32 //質問タイトルが「お名前」だったらNameに格納 33 if ( q === QuestionName ) { 34 Name = a; 35 } 36 37 //質問タイトルが「ID」だったらAppsに格納 38 if ( q === QuestionID ) { 39 ID = a; 40 } 41 42 //選択肢に応じて本文を変更 43 if ( q === QuestionCon ) { 44 if (a === "はい" ) { 45 Body += Name +'様\n\n' 46 +'ご回答ありがとうございます。\n以下の内容に誤りがないか今一度ご確認ください。\n\n' 47 +'--------------------------------------------------------\n' 48 +'■お名前\n' 49 + Name + '\n' 50 +'■ID\n' 51 + ID + '\n' 52 +'--------------------------------------------------------\n\n' 53 +'IDやお名前に誤りがあった場合は再度回答をやり直すか、以下にご連絡ください。\n\n' 54 +'担当\n' 55 +'xxxxxxx@xxxx.co.jp\n\n' 56 +'※このメールは送信専用のメールアドレスから配信されています。\n' 57 +'ご返信いただいてもお答えできませんのでご了承ください。\n\n'; 58 } else if ( a === "いいえ" ) { 59 Body += Name +'様\n\n' 60 +'ご回答ありがとうございます。\n以下の回答内容に誤りがないか今一度ご確認ください。\n\n' 61 +'--------------------------------------------------------\n' 62 +'■「イベント名イベント名イベント名」にご参加いただけますか?' 63 +'参加しません。\n' 64 +'--------------------------------------------------------\n\n' 65 +'内容に誤りがあった場合は再度回答をやり直してください。\n\n' 66 +'※このメールは送信専用のメールアドレスから配信されています。\n' 67 +'ご返信いただいてもお答えできませんのでご了承ください。\n\n'; 68 } 69 } 70 } 71 72 //メールを送信 73 GmailApp.sendEmail(ToMailAddress, Subject, Body, {cc:CcMailAddress, noReply:true}); 74}
試したこと
ラジオボタンの選択肢の値のデータ型が違うのかと思いましたが、調べたところ文字列ということだったので、これも違うのかなと思っています。
a === "いいえ"
を a == "いいえ"
にしてみたりしたのですが、これも特になんの意味もなかったです。
補足情報(FW/ツールのバージョンなど)
エンジニアではなくただの素人なので、この質問に回答していただくために必要な情報がなにか不足しておりましたらご指摘いただければ幸いです。
助けてください。
どうぞよろしくお願いいたします。
※追記 2021/02/21 19:45
「実行数」のところを確認してみましたが、
スクリプトエディタで実行した際には上記のメールアドレス取得のエラーが出るのですが、普通にフォームで回答を送信してテストしてみると、何もエラーが出ませんでした。メールは届きません。
指定した条件に合致してないのでメールが送信されていないような挙動のように感じています。。。
ラジオボタンの選択肢は「はい」と「いいえ」しかなく、必須にもしているので、確実に回答しているのですが、、、
回答1件
あなたの回答
tips
プレビュー