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

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

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

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

Q&A

1回答

2566閲覧

【GAS】Gmail送信日時を取得してスプレッドシートに反映させたい

dirtyhandz

総合スコア3

Google Apps Script

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

0グッド

1クリップ

投稿2023/06/13 04:53

実現したいこと

  • 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

以上のサイトを参考に何度もコードを書き直しましたが、上手くスプレッドシートに反映されないです

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

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

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

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

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

YellowGreen

2023/06/13 05:32

ご提示のスクリプトでログにメールの日付が表示されていると思いますが、 シートには日付をどのように記入したいのでしょうか? 例えば、日付だけをC列の最後の行から順に下の行に追加していくなど。
dirtyhandz

2023/06/13 06:00

コメントありがとうございます。 すみません><日付と時間になります。 理想は、 ・メールを送ったタイミングで、送った日程と時間が記載される (複数人に一斉送信しています) になります>< 分かりづらく申し訳ございません。
YellowGreen

2023/06/13 06:14 編集

既に回答がついていますのでそちらの推移を見守ることにしますが、 ログで確認できるように、getDate()で日付も時刻も取得できています。 件名などは必要なくて日付と時刻だけが同じ1つの列に順に入力されることをご希望なのですね。 2023/06/11 10:58:58 2023/06/12 14:12:15 2023/06/12 15:10:28 ... ... のような記入をご希望でしょうか。
dirtyhandz

2023/06/13 06:33

コメントありがとうございます。 仰るとおりです!!
YellowGreen

2023/06/13 06:42

ご質問を重ねてしまいますが、 一度取得したメールをラベルなどで処理済みにするか、 シートに記入する際に重複する日時は記入しないようにする必要はないでしょうか?
dirtyhandz

2023/06/13 07:11

むしろありがとうございます、、、! 質問の回答になっているかわからないのですが、 ・スプレッドシートに、メール送信後「done」と記載される ・1日に一斉送信(50件ほど)する予定のため重複しても構いません よろしくお願いします。
YellowGreen

2023/06/13 08:55 編集

ごめんんさい。さらに重ねてお伺いします。 メール送信後の「done」は日時が入力されると計算式で表示されるのでしょうか? 1日に一斉送信することと、重複しても構わないということ の意味が繋がりません。 ご提示のスクリプトでは、 実行するたびに過去のすべての日時を取得しますので、 そのままシートに追記していくと雪だるま式に日時の行数が増えて (過去のメール件数×実行回数分)いきます。 ※取得したメールに「done」と表示されているわけでないので シートの日付と重複比較しない限り区別できません。 それが構わないのがなぜなのかが疑問でした。
dirtyhandz

2023/06/13 10:08

そうだったんですね、失礼しました>< メール送信後の「done」は日時が入力されると計算式で表示されるのでしょうか? →いえ、また別の処理です。以下にコード記載しておきます。 //メール送信 GmailApp.sendEmail(toAddress, subject, mainMessage, options); b.getRange(set4).setValue("done"); //A列に"done"と入力 1日に一斉送信することと、重複しても構わないということ の意味が繋がりません。 →1日に50名ほど一斉送信するので日時は重複してもいいという意味でしたが質問の意図と違いましたかね??違う場合もう一度ご質問お伺いしてもよろしいでしょうか?
YellowGreen

2023/06/13 17:47 編集

ごめんなさい。まだ 1日に50名ほど一斉送信するので日時は重複してもいいという意味でした が理解できていませんでした。
YellowGreen

2023/06/13 18:05 編集

私の理解不足のようです。 これ以上のご説明はお手数をおかけするだけのようです。
dirtyhandz

2023/06/14 00:36

いえ、私の理解不足です>< 申し訳ございません。。。いつもコメントありがとうございます>< 大変助かっております。。。 お手数おかけしますが再度ご質問お伺いしてもよろしいでしょうか?
guest

回答1

0

書き込むためにはsetValue()という関数が必要だと思います。
スプレッドシートに値を書き込む | setValue()【GAS】

最終行へ追記したいでしょうから、こんな感じになるでしょうか。

JavaScript

1 2 // 略 3 4 // スレッドごとに内容を取得する 5 threads.forEach(function (thread) { 6 // メッセージ内容を取得 7 thread.forEach(function (message){ 8 // 送信日時 9 let date = message.getDate(); 10 Logger.log(date); 11 12 // H列に追記する 13 range.offset(sheet.getLastRow() - 1, 0).setValue(date); 14 }); 15 }); 16}

投稿2023/06/13 05:44

編集2023/06/13 08:41
origa3

総合スコア22

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

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

dirtyhandz

2023/06/13 05:59

回答ありがとうございます。 アドバイスいただいた通りに書いてみましたが、 ・なぜか1001行目から日付が記載される ・今日から過去の日付が1135行目まで続く └2023.06.13~2021.08.20 という形になりました・・・! 理想は、 ・メールを送ったタイミングで、送った日程と時間が記載される (複数人に一斉送信しています) になります>< 再度アドバイスいただけますでしょうか?
origa3

2023/06/13 08:41 編集

> という形になりました・・・! 申し訳ございません。確認してみます。 > 理想は こちらの件は「ほぼ」実現可能で、トリガーの登録で実装してください。 「ほぼ」というのは「直後」は無理だけど「1分以内」はできるという意味です。 https://auto-worker.com/blog/?p=6383
dirtyhandz

2023/06/13 10:08

わざわざありがとうございます>< 明日確認させていただきます><
dirtyhandz

2023/06/14 00:35

確認させていただきました。 ありがとうございます! こちら指定の時間に実行したいのではなく、実行した日時をスプレッドシートに反映させたいと考えておりました・・・!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問