GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法


inboxes

photo credit: SKR_RGR mails via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Gmail使ってますよね!?

まさかまさか…受信トレイ、何十件も、何百件もメッセージ溜まっていませんよね?

ということで、Google Apps Scriptで溜まったGmailのメッセージを問答無用で自動アーカイブする方法をお伝えしています。

前回の記事はこちら。

GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法
Gmailの受信トレイにメール…溜まっていませんか?そんなときは、GASを使って自動アーカイブしちゃいましょう。今回は、GASでGmailの受信トレイの指定日付以前のスレッドをアーカイブする方法をお伝えします。

指定した日時以前のスレッドをアーカイブするスクリプトを紹介しました。

ただ…日付が固定だったんですよね。

できれば「今日から3日前以前のスレッドは全部アーカイブ!」とかにしたいですよね。

ということで、今回はGASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法をお伝えしますね。

では、行ってみましょう!

前回のおさらい

前回作成したスクリプトをベースに解説を進めていきますね。

コチラです。

2行目で設定したsearchQueryを使って、3行目でGmailのスレッドを検索します。検索した結果は「スレッドの配列」として取得できます。

その「スレッドの配列」をそのまんま引数にできる便利メソッドがmoveThreadsToArchiveメソッドで、それらのスレッドをアーカイブしてくれるというものです。

ただ、冒頭でお伝えした通り、固定の日付しか指定できないので、その部分を修正していきます。

何日前のDateオブジェクトを取得する

前述のスクリプトでいうと、変数searchQueryに与える文字列の日付部分を、「今日の日付の3日前の日付」にしてあげる必要がありますね。

日付を表すオブジェクトはDateオブジェクトですから、まずは今日の3日前の日付を求める方法を考えましょう。

Dateオブジェクトの「日」を取得するgetDateメソッドと、「日」を設定するsetDateメソッドを組み合わせますよ。

Dateオブジェクト.getDate()

getDateメソッドは「日」を数値で取得します。

Dateオブジェクト.setDate(日)

setDateメソッドの引数は数値で与えます。

これらをどう使うかというと、元となるDateオブジェクトの「日」をgetDateメソッドで取得して、その数値から3を引き算して、その結果をsetDateしてあげればよいのです。

つまり、こういうことです。

引き算して日数が0やマイナスになる場合

でも、9/1とか9/3とかだったら、日数の引き算したら0とかマイナスになっちゃうんですけど、どうなっちゃうんでしょう?

でも大丈夫。

このように、ちゃんと正しく、前月の日付になってくれています。

日付の書式を整えて文字列にする

これで、「3日前の日付」のDateオブジェクトを求めることができましたので、あとはこれを用いて、変数searchQueryを構成できれば良いですね。

ただ、Dateオブジェクトをそのまま指定すると、searchQueryは以下のような形式になってしまいます。

in:inbox before:Tue Aug 28 2018 20:34:56 GMT+0900 (JST)

残念ながら、この形式ではうまく検索ができませんので「yyyy/M/d」のフォーマットの文字列に変更する必要がありますね。

そのようなときのために、GASではUtilitiesサービスの中に、formatDateというメソッドを用意してくれています。

Dateオブジェクトを指定のフォーマットで文字列に変換します。

Utilities.formatDate(日付, タイムゾーン, フォーマット)
  • 日付: Dateオブジェクト
  • タイムゾーン: 日本なら「’JST’」
  • フォーマット: 「y」「M」「d」を使った書式

フォーマットはアルファベットとその数で書式を表します。例えば以下のようなものです。

  • ‘yyyy-MM-dd’ とすれば 「2018-08-01」
  • ‘yyyy年M月d日’ とすれば 「2018年8月1日」

ですから、今回は「’yyyy/M/d’」と指定すれば良いでしょう。

今日から3日以前のスレッドをアーカイブするスクリプト

以上を踏まえて、今日から3日前のスレッドをアーカイブするスクリプトを作りました。

こちらです。

簡単ですね。

Gmail演算子older_than、newer_thanを使う方法

実は、Gmailの検索演算子便利なものがありました。

「older_than:」「newer_than:」という演算子を使えば、日(d)、月(m)、年(y)で期間を指定して、それより古いメールか新しいメールを検索することができるのです。

つまり、こういうことですね。

…こっちのほうが断然簡単ですね。

Gmailのsearchメソッドを使う場合は、Gmailの検索演算子をちゃんと研究しなきゃですね!

Gmail で使用できる検索演算子 - Gmail ヘルプ
検索演算子と呼ばれる単語や記号を使用して、Gmail の検索結果を絞り込むことができます。また、複数の演算子を組み合わせて検索結果をさらに絞

まとめ

以上、GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法をお伝えしました。

時限式のトリガーを毎日で仕込んでおけば、放置されている過去のスレッドが勝手にアーカイブされていきます。

これで、溜まりに溜まった受信トレイともおさらばですね!

ちなみに、searchメソッドは1回500スレッドまでしか取得できませんので、それ以上溜まっている場合は何度か実行する必要があると思います。

もし、うっかり大事なメッセージがアーカイブされても、ちゃんと取り戻せますから安心してアーカイブしちゃってくださいませ!

連載目次:GAS初心者にオススメ!簡単Gmailツールの作り方

Google Apps ScriptではGmailの操作をとても簡単に行うことができます。このシリーズでは、GAS初心者でもすぐに作れる、簡単便利なツールをいくつか紹介していきます。
  1. GASでGmailを操作して日々の日報メールの下書きを自動で作成する
  2. GASでGmailの受信トレイに溜まった指定の日付以前のスレッドを自動でアーカイブする方法
  3. GASでGmailの受信トレイに溜まった今日から指定の日数以前のスレッドをアーカイブする方法

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント