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

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

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

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

Google

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

Q&A

0回答

1270閲覧

google formsで入力項目ごとにメールの送信先をGASを使って変更したい

kagai

総合スコア0

Google Apps Script

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

Google

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

0グッド

0クリップ

投稿2020/07/29 04:53

前提・実現したいこと

google formsで送信時に、指定したアドレスに入力した内容を送るというスクリプトを作成しました。
指定のアドレスが複数あり、アドレスの書かれたタブを選択する形にしていますが、数が多く見えづらい状況です。
そのため、フォームの選択肢(アドレスではなくチーム名等)で、指定したいと思っております。

例えばフォームの初めの選択肢で
「チーム1」「チーム2」「チーム3」・・・と選択肢があった場合
「チーム1」を選択したら、1の担当のアドレスへ
「チーム2」を選択したら、2の担当のアドレスへ
「チーム3」を選択したら、3の担当のアドレスへ、送付したいです。
GASに記載されているアドレスを読み取って送付されるようなスクリプトを作成したいです。

下記スクリプトへの追加記載方法がわからず
お分かりの方がいましたら教えて頂けますと幸いです。

ちなみにアドレスは、1つの選択肢に最大で4つほど盛り込む予定です。

初心者なので未熟なところもありますが
何卒宜しくお願い致します。

該当のソースコード

javascript

1FormApp.getActiveForm(); 2 3function onSubmit(e) { 4 // フォームのメールアドレスとお名前の項目名 5 const emailTitle = 'メールアドレス'; 6 const nameTitle = '担当者'; 7 const companyTitle = '申込者名'; 8 const numberTitle='申込書番号'; 9 10 11 12 // メールで使う定数 13  const newLine = '\n'; 14 15 // フォームの内容一覧を取得する 16 const items = e.response.getItemResponses(); 17 18 // 自動返信するお問い合わせのあったメールアドレスを取得する 19 const email = getValueByTitle(items,emailTitle) 20 21 22// 担当者を取得する 23 const name = getValueByTitle(items,nameTitle); 24 const company = getValueByTitle(items,companyTitle); 25 const number= getValueByTitle(items,numberTitle); 26 const subject = '〇〇〇〇'+'【'+company+''+number+'】'; 27 28 29 // メール送信先 30 const admin_name="担当チーム" 31 const admin = "ccccc@cccccc"; // 管理者(必須) 32 const cc = "bbbbbb@bbbbb"; // Cc: 33 const bcc = admin; // Bcc: 34 const reply = admin; // Reply-To 35 36 37 38 39 // 本文を作成する 40 var body = ''; 41 if(name !== '') { 42 body += '◎◎◎◎様' + newLine + newLine; 43 } 44 body += 'いつもお世話になっております。' + newLine; 45 body += '以下の内容にてお申込みがありました。' + newLine + newLine; 46 items.forEach(function(item) { 47 body += '【' + item.getItem().getTitle() + '】' + newLine; 48 body += item.getResponse() + newLine + newLine; 49 }); 50 body += newLine + newLine; 51 52 body += '【ファイル名】' + newLine; 53 body += 'xxxxxxx'; 54 55 Logger.log(email); 56 Logger.log(body); 57 58 59 60// メールを送信する 61GmailApp.sendEmail(email,subject,body, 62 { 63 64 from:'aaaaaaa@aaaaaaa', 65 name:'〇〇〇〇〇', 66 67 } 68); 69} 70 71/** 72* itemsからtitleの値を取得する 73*/ 74function getValueByTitle(items, title) { 75 return items.filter(function(item) { 76 return item.getItem().getTitle() === title; 77 })[0].getResponse(); 78} 79

試したこと

以前、teratailで同様な質問がありましたので、そちらのスクリプトを参考にさせて頂きましたが、
上手く動作しませんでした。

if とif elseを使用するのではないかと思っております。

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

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

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

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

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

macaron_xxx

2020/07/29 06:39

>teratailで同様な質問がありましたので、そちらのスクリプトを参考にさせて頂きましたが、上手く動作しませんでした。 どちらのスクリプトを参考にしたのか記載ください。
kagai

2020/07/29 06:42 編集

ご回答頂き、ありがとうございます。 下記スクリプトを見ておりました。 ```javaScript function sendForm(e){ // 件名、本文 var subject = "問い合わせが送信されました"; var body = ""; // メール送信先 var to = "xxxx@xxxx.xxxx"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var title = itemResponse.getItem().getTitle(); var ans = itemResponse.getResponse(); body += '\n\n['+title+']\n\n'; body += ans; if (title==="カテゴリ選択の質問名") { if (ans==="カテゴリ1") { to = aaaa@aaaa.aaaa; } else if (ans==="カテゴリ2") { to = bbbb@bbbb.bbbb; } else if (ans==="カテゴリ3") { to = cccc@cccc.cccc; } } } MailApp.sendEmail({to:to,subject:subject, body:body}); } ```
macaron_xxx

2020/07/29 07:17

これでどこが動かなかったのでしょうか?
kagai

2020/07/29 07:33

自分で作ったスクリプト内に参考スクリプトをどのように挿入すればよいのか分からず試行錯誤しているのですが‥ to = aaaa@aaaa.aaaa; この列について「SyntaxError: Invalid or unexpected token」というエラー表示が出ます。
macaron_xxx

2020/07/29 08:04

// メール送信先 var to = "xxxx@xxxx.xxxx"; この宣言部がないからではないでしょうか。 変数の宣言は必ず行ってください。
kagai

2020/07/29 08:41

"var to = "xxxx@xxxx.xxxx"; こちらの定義はしていますが、エラーになります。 参考にしたスクリプト全文を既に自分で作成したスクリプトの最後に続けて追記しています。
macaron_xxx

2020/07/29 23:08

ちょっと言っている意味がわからないので、現状のコードを追記してください。
kagai

2020/07/30 02:43

【やってみたこと】 ①新しくフォームを作り、参考にしたスクリプトのみをいれました。 その際にもやはり、「to = aaaa@aaaa.aaaa;」だけではエラーになってしまったので、 「”to = aaaa@aaaa.aaaa;”」に変更したら正常に動作しました。 ②質問時の「該当のソースコード」に参考にしたスクリプトを追記して作動させましたが、 フォーム送信後「Exception: 無効なメール」と出てしまいます。 下記②で実施したコードになります。 // フォームの内容一覧を取得する const items = e.response.getItemResponses(); があるからメールアドレスが読み込めないのでは?と思い このコードを削除してみましたが、同じエラーメッセージでした。 GASをやり始めたばかりで上手く説明できず申し訳ございません。 ```javaScript FormApp.getActiveForm(); function onSubmit(e) { // フォームのメールアドレスとお名前の項目名 const emailTitle = 'メールアドレス'; const nameTitle = '担当者'; const companyTitle = '申込者名'; const numberTitle='申込書番号'; // メールで使う定数  const newLine = '\n'; // フォームの内容一覧を取得する const items = e.response.getItemResponses(); // 自動返信するお問い合わせのあったメールアドレスを取得する const email = getValueByTitle(items,emailTitle) // 担当者を取得する const name = getValueByTitle(items,nameTitle); const company = getValueByTitle(items,companyTitle); const number= getValueByTitle(items,numberTitle); const subject = '〇〇〇〇'+'【'+company+''+number+'】'; // メール送信先 const admin_name="担当チーム" const admin = "ccccc@cccccc"; // 管理者(必須) const cc = "bbbbbb@bbbbb"; // Cc: const bcc = admin; // Bcc: const reply = admin; // Reply-To // 本文を作成する var body = ''; if(name !== '') { body += '◎◎◎◎様' + newLine + newLine; } body += 'いつもお世話になっております。' + newLine; body += '以下の内容にてお申込みがありました。' + newLine + newLine; items.forEach(function(item) { body += '【' + item.getItem().getTitle() + '】' + newLine; body += item.getResponse() + newLine + newLine; }); body += newLine + newLine; body += '【ファイル名】' + newLine; body += 'xxxxxxx'; Logger.log(email); Logger.log(body); // メールを送信する GmailApp.sendEmail(email,subject,body, { from:'aaaaaaa@aaaaaaa', name:'〇〇〇〇〇', } ); } /** * itemsからtitleの値を取得する */ function getValueByTitle(items, title) { return items.filter(function(item) { return item.getItem().getTitle() === title; })[0].getResponse(); } function sendForm(e){ // 件名、本文 var subject = ""; var body = ""; // メール送信先 var to = "xxxx@xxxx.xxxx"; var itemResponses = e.response.getItemResponses(); for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var title = itemResponse.getItem().getTitle(); var ans = itemResponse.getResponse(); body += '\n\n['+title+']\n\n'; body += ans; if (title==="カテゴリ選択の質問名") { if (ans==="チーム1") { to = "aaaa@aaaa.aaaa"; } else if (ans==="チーム2") { to = "bbbb@bbbb.bbbb"; } else if (ans==="チーム3") { to =" cccc@cccc.cccc"; } } } MailApp.sendEmail({to:to,subject:subject, body:body}); } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問