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

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

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

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

Q&A

解決済

1回答

306閲覧

GAS+フォーム 自動送信メールのCC送付先エラーを解消したい

e-y

総合スコア4

Google Apps Script

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

0グッド

2クリップ

投稿2025/04/28 01:14

編集2025/04/30 08:55

実現したいこと

GAS+フォームを使用して、フォームの回答内容を確認用メールとして回答者に自動送信しています。
CCには、フォームの「CC送付先(メールアドレス)」に入力されたものと、マストでGAS上に指示したメールアドレスの両方が入る仕様ですが、フォームの「CC送付先(メールアドレス)」が空欄だとエラーとなってしまいます。空欄の場合はマストでGAS上に指示したメールアドレスのみCC送付先となるように改修したいです。

発生している問題・分からないこと

フォームの「CC送付先(メールアドレス)」が空欄だと、自動送信メールが送れません。

エラーメッセージ

error

1yyyy/mm/dd hh:mm:ss エラー undefined

該当のソースコード

function autoEmails(e) { /* ◆◆ ↓↓ 回答者へのメール ↓↓ ◆◆ */ /* ステップ1: フォームのデータを取得する */ //すべての質問と回答を取得する let itemResponses = e.response.getItemResponses(); //回答者のメールアドレスを取得する let recipient = e.response.getRespondentEmail(); //回答者以外の送付先アドレスを取得する let cc = itemResponses[1].getResponse(); //回答編集用URLを取得する let editURL = e.response.getEditResponseUrl(); /* ステップ2: 必要なデータを抽出する */ //個々の質問と回答を格納するための空配列を宣言する let questionAndAnswers = []; //for文(ループ)で変数itemResponsesから個々の質問と回答を取得する for(let i = 0; i < itemResponses.length; i++) { //質問のタイトルを取得する let questionTitle = itemResponses[i].getItem().getTitle(); //回答を取得する let answer = itemResponses[i].getResponse(); //未回答の質問かどうかで送信文章を調整する if(!answer) { questionAndAnswers.push(questionTitle + ": 未回答"); } else { questionAndAnswers.push(questionTitle + ": " + answer); } } /* ステップ3: 宛先、件名、本文を決める */ //メールの件名 let subject = "【テスト】※〇△※ "       + itemResponses[2].getResponse() + "_" + itemResponses[3].getResponse() + "(担当:" + itemResponses[0].getResponse() + ")" + Utilities.formatDate(new Date, "JST", "yyMMdd"); //メールの本文 let body = itemResponses[0].getResponse() + "さん\n" + "\n" + "回答ありがとうございました。\n" + "\n" + "内容をご確認ください。\n" + "\n" + "=================================\n" + questionAndAnswers.join("\n") + "\n" + "=================================\n" + "\n" + "以上" + "\n\n" + "---------------------------------------------------\n" + "署名\n" + "メールアドレス①\n" /* ステップ4: 回答者にメールを送信する */ // オプション:CC送付先アドレス+常設用アドレス //指定したアドレスから送付 let options = { cc: cc + ",メールアドレス①", from: "メールアドレス②", name:"部門名" }; //回答者にメールを送信する GmailApp.sendEmail(recipient, subject, body, options); /* ◆◆ ↑↑ 回答者へのメール ↑↑ ◆◆ */ }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

let cc = itemResponses[1].getResponse();
上記のコードでCCメールアドレスを取得し、
let options = { cc: cc + ",メールアドレス①", from: "メールアドレス②", name:"部門名" }
上記のコードで「cc: cc +」と指示しているのが問題だと思うのですが、CC送付先としてメールアドレスを2か所から引っ張ってくる方法が上記しか見つからず、行き詰っています。

補足1

条件分岐を設定してみましたが、動作しませんでした。
やってみたこと↓

//回答者以外の送付先アドレスを取得する
let cc = itemResponses[1].getResponse();

//ccが未回答かどうかでcc送信先を調整する
if(!cc) {
Answers.push(answer + ",メールアドレスA");
} else {
Answers.push("メールアドレスA");
}

//中略

/* ステップ4: 回答者にメールを送信する */
// オプション:CC送付先アドレス+常設用アドレス //指定したアドレスから送付
let options = { cc: cc, from: "メールアドレスB", name:"部門名" };

補足2

条件分岐を見直してみましたが、やはり動作しませんでした。
やってみたこと↓

//回答者以外の送付先アドレスを取得する
let cc = itemResponses[1].getResponse();

//ccが未回答かどうかでcc送信先を調整する
if(!cc.isBlank) {
Answers.push("メールアドレスA");
} else {
Answers.push(answer + ",メールアドレスA");
}

//中略

/* ステップ4: 回答者にメールを送信する */
// オプション:CC送付先アドレス+常設用アドレス //指定したアドレスから送付
let options = { cc: cc, from: "メールアドレスB", name:"部門名" };

補足3

再度構文を変更して動作確認しました。メールは送れるようになりましたが、ccにはメールアドレスAしか入らず、フォームに入力したメールアドレスがccとして設定できませんでした。
フォームの「未回答」を指定するのは「isBlank」ではないのでしょうか。素人質問ですみません。
やってみたこと↓

//回答者以外の送付先アドレスを取得する
let cc = itemResponses[1].getResponse();

//ccが未回答かどうかでcc送信先を調整する
if(!cc.isBlank) {
cc = "メールアドレスA";
} else {
cc = cc + ",メールアドレスA");
}

//中略

/* ステップ4: 回答者にメールを送信する */
// オプション:CC送付先アドレス+常設用アドレス //指定したアドレスから送付
let options = { cc: cc, from: "メールアドレスB", name:"検証中" };

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

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

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

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

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

CHERRY

2025/04/28 01:48

cc が空 かどうかで、条件分岐すれば良いと思います。
e-y

2025/04/28 02:25

コメントありがとうございます。条件分岐を試しましたがまだ解決できていません。 試した結果を質問に追記しました。
YT0014

2025/04/28 05:40

タグとして「Java」が設定されていますが、ご提示のソースはJavaには見えません 「JavaScript」「Google Apps Script」などの適切なタグへの変更をご検討ください
YT0014

2025/04/28 05:53

補足のコードですが、分岐内の処理はあっていますか? メール送信時に使用している変数ccは、この処理では更新されませんが
e-y

2025/04/28 06:30

ご回答ありがとうございます。 タグを「Google Apps Script」に変更しました。ご指摘ありがとうございました。 メール送信時の変数ccを更新するにはどのように記述すればよいか、差支えなければご教示ください。
YT0014

2025/04/28 07:52 編集

タグ変更ありがとうございます 私はGoogleAppsScriptの使用経験がないので、正しいコードの提示はできかねます 通常では、変数ccの操作になるかと
e-y

2025/04/28 08:22

ご丁寧にご返信ありがとうございます。 変数ccの操作についてもう少し調べて試してみます。
YAmaGNZ

2025/04/28 22:46

細かいところは見ていませんがccが空白になりccに指定するのが,メールアドレス①となってしまって送信できないというのであれば ccが空白だったら ccに"メールアドレス①"を代入 そうではなかったら ccにcc+",メールアドレス①"を代入 とすればいいのでは?
e-y

2025/04/29 07:18

コメントありがとうございます。 条件分岐の内容を見直して自分なりに試してみましたがまだ解決できていません。 試した結果を質問に追記しました。 初歩的な質問かもしれず大変恐縮ですが、アドバイスいただけると助かります。
YAmaGNZ

2025/04/29 09:43

とりあえず未回答かどうか判断できているか確認してみてはどうでしょうか。 if(条件){ Logger.log("未回答"); } else { Logger.log("回答した"); } といった感じで それで判断できたのであれば cc = cc + ',メールアドレスA'; もしくは cc = 'メールアドレスA'; とすればいいでしょう。 //未回答の質問かどうかで送信文章を調整する とした部分が正常に動作しているのであればCC先の方も判断できるのではないでしょうか。
YT0014

2025/04/29 14:11

答えは不要ですが、以下をご検討ください 条件分岐の目的は、メール送信時のCCに使用する変数(現状では変数「cc」)の調整ではないのか? ご提示いただいた補足で突然出てくる配列変数「Answers」は、この後、どのように使用されるのか? 条件分岐内で、なぜ、変数「cc」ではなく配列変数「Answers」を対象にしたのか? なお、コード作成をAIツールや参考サイトからの引用に頼っているなどのご事情があれば、サイトURLなどを含め、ご提示のほど、お願いします
e-y

2025/04/30 08:57

YAmaGNZさん、アドバイスありがとうございます。自動メールは無事送れるようになりましたが、フォームに入力したメールアドレスを常設メールアドレス(メールアドレスA)にプラスして自動メールのccに設定する方法が上手くいきません。お力添えいただけませんでしょうか。
e-y

2025/04/30 09:01

YT0014さん、コメントありがとうございます。おっしゃるとおり変数ccの調整がしたいのにAnswersを設定しているのがそもそも誤りでした。ご指摘いただき大変助かりました。 コード作成にはAIツールを使用しておりません。独学で参考サイトや本などを調べながら記述しております。 今回の内容に関してはインターネット上に参考サイトなどが見つからず、手探りで作成しております。 おかしなところがございましたら、ぜひご意見くださいませ。勉強します。
YellowGreen

2025/04/30 21:46 編集

既に条件分岐を試みられているところで恐縮ですが… 最初にご提示のコード(条件分岐を加える前)について質問です let options = { cc: cc + ",メールアドレス①", from: "メールアドレス②", name:"部門名" }; を let options = { cc: "メールアドレス①," + cc, from: "メールアドレス②", name:"部門名" }; に(ccとメールアドレス①の順序を逆に)してもエラーになりますか
e-y

2025/05/01 00:12

YellowGreenさん、コメントありがとうございます。ccとメールアドレス①の順序を逆にしたところ問題が解決しました!ありがとうございました!本当に助かりました! ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
YellowGreen

2025/05/01 01:27

回答ではなく、質問をしただけなので… ご自身で解決済みとしていただければと思います お手数をおかけします
e-y

2025/05/01 02:56

YellowGreenさん、コメントありがとうございます。お言葉どおり解決済みとしておきます。 自力では答えにたどり着けなかったと思いますので、コメントいただけて本当に助かりました。 ありがとうございました。
guest

回答1

0

自己解決

元のコードのoptionの指示内容を書き換えることで解決しました。

let options = { cc: cc + ",メールアドレス①",
from: "メールアドレス②",
name:"部門名" };

let options = { cc: "メールアドレス①," + cc,
from: "メールアドレス②",
name:"部門名" };

に(ccとメールアドレス①の順序を逆に)修正しました。

投稿2025/05/01 02:59

e-y

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問