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

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

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

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

Q&A

1回答

4626閲覧

【GAS】(エラーなし)メール送信されない事象および内容により返信先(TO)変更方法について

mitsuba

総合スコア20

Google Apps Script

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

0グッド

0クリップ

投稿2021/05/21 10:10

【シート名】課題シートのM列が「本日」の日付の場合、G列のチーム名のメンバーへ
メール通知したくコードを作成いたしましたが、メールが送信されません。
※GASのログでは、エラーは発生していません。

イメージ説明
※M列には、本日の日付を入力して実装してますが、エラーとなります。

function Daily_mail(){ //管理表の入力状況をデイリーメールとして配信 var ss=SpreadsheetApp.getActiveSpreadsheet(); //開いているスプレッドシートを取得 var Manage_Sheet=ss.getSheetByName("課題"); //「課題」シートを取得 var Datas=Manage_Sheet.getDataRange().getValues(); //「課題」シートのデータを取得 var d=new Date(); var today var flag=0; //フラグ var Manage_LastRow=Manage_Sheet.getRange("C:C").getValues().filter(String).length; //管理表シートのC列の最終行を取得 var tmp_msg=""; //メール文言 for(var m=13;m<=Manage_LastRow+1;m++){ var tmp=Datas[m][6]; //M列の日付を取得 Logger.log(Datas[m][6]); //M列でセル結合している部分の回避処理 if (tmp==""){ continue; } if(today){ //M列の日付が今日の日付である場合にフラグをたてて、メール本文を作成する flag=1; //フラグに1を代入する tmp_msg=tmp_msg+"● No."+Datas[m][0]+"  "+Datas[m][3]+" "+Datas[m][4]+"  "+Datas[m][5]+"\n"; //フォーム投稿があったデータをメール本文用に取りまとめ } } //フラグが立っている場合(当日の日付がある場合) if(flag==1){ var ss_Url=ss.getUrl(); //スプレッドシートのURLを取得(スプレッドシートへのリンク生成用) var sh_id=Manage_Sheet.getSheetId(); //シートのシートIDを取得(スプレッドシートへのリンク生成用) var sh_Url=ss_Url+"#gid="+sh_id; //シートのURL var Mail_to="aaa@gmail.com"; //デイリーメールの送付先(To)を入力 var Mail_cc="aaa@gmail.com"; //デイリーメールの送付先(CC)を入力(複数ある場合は、カンマ区切りで複数のアドレスを指定) var Mail_from="aaa@gmail.com";//メール送信元メールアドレス(事務局のML) var Mail_suject="テスト"; //メール件名 //メール本文 var Mail_text="各位\n\n"+ "テスト\n"+ "テスト\n"+ sh_Url+"\n\n"+ "----------------------------------------------------------\n"+ tmp_msg+ "----------------------------------------------------------\n"; //メール送信(送信元を○○課でメールを送信する) GmailApp.sendEmail(Mail_to, Mail_suject, Mail_text,{cc:Mail_cc,name:'○○課',from:Mail_from}) } }

また、上記コードは、Toの宛先を固定としておりますが、可能であれば、
G列のチーム名毎(Aチーム:aaa@gmail.com/Bチーム:bbb@gmail.com)に、
宛先を変更したいです。

チーム名のアドレスは、コードの中に組み込みでも良いですし、
別シートへの記載でもよいのですが、実装する事は可能でしょうか?

なお、画像の様に、「Aチーム」が2件ある場合は、「Aチーム」へのメールは、1通に纏めたいです。

現在作成しているサンプルで、メールが送付されない為、宛先別のコードまで作成できておらず、
申し訳ありませんが、実現可否含め教えていただけますとたすかります。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

追記
if(today == tmp) // ここで今日とDatas[m][6]の比較をしています。

エラーが出ないということであれば、まずどこまでが動いているのか確認する上で、console.logやLogger.log、デバッグで流れを見てみていただけますか?。

デバッグであれば、 //メール送信(送信元を○○課でメールを送信する) メール送信前で止めて、
変数に自分の期待した値が入っているか希望どおりの挙動となっているか確認してみてください。

console.logやLogger.logを使用するのであれば、
各処理が始まるタイミング、終わるタイミングで処理のキーとなっている部分に記入し、挙動を確認してみてください。

gas

1function Daily_mail(){ 2 //管理表の入力状況をデイリーメールとして配信 3 var ss=SpreadsheetApp.getActiveSpreadsheet(); //開いているスプレッドシートを取得 4 var Manage_Sheet=ss.getSheetByName("課題"); //「課題」シートを取得 5 var Datas=Manage_Sheet.getDataRange().getValues(); //「課題」シートのデータを取得 6 7 var today = dayjs.dayjs().format("YYYY/MM/DD") 8 var flag=0; //フラグ 9 10Manage_LastRow=Manage_Sheet.getRange("C:C").getValues().filter(String).length; //管理表シートのC列の最終行を取得 11 var tmp_msg=""; //メール文言 12 for(var m=13;m<=Manage_LastRow+1;m++){ 13 var tmp = dayjs.dayjs(Datas[m][6]).format("YYYY/MM/DD"); //M列の日付を取得 14 15 Logger.log(Datas[m][6]); 16 //M列でセル結合している部分の回避処理 17 if (tmp==""){ 18 continue; 19 } 20 if(today == tmp){ 21 //M列の日付が今日の日付である場合にフラグをたてて、メール本文を作成する 22 flag=1; //フラグに1を代入する 23 tmp_msg=tmp_msg+"● No."+Datas[m][0]+"  "+Datas[m][3]+" "+Datas[m][4]+"  "+Datas[m][5]+"\n"; //フォーム投稿があったデータをメール本文用に取りまとめ 24 } 25 } 26 //フラグが立っている場合(当日の日付がある場合) 27 if(flag==1){ 28 var ss_Url=ss.getUrl(); //スプレッドシートのURLを取得(スプレッドシートへのリンク生成用) 29 var sh_id=Manage_Sheet.getSheetId(); //シートのシートIDを取得(スプレッドシートへのリンク生成用) 30 var sh_Url=ss_Url+"#gid="+sh_id; //シートのURL 31 var Mail_to="aaa@gmail.com"; //デイリーメールの送付先(To)を入力 32 var Mail_cc="aaa@gmail.com"; //デイリーメールの送付先(CC)を入力(複数ある場合は、カンマ区切りで複数のアドレスを指定) 33 var Mail_from="aaa@gmail.com";//メール送信元メールアドレス(事務局のML) 34 var Mail_suject="テスト"; //メール件名 35 //メール本文 36 var Mail_text="各位\n\n"+ 37 "テスト\n"+ 38 "テスト\n"+ 39 sh_Url+"\n\n"+ 40 "----------------------------------------------------------\n"+ 41 tmp_msg+ 42 "----------------------------------------------------------\n"; 43 //メール送信(送信元を○○課でメールを送信する) 44 GmailApp.sendEmail(Mail_to, Mail_suject, Mail_text,{cc:Mail_cc,name:'○○課',from:Mail_from}) 45 } 46}

追記

また、上記コードは、Toの宛先を固定としておりますが、可能であれば、

G列のチーム名毎(Aチーム:aaa@gmail.com/Bチーム:bbb@gmail.com)に、
宛先を変更したいです。

チーム名のアドレスは、コードの中に組み込みでも良いですし、
別シートへの記載でもよいのですが、実装する事は可能でしょうか?

もちろん可能です。
コード内に組み込むのであれば、

gas

1var team = *** ← //取得したチーム名を入れる 2var to; 3switch(team){ 4 case "Aチーム" 5 to = "aaa@gmail.com" 6 break; 7 case "Bチーム" 8 to = "bbb@gmail.com" 9 break; 10 case "Cチーム" 11 to = "ccc@gmail.com" 12 break;    13} 14

と、switch文で可能です。
別シートを利用するのであれば、if文とfor文で使えば抽出できると思います。

なお、画像の様に、「Aチーム」が2件ある場合は、「Aチーム」へのメールは、1通に纏めたいです。

ここ場合は、連想配列等を利用したり、それぞれのチームごとの変数をつくり入れておくという方法を用いれば可能です。

連想配列や二次元配列が理解できていないと意味不明となると思うので、まずは単発でメールを送れるようになったのちに改めて質問いただき、実装されるのがよいかと思います!


var today になにも代入されていないので↓ここから下はすべて処理が実行されないです。

gas

1 if(today){ 2 //M列の日付が今日の日付である場合にフラグをたてて、メール本文を作成する 3 flag=1; //フラグに1を代入する 4 tmp_msg=tmp_msg+"● No."+Datas[m][0]+"  "+Datas[m][3]+" "+Datas[m][4]+"  "+Datas[m][5]+"\n"; //フォーム投稿があったデータをメール本文用に取りまとめ 5 } 6 } 7 //フラグが立っている場合(当日の日付がある場合) 8 if(flag==1){ 9 var ss_Url=ss.getUrl(); //スプレッドシートのURLを取得(スプレッドシートへのリンク生成用) 10 var sh_id=Manage_Sheet.getSheetId(); //シートのシートIDを取得(スプレッドシートへのリンク生成用) 11 var sh_Url=ss_Url+"#gid="+sh_id; //シートのURL 12 var Mail_to="aaa@gmail.com"; //デイリーメールの送付先(To)を入力 13 var Mail_cc="aaa@gmail.com"; //デイリーメールの送付先(CC)を入力(複数ある場合は、カンマ区切りで複数のアドレスを指定) 14 var Mail_from="aaa@gmail.com";//メール送信元メールアドレス(事務局のML) 15 var Mail_suject="テスト"; //メール件名 16 //メール本文 17 var Mail_text="各位\n\n"+ 18 "テスト\n"+ 19 "テスト\n"+ 20 sh_Url+"\n\n"+ 21 "----------------------------------------------------------\n"+ 22 tmp_msg+ 23 "----------------------------------------------------------\n"; 24 //メール送信(送信元を○○課でメールを送信する) 25 GmailApp.sendEmail(Mail_to, Mail_suject, Mail_text,{cc:Mail_cc,name:'○○課',from:Mail_from}) 26 } 27}

投稿2021/05/21 10:23

編集2021/05/24 00:04
Tatsunosuke

総合スコア599

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

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

mitsuba

2021/05/23 23:41

Tatsunosukeさん、丁寧にご回答いただき、ありがとうございます。 アドバイスいただきました通り、まずは宛先指定のメール実装より対応してみたいと思い、 「var today」に、「var today=Utilities.formatDate(d,'Asia/Tokyo','yyyy/MM/dd'); 」を入力してみましたが、メールが送付されない状態が続いてしまっております。 なお、ログではエラーが発生していない状況となっております。 上記のコードに誤りがある様でしたら、修正方法等アドバイスいただけないでしょうか? よろしくお願いいたします。
Tatsunosuke

2021/05/26 10:47

何か進展はありましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問