実現したいこと
- Gmail送信日時を取得してスプレッドシートに反映させたい
前提
・GASからメール(gmail)を送信した際に送信日時をスプレッドシートに反映させたい
(スプレッドシートのH列に反映させたい)
発生している問題・エラーメッセージ
エラーはおきていないです
該当のソースコード
GAS
1function myFunction() { 2 3 //SSのデータ読み込み 4 const obj = SpreadsheetApp.openById('SS_ID'); 5 const sheet = obj.getSheetByName('テスト'); 6 //H列に反映させたい 7 const range = sheet.getRange('H2'); 8 console.log(range.getValue()); 9 10 // メール(スレッド)取得 11 let mailThreads = GmailApp.search('to:メーリングリストのアドレス'); 12 Logger.log(mailThreads); 13 14 // スレッドからメールを取得する 15 let threads = GmailApp.getMessagesForThreads(mailThreads); 16 Logger.log(threads); 17 18 // スレッドごとに内容を取得する 19 threads.forEach(function (thread) { 20 // メッセージ内容を取得 21 thread.forEach(function (message){ 22 // 送信日時 23 let date = message.getDate(); 24 Logger.log(date); 25 }); 26 }); 27}
試したこと
参考サイト
・https://itsakura.com/gas-gmail-sheet
・https://teratail.com/questions/345216
・https://tetsuooo.net/gas/2812/
・https://add-luck18.com/gas-gmail-2/
・https://www.mirandora.com/?p=78
以上のサイトを参考に何度もコードを書き直しましたが、上手くスプレッドシートに反映されないです
ご提示のスクリプトでログにメールの日付が表示されていると思いますが、
シートには日付をどのように記入したいのでしょうか?
例えば、日付だけをC列の最後の行から順に下の行に追加していくなど。
コメントありがとうございます。
すみません><日付と時間になります。
理想は、
・メールを送ったタイミングで、送った日程と時間が記載される
(複数人に一斉送信しています)
になります><
分かりづらく申し訳ございません。
既に回答がついていますのでそちらの推移を見守ることにしますが、
ログで確認できるように、getDate()で日付も時刻も取得できています。
件名などは必要なくて日付と時刻だけが同じ1つの列に順に入力されることをご希望なのですね。
2023/06/11 10:58:58
2023/06/12 14:12:15
2023/06/12 15:10:28
...
...
のような記入をご希望でしょうか。
コメントありがとうございます。
仰るとおりです!!
ご質問を重ねてしまいますが、
一度取得したメールをラベルなどで処理済みにするか、
シートに記入する際に重複する日時は記入しないようにする必要はないでしょうか?
むしろありがとうございます、、、!
質問の回答になっているかわからないのですが、
・スプレッドシートに、メール送信後「done」と記載される
・1日に一斉送信(50件ほど)する予定のため重複しても構いません
よろしくお願いします。
ごめんんさい。さらに重ねてお伺いします。
メール送信後の「done」は日時が入力されると計算式で表示されるのでしょうか?
1日に一斉送信することと、重複しても構わないということ
の意味が繋がりません。
ご提示のスクリプトでは、
実行するたびに過去のすべての日時を取得しますので、
そのままシートに追記していくと雪だるま式に日時の行数が増えて
(過去のメール件数×実行回数分)いきます。
※取得したメールに「done」と表示されているわけでないので
シートの日付と重複比較しない限り区別できません。
それが構わないのがなぜなのかが疑問でした。
そうだったんですね、失礼しました><
メール送信後の「done」は日時が入力されると計算式で表示されるのでしょうか?
→いえ、また別の処理です。以下にコード記載しておきます。
//メール送信
GmailApp.sendEmail(toAddress, subject, mainMessage, options);
b.getRange(set4).setValue("done"); //A列に"done"と入力
1日に一斉送信することと、重複しても構わないということ
の意味が繋がりません。
→1日に50名ほど一斉送信するので日時は重複してもいいという意味でしたが質問の意図と違いましたかね??違う場合もう一度ご質問お伺いしてもよろしいでしょうか?
ごめんなさい。まだ
1日に50名ほど一斉送信するので日時は重複してもいいという意味でした
が理解できていませんでした。
私の理解不足のようです。
これ以上のご説明はお手数をおかけするだけのようです。
いえ、私の理解不足です><
申し訳ございません。。。いつもコメントありがとうございます><
大変助かっております。。。
お手数おかけしますが再度ご質問お伺いしてもよろしいでしょうか?
