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 と入れるだけで新規エディタが開きます。これが一番速いです。

  1. script.new を開く
  2. 上のコードを貼り付ける
  3. 保存して、一度手動で実行する(初回は Gmail へのアクセス許可を求められるので許可する)

手動実行で古いメールがちゃんとゴミ箱に移るのを確かめたら、あとは自動化するだけです。

スケジュールトリガーで毎日まわす

エディタ左の時計アイコン(トリガー)から、時間主導型のトリガーを足します。

実際に動かしてみたら

一度に全部消えるかと思いきや、実行してみると 100 件ほどしか削除されませんでした。Apps Script 側の実行制限なのか、Gmail 側のレートリミットなのかは分かりません。

それでも、何回か繰り返して実行していくと、少しずつ削除されていきました。だから 1 日 1 回の自動実行で回し続ければ、いずれ古いメールは削除しきれるのではないかと思っています。

自分好みに調整する

検索クエリを少しいじれば、掃除のルールは変えられます。

ひとつ注意点として、プロモーションにはたまにログイン認証のような必要なメールが混じることがあります。だからこそ、即時に全部消すのではなく「3ヶ月経ったら」という運用が自分には合っています。

削除ボタンをいちいち連打する必要もなくなるので、とても楽な方法です。

※ 発信は個人の見解です © nekolas 2026 · プライバシーポリシーRSS