Gmailのプロモーションメールを自動で掃除する
Gmail は、放っておくといつか容量が足りなくなって、メールを受信できなくなります。そして溜まってから消そうとしても、大量のメールを一気に削除するのはなかなか困難です。結局は Google One などに課金して容量を足す、という流れになりがちです。
そうなる前に、特に溜まりやすい広告メールを Google Apps Script で自動削除するようにしました。コードは実質 2 行です。
なぜプロモーションメールだけ残るのか
普段、不要なメールはショートカットの Shift+# でその場で削除しています。ところが広告メールはタブが分かれていて、自動的に「プロモーション」へ振り分けられます。すると逆に、広告メールだけが削除されずに残り続けることになります。
フィルタを使う手もありますが、フィルタでできるのは受信時の即時削除までです。「3ヶ月経過したら削除」のような時間差の削除は、標準ではできません。
そこで、Google Apps Script の定期実行で、古くなったプロモーションメールを削除します。
やることは「検索して捨てる」だけ
Gmail の検索演算子は、Apps Script の GmailApp.search() にそのまま渡せます。category:promotions でプロモーションカテゴリ、older_than:3m で「3ヶ月より古い」を指定して、ヒットしたスレッドをまとめてゴミ箱へ送るだけです。
function deleteOldPromotions() {
const threads = GmailApp.search('category:promotions older_than:3m');
threads.forEach(thread => thread.moveToTrash());
}削除といっても、moveToTrash() はゴミ箱に移すだけです。ゴミ箱に入ってから 30 日経って、ようやく完全に削除されます。
であれば広告メールを全部ゴミ箱に放り込んでも楽なのですが、念のため 3ヶ月で設定しています。さすがに 3ヶ月見返していないなら、必要なメールではないはず。心配なら 1 年に伸ばしてもいいかもしれません。
スクリプトの作り方
Apps Script のプロジェクトは、Chrome のアドレスバーに script.new と入れるだけで新規エディタが開きます。これが一番速いです。
script.newを開く- 上のコードを貼り付ける
- 保存して、一度手動で実行する(初回は Gmail へのアクセス許可を求められるので許可する)
手動実行で古いメールがちゃんとゴミ箱に移るのを確かめたら、あとは自動化するだけです。
スケジュールトリガーで毎日まわす
エディタ左の時計アイコン(トリガー)から、時間主導型のトリガーを足します。
- 実行する関数:
deleteOldPromotions - イベントのソース: 時間主導型
- トリガーのタイプ: 日付ベースのタイマー(1 日おき)
実際に動かしてみたら
一度に全部消えるかと思いきや、実行してみると 100 件ほどしか削除されませんでした。Apps Script 側の実行制限なのか、Gmail 側のレートリミットなのかは分かりません。
それでも、何回か繰り返して実行していくと、少しずつ削除されていきました。だから 1 日 1 回の自動実行で回し続ければ、いずれ古いメールは削除しきれるのではないかと思っています。
自分好みに調整する
検索クエリを少しいじれば、掃除のルールは変えられます。
older_than:1mでもっと頻繁に、older_than:6mでゆるめにcategory:socialを足せば SNS の通知メールも対象に- 消すのが怖ければ、
moveToTrash()の代わりにthread.markRead()で既読化だけにとどめる手もある
ひとつ注意点として、プロモーションにはたまにログイン認証のような必要なメールが混じることがあります。だからこそ、即時に全部消すのではなく「3ヶ月経ったら」という運用が自分には合っています。
削除ボタンをいちいち連打する必要もなくなるので、とても楽な方法です。