Gmailで溜まった未読・既読Star未付与メールマガジンの定期的一括削除スケジュールをGASでやってみた

溜まりがちなメールマガジンを購読解除せず効率よく削除する方法を突き詰めてみました。
2022.05.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

仕事及びプライベート問わず、気がつくとメールボックスに大量のメールマガジンが溜まっていることはよくあります。未読ながらも目を通すべきかと迷いつつ、数ヶ月はまだしも数年前のものは流石にそのままゴミ箱に入れることも多々。

定期的な掃除をやっていたものの、何か手を動かさずにとも勝手に掃除できる方法はないかと調べた結果、GASで定期的に掃除する手段に至りました。

GASでメールを削除する

今回は以下のドキュメントを参考にしています。

GmailAppで指定条件にて検索し、ヒットしたGmailThreadをまるっと削除します。

function getConfig() {
  const sheet = SpreadsheetApp.getActiveSheet(); 
  const values = sheet.getDataRange().getValues();
  values.reverse()
  values.pop()
  values.reverse()
  Logger.log(values)
  return values
}

function cleaningMail() {
    const config = getConfig()
    config.forEach(function(data) {
      var search_param = Utilities.formatString(
        "from:%s older_than:%s -is:starred", data[0], data[1])
      var deleteThreads = GmailApp.search(search_param);

      for (var i = 0; i < deleteThreads.length; i++) {
          deleteThreads[i].moveToTrash();
      }
    })
}

動作確認をする場合は moveToTrash() の行を Logger.log(deleteThreads[i].getMessages()[0].getBody()) 等に差し替えておきます。

Spreadsheet側では以下のように設定を記入しておきます。

次に「トリガー」を開き、右下の「トリガーを追加」を選択します。

今回は週に1度、月曜日に実行することにしました。

あとがき

溜まってしまうメールマガジンは購読解除すると手間は省けるものの、読みたい時もあるからそのままにしておきたいという状況にて、古い内容は強制削除ということにしてみました。

肝は -is:starred の指定です。「気になったけど今すぐにあれこれは」という時にはStarさえつけておけば維持されます。

メールボックスの掃除が面倒臭い人にはおすすめです。