🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

Q&A

解決済

1回答

980閲覧

Google Apps Script 自動返信メール チェックボックスの回答により送信先を変えたい

yakinikutabetai

総合スコア1

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

0グッド

0クリップ

投稿2021/03/04 09:57

前提・実現したいこと

Googleフォームでチェックボックスで選んだ選択肢により
自動返信の宛先が変更されるようにしたい。

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

チェックボックスの選択肢を複数選んだ時、宛先が複数にならずToが空になってしまう。

例)質問Aの回答
BBB,CCCにチェックを入れた場合、送信先Toはbbb@xxx.co.jp,ccc@xxx.co.jp
BBBのみにチェックを入れた場合、送信先Toはbbb@xxx.co.jp

該当のソースコード

function onFormSubmit(e){ try{ var admin = "aaa@xxx.co.jp"; var to = ""; var cc = ""; var bcc = admin; var subject = ''; var itemResponses = e.response.getItemResponses(); var body = ''; //宛先メールアドレス用の変数を用意 var mail1 = "bbb@xxx.co.jp"; var mail2 = "ccc@xxx.co.jp"; var mail3 = "ddd@xxx.co.jp"; for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); var answer = itemResponse.getResponse(); // 自動返信メール本文へ回答内容記載 if (question == "◆質問A"){ body += question + '\n' + answer + '\n\n'; } // 送信先出し分け if (question == "◆質問A") { for (var j = 0; j < itemResponses.length; j++) { var itemResponse = itemResponses[j]; var answer = itemResponse.getResponse(); if (answer == "BBB") { to += mail1 + ","; } else if (answer == "CCC") { to += mail2 + ","; } else if (answer == "DDD") { to += mail3 + ","; } } } var content = body; //メールを送信 MailApp.sendEmail( to, subject, content, {cc: cc, bcc: bcc, from: 'aaa@xxx.co.jp', name: 'hogehoge' }); } catch (e) { //エラーが発生した場合に管理者にメールを送信する MailApp.sendEmail(admin, "Error report", e.message); } }

試したこと

for文を質問Aの前に入れたが同じ結果でした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Googleフォームの記入内容が下記になっているとします。
(xはチェックが入っているという意味です)
◆質問A
[x] BBB
[x] CCC
[ ] DDD

この状態で送信ボタンを押したとき、最初のfor文以下の動作について考察します。

for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); var answer = itemResponse.getResponse();

i=0のときどうなるかというと
questionには「◆質問A」という文字列が入りますが
answerには、[BBB,CCC] という配列(回答の配列)が入ります。

さらに、その下で

// 送信先出し分け if (question == "◆質問A") { for (var j = 0; j < itemResponses.length; j++) { var itemResponse = itemResponses[j]; var answer = itemResponse.getResponse(); if (answer == "BBB") { ...

となっていますが、ここで最初のfor文と同じくitemResponsesに対してループをかけているため、
answerには[BBB,CCC]という配列が入ってしまい、
[BBB,CCC]=="BBB"... という比較を行うことになるため、以降のif文が正になることはありません。

したがって、2回目のfor文は、itemResponsesではなく、answer(回答の配列)に対して行う必要があります。
(下のコードでは、answersという変数名に変えています)

(下記先頭が-となっている行は削除 +は追加)

diff

1(略) 2 //宛先メールアドレス用の変数を用意 3 var mail1 = "bbb@xxx.co.jp"; 4 var mail2 = "ccc@xxx.co.jp"; 5 var mail3 = "ddd@xxx.co.jp"; 6 7 for (var i = 0; i < itemResponses.length; i++) { 8 var itemResponse = itemResponses[i]; 9 var question = itemResponse.getItem().getTitle(); 10- var answer = itemResponse.getResponse(); 11+ var answers = itemResponse.getResponse(); 12 13 // 自動返信メール本文へ回答内容記載 14 if (question == "◆質問A"){ 15- body += question + '\n' + answer + '\n\n'; 16+ body += question + '\n' + answers + '\n\n'; 17 } 18 // 送信先出し分け 19 if (question == "◆質問A") { 20- for (var j = 0; j < itemResponses.length; j++) { 21+ for (var j = 0; j < answers.length; j++) { 22 23- var itemResponse = itemResponses[j]; 24- var answer = itemResponse.getResponse(); 25+ var answer = answers[j]; 26 27 if (answer == "BBB") { 28(以下略)

sendEmailの直前に、Logger.log(to);を追加して、宛先メールアドレスがうまく組み立てられているか確認してみてください。

投稿2021/03/04 11:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yakinikutabetai

2021/03/05 10:40

ご説明、ご回答いただきましてありがとうございます。 やりたかったことを実現できました。 実際に宛先が組み立てられていることも確認できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問