詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Google Apps Script でメールの自動アーカイブ

メールってやつはプッシュ型のタスク生成・情報取得ツールとしてすげー便利に使ってるのですが、受信トレイを綺麗に保つのには不断の努力が必要で、放っておくとすぐに管理不能な状態にまで膨れあがってしまう(いちおう、いわゆる Inbox Zero を理想として、とはいえそこからは遠いところにいます)。

ちょっと見ないすきに溜まったメールをザザーッと処理するんだけど、毎回これアーカイブしてるよな……と思うものもある。こういうものを機械に処理させられないとしたら、それは技術の敗北である。というわけでなんとかしたい。たとえば、最新情報であったり現在のステータスを知るために受け取ってるメールってのは、定期的に増えてくる一方で、古くなったものには価値がないので、勝手に消えていってほしいわけです。

具体的には、以下のようなメールを自動で処理したい。

  • 【毎日更新】Kindle日替わりセール
    • 前日のやつは不要
  • 〇〇さんの今日の予定リスト(午前 5 時現在)
    • Google カレンダーが送ってきてくれるやつ。前日のやつは不要
  • ニュース系
    • 一週間以上ためこむと読む気にならないので読まずにアーカイブしてる
  • カレンダーの招待
    • すでに終わったイベントの招待は自動でアーカイブできるはず

つわけで Google Apps Script を書きました。リポジトリはここです。

GitHub - motemen/gas-gmail-scripts

以下のスクリプトは mainという名前の関数を定期的に実行する想定で書かれてます。script.google.com から新規スクリプトを作成して、時間ベースのトリガを設定してください。

指定日数が経ったら自動でアーカイブする

https://github.com/motemen/gas-gmail-scripts/blob/master/dist/expire.js

+expires-1d というラベルがついたメールのうち、1日以上古いものを自動でアーカイブします。1日経つと情報が古くなるようなメール(Kindle日替わりセールとか)に Gmail のフィルタでこのラベルをつけておけば OK。

実は +expires- 以降は自由で、アーカイブ対象とするメールの検索条件older_than: として渡されるだけなので、+expires-7d とか +expires-1m とかいうラベルでも有効です。かしこい。

Google カレンダーの招待で、すでに終わったものを自動でアーカイブする

https://github.com/motemen/gas-gmail-scripts/blob/master/dist/archive-stale-calendar-invitations.js

見出しのとおり。Google カレンダーの招待メールに添付されている invite.ics ファイルをかんたんに解析して、イベントの終了時刻を過ぎていたらアーカイブします。iCal 形式のファイルの解析をしてるけど、タイムゾーンの対応は面倒なので UTC で書かれているものしか対応していない。Google カレンダーは ics ファイルの中身を UTC で書いてるみたいなので、特に問題はないと思います。

書いてて思ったけど、イベントの更新があったら古い招待をアーカイブするってのがあってもいいかもしんないですね。PR 期待してます。


どうぞご利用ください。

はてなで一緒に働きませんか?