Gmailでメールを自動的に削除するスクリプト

今までメールの管理をデスクトップのアプリケーションを使用していたのですが、思い立って、全てGmailに移行しました。

既存のメールアカウントも多いので、用途に応じてGmailのアカウント複数を親アカウントにして、それぞれでpopの設定してあります。

ただ、Gmailアカウント毎に15GBの容量の制限もありますし無駄なメールは削除しておきたい。
運用を始めて、数ヶ月手動で対応するのもなんだなということでGAS(Google Apps Script)で自動実行しましょうということで、先人がたの知恵を拝借させていただき、自分の用途に合わせてカスタマイズしてみました。

参考にしたサイトは以下のとおりです。

修正する場合は、Googleドライブ(type:script)を開いて、右クリックメニューで対象のスクリプトからApps Scriptを選択します。

メール検索条件を試す場合は、次のようにGmailの上部にある検索フォームに入力すると試すことができます。

この場合は、受信トレイにおいて2日経過した既読メールかつ、スター付きを除くというパターンです。
未読検索をしたい場合、簡単に「l:unread」で未読メールのみ表示することができるので便利ですよ(iOS/AndroidのGmailでも同様に検索可能)。

検索条件については、以下サイトを参考にするとわかりやすいです。

さて、私の運用に合わせてカスタマイズした、メールの自動削除スクリプトは以下のようになりました。

function autoMailExpire() {
    // 2日経過した既読メールは削除
    expireReadMail(2);
    // 35日経過した未読メールは削除
    expireUnreadMail(35);
}

// 既読メールの削除(スター付きは除く)
function expireReadMail(delayDays) {
  var query = 'older_than:' + delayDays + 'd' + ' -label:starred is:read label:inbox';
  var deleteThreads = GmailApp.search(query);
  Utilities.sleep(1000);
  for ( var i = 0; i < deleteThreads.length; i++ ) {
    deleteThreads[i].moveToTrash();
    Utilities.sleep(100);
  }
}

// 未読メールの削除(スター付きは除く)
function expireUnreadMail(delayDays) {
  var query = 'older_than:' + delayDays + 'd' + ' -label:starred is:unread label:inbox';
  var deleteThreads = GmailApp.search(query);
  Utilities.sleep(1000);
  for ( var i = 0; i < deleteThreads.length; i++ ) {
    deleteThreads[i].moveToTrash();
    Utilities.sleep(100);
  }
}
  1. 2日経過した既読メールかつ、スター付きを除いたメールはゴミ箱行き
  2. 35日経過した未読メールかつ、スター付きを除いたメールはゴミ箱行き

のまひ親父のメモさんのソースを参考に、利用しない条件を削除してシンプルにしています。
これで容量不足を気にせず利用できるようになりました。

検索ボックスでの検索条件については、こういったスクリプトを実行しない人にも便利ですので、覚えておいて損はないですよ!