Gmailで受信後1年たったらメールを自動削除する方法

やわなべです。

先日の投稿で、Macに付属するメールソフト(Mail.app)で未読のみを抽出するフィルタを作ったのですが、

その時に気づいたのは、Gmailのアーカイブに削除されないメールが結構な件数で死蔵されているなぁ、ってことでした。

Gmailで受信したメールを「アーカイブ」に入れると、受信トレイからは見えなくなるんですが、削除はされず、検索したり「すべてのメール」を選択することで出てきます。

受信トレイに居座られるとウザいけど、あとで見るかも」なメールを入れておくには非常に便利なのですが、一度入れると削除される機会はほぼなくなってしまいます。で、これが改めて見ると、まあ、後で見返すことのないものがほとんどなんですよ

受信メールを一定期間後に自動的に消去できないか

以前から何度か関連ポストを書いてますが、私はどうもクラウド上にプライベートなデータが蓄積されていくことに対して病的といっていいほど不安を感じるタチでして、それも最近よく聞く「ミニマリスト」みたいな意識高そげなものというよりは、何か幼少期に変なトラウマがあったんじゃないかとわりと本気で疑ってるくらいなんですが、まあそれはともかく、メールに関しては、2年以上前のメールを全部チェックして不要なものを捨てるという儀式を年末恒例行事としております。

ただ、毎回これやってても残しとく必要性のあるメールなんてほとんどなくて、ほぼ全消し状態。結局は削除するのなら自動化できないのか、と考えました。

Google Apps Scriptでできそうよ

調べるとあっさり見つかりました。ライフハッカーのこの記事。

Gmailにかぎらず、GoogleスプレッドシートやGoogleカレンダーをプログラムで操作する「Google Apps Script」を使う方法です。

自分独自のプログラムを作るには、Gmailにログインした状態で、 https://script.google.com/ へアクセスすると、

こんなエディタ画面が表示されます。ブラウザ上でプログラムが書けるんですね。すごい。ちなみに、作成したスクリプトはGoogleDriveに表示されるので、スプレッドシートと同じ感覚で変更したり削除したりできますよ。

自前でプログラムコードを書かないといけないので、ハードルはかなり高めなんですが、よく見ると、普段このブログのカスタマイズでやってるjavascriptの変更くらいのスキルでなんとかなりました。

自動削除をどういう仕組みで実現するかというと、こんな感じです。

1) 一定期間後に削除するメールにつけるラベルを用意する「例:自動削除」

2) フィルターによる自動振り分けなどで一定時間後に消えてほしいメールに「自動削除」のラベルを付ける

3) 定期的に実行されるプログラムがラベルの付いているメールをチェックし、受信後、指定の日数以上立っていたら削除する

上の記事の例だと、「delete me」というラベルのついたメールを見て、7日以上経過していたら削除するというプログラムになっています。これを1日1回、または1週間に1回実行するよう登録しておけばいい、と。なるほど。

削除条件をブラックリスト形式でなく、ホワイトリスト形式で指定したい

大筋これでいいので、そのままコードをパクろうと思ったんですが、運用を考えると「ちょっと待てよ」と。

上の記事では、消す対象のメールはラベルのついたメールです。通常はラベルを付けずにそのまま受信箱なりアーカイブにためこんでおくという運用を想定します。不要なメールをブラックリストとして登録するイメージですね。

私のイメージは逆で、「どうしても残す必要のあるものは手動でアーカイブに入れ、それ以外は問答無用で削除したい」のです。つまり、残すものの方をホワイトリスト指定してラベリングするイメージなんですよね。で、最終的に行き着いたコードがこちら。

ラベルの有無に関係なく、

・Inbox(受信トレイ)にあるメールを全件チェックし、
・1年(365日)以上経過していれば、ゴミ箱に行け、

という、かなりラディカルな仕様です。少し手こずったところを補足しておくと、いっぺんに読み込めるスレッド数がMAX500件のようだったので、受信トレイのメールを100件ずつ読みこむようにしました。

それでも全件日付のチェックをしていると1000件くらいのメールの処理でも40秒ほど時間がかかるようだったので、100件取り込んだ時に、その中の一番古いメールの日付が削除対象外なら、100件全部読み飛ばしするようにしています。(Google Apps Scriptは処理に5分以上かかる処理は実行できないようです)

書いたコードをテストしてみる

書いたプログラムは即座に実行して動作を確認することができます。削除と言っても、ゴミ箱への移動なので、動かしたが最後メールボックスのメールが全部消えちゃった、ということはなさそうです。というわけでポチッとな。

最初実行する際に、自分自身のデータであろうと、アクセス承認が出てきます。一度承認すれば次回以降は表示されません。

これが実行前の受信トレイのスレッド数。1,123件あります。これが、プログラム実行後の受信トレイを見ると、、、

1,051件になりました。プログラムの中で削除した件数をカウントしてログに出力したのですが、

72件消しましたよ」とあります。受信トレイの減った数と一致しますね。

一方、ゴミ箱の件数は一気に増えまして、

ちょうど実行した日(2015/6/26)の1年前の日付より古いものが削除されています。ざっと見ましたが、消えて困るようなものはやっぱりなかったですね。思ったより件数が少なかったのは、アーカイブの整理のために最近、手動でごっそり消したからのようでした。

自動実行の設定をする

動作に問題がないようなので、このプログラムを定期的に事項するように設定します。定期実行の設定はプログラムを書いた画面の上にある、

この時計のボタンをクリック、

このように、「どのプログラムを」「どのタイミングで実行するか」を設定すればokです。

もちろん、上のプログラムの削除までのタイムラグの日数を変更すれば「1ヶ月後に全消し」とかいうこともできますね。即ゴミ箱行き、ってのがラディカルすぎる、という方は、もう少し穏やかに、アーカイブするようなプログラムも応用で可能です。

とりあえずこれで、いつ私が死のうがメールが永遠にたまり続けるという心配はなくなりました。これで安心してあの世に行けます。ありがたい話でございます。

てか、Google Apps Script他にも色々できそうですね。

「Google クラウドスクリプティング Google Apps Scri...」販売ページヘ

Google クラウドスクリプティング Google Apps Scri...

  • 作者: 早坂 清志
  • 出版社: マイナビ