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

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

詳細はこちら
Google フォーム

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

Google Apps Script

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

Q&A

1回答

1196閲覧

Googleフォームの回答(画像付き)を、回答に応じて違うアドレスに自動送信したい

dada666

総合スコア0

Google フォーム

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/12/11 07:08

前提・実現したいこと

GAS初心者です。位置から学び始め1週間、最低限の知識しかないので大変恐縮なのですが・・・
取り急ぎタイトルにもあるとおり
**「Googleフォームの回答(画像付き)を、回答に応じて違うアドレスに自動送信する」**コードを書きたいのです。

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

調べながらコピペでなんとか下記2つはそれぞれできて、動作もしました。

1⃣回答に応じて異なるアドレスに自動送信する(⇒問題:画像はIDで表示されてしまう)
2⃣画像がIDではなくきちんと表示され、送信される(⇒問題:回答によって送信先を変えることができない)

完成形としてはこの2つの要素を合わせたコードにしたいのですが、どうすればいいのかわからず・・・
いろいろ試しましたがうまくいきません・・・。

どなたか、力を貸してください・・・
仕事のためこれ以上時間を掛けられないのですが、取り急ぎこのシステムが必要なのです・・・
どうぞよろしくお願いいたします。

### 該当のソースコード1⃣ //回答に応じて異なるアドレスに自動送信する function メール送信(e){ var subject = "メールの件名"; var body = "\n\nメールの本文\n"; var to = "xxxxx@xxx.co.jp"; 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+'】'; body += ans; if (title==="分岐させたい質問のタイトル") { if (ans==="選択肢A") { to = "AAAAA@AAAAA.co.jp"; } else if (ans==="選択肢B") { to = "BBBBB@BBBBB.co.jp"; } } } MailApp.sendEmail({to:to,subject:subject, body:body}) } ### 該当のソースコード2⃣ //画像がIDではなくきちんと表示され、送信される function submitForm(e){  var itemResponses = e.response.getItemResponses();  var message = '';  for (var i = 0; i < itemResponses.length; i++) {  var itemResponse = itemResponses[i];  var question = itemResponse.getItem().getTitle();  var answer = itemResponse.getResponse();  var options = {};   if(question == '写真をアップロードする質問のタイトル'){  var img = DriveApp.getFileById(answer[0]);  options.htmlBody = '<img src="cid:ansImg" />';  options.inlineImages = {ansImg:img}; } message += (i + 1).toString() + '. ' + question + ': ' + answer + '\n'; }  var address = '1234567890@gmail.com';  var title = 'メールの件名';  var content = 'メールの本文\n\n' +  //ここは入力してもなぜか反映されませんでした  message; GmailApp.sendEmail(address, title, content, options); }

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

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

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

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

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

draq

2020/12/11 12:21 編集

画像とかIDとか何のことでしょうか?ちょっと意味がわからないので説明をお願いします。 > 仕事のためこれ以上時間を掛けられないのですが、取り急ぎこのシステムが必要なのです・・・ それは回答者には関係ありません。こんなこと書くのはむしろ逆効果です。本当に急いでいるならここではなく、有償で誰かに依頼してください、と言われるだけです。クラウドソーシングで探せばい、受けてくれる人はくらでもいるでしょう。
dada666

2020/12/11 13:30

ご回答、ありがとうございます。初めての質問で大変不安でしたので、ご回答いただけたことに感謝しております…! 質問文につきまして、言葉足らずで申し訳ございません。「これ以上時間をかけられない〜」の文は、確かに蛇足でした。失礼いたしました。 下記にて補足いたします。 画像とは、Googleフォームの質問として設定できる「ファイルアップロード」で収集された画像のことです。形式はjpegになります。 IDとは、上記の通りフォームから画像が送信されるとGoogleドライブに保存されるのですが、そのURLです。 例) https://drive.google.com/file/d/xxxxxx/view?usp=sharing ↑Googleドライブに保存された画像を共有可能なリンクとして表示するとこうなり、xxxxxxの部分がIDになっております。 今回の質問の主旨としては、自動送信されるメール文に「画像」としてそのまま表示させたいのですが、なぜか「ID」だけ取り出されて本文に文字として記載されてしまうので解決方法を 教えていただきたいというものでした。 もし解決方法をご存知でしたら、どうぞよろしくお願いいたします…!
guest

回答1

0

ソースコード2でaddressの値を回答によって変更するだけです。それはソースコード1で出来ているとのことなので組み合わせればいいです。

例えばこんな感じです。行頭に+が付いている行は追加した行で、-が付いている行は削除した行です。

Diff

1 function submitForm(e) { 2 var itemResponses = e.response.getItemResponses(); 3 4+ let address; 5+ for (var i = 0; i < itemResponses.length; i++) { 6+ var itemResponse = itemResponses[i]; 7+ var title = itemResponse.getItem().getTitle(); 8+ var ans = itemResponse.getResponse(); 9+ 10+ if (title === "分岐させたい質問のタイトル") { 11+ if (ans === "選択肢A") { 12+ address = "AAAAA@AAAAA.co.jp"; 13+ } else if (ans === "選択肢B") { 14+ address = "BBBBB@BBBBB.co.jp"; 15+ } 16+ } 17+ } 18 19 var message = ""; 20 for (var i = 0; i < itemResponses.length; i++) { 21 var itemResponse = itemResponses[i]; 22 var question = itemResponse.getItem().getTitle(); 23 var answer = itemResponse.getResponse(); 24 var options = {}; 25 if (question == "写真をアップロードする質問のタイトル") { 26 var img = DriveApp.getFileById(answer[0]); 27 options.htmlBody = '<img src="cid:ansImg" />'; 28 options.inlineImages = { ansImg: img }; 29 } 30 message += (i + 1).toString() + ". " + question + ": " + answer + "\n"; 31 } 32- var address = "1234567890@gmail.com"; 33 var title = "メールの件名"; 34 var content = 35 "メールの本文\n\n" + //ここは入力してもなぜか反映されませんでした 36 message; 37 GmailApp.sendEmail(address, title, content, options); 38 }

ここは入力してもなぜか反映されませんでした

画像をインライン表示するためにHTMLメールとして作成しているため、プレインテキスト部分が表示されていないからです。

message += (i + 1).toString() + ". " + question + ": " + answer + "\n";

としている箇所もプレインテキストとして作成しているので表示去れていないはずです。
htmlBodyにそれらも含めたHTML文書を設定するようにする必要があります。

投稿2020/12/11 23:16

draq

総合スコア2577

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問