GmailはGoogleの容量が許す限り永遠に溜まり続ける鬼仕様になっていて、気付かない間にかなりの容量をGmailが使っているということがあります。
…というか、実際ありました。
マジで要らない未読メールが250,000件くらいありました。
マジでビビったよね…。
Googleは無料アカウントでも15GBのクラウドストレージが与えられていますが、GmailやGoogleフォト、Googleドライブとかの容量はGoogle Oneというストレージにまとめられているので、写真やファイルをどれだけ整理してもメールがたくさんあればそれだけストレージを圧迫してしまうわけですね。
というわけで、Gmailを不要なメールを自動で削除できるようにしてみようとやってみました。
参考にしたのは古いGmailの自動削除で業務効率化。SES企業様必見(Google Apps Script使用)という記事で、初めてでもスムーズ…ではありませんが、コピペだけで設定ができるので、ぜひ挑戦してみてください。
要件をまとめる
まずはGmailで受信した不要なメールを自動で削除するためにGmailでラベルを使ってメールを振り分けておくと便利です。例えば「ほにゃららさんから届いたメール」とか「ほにゃららをタイトルに含んだメール」とかですね。
これをGmailから適当なラベル名を付けて振り分けておきます。
次に、そのラベルが付いたメールを削除するために、GASでプログラムを定期的に実行するようにします。
まとめるとこんな感じですね。
不要なメールが届く → メールにラベルが付与される → そのラベルが付いたメールが定期的に削除される。
メールは削除しても30日間はゴミ箱に入るので、誤って削除しても30日以内であればゴミ箱から確認が可能です。
GASでプログラミングする
Gmailで不要なメールの振り分けが終わったらGASを使ってプログラムを書いていきます。GASとはGoogle Apps Scriptの略で、JavaScriptというプログラム言語を使っていろんなことができるGoogleのサービスです。
まずは、Google ドライブにアクセスしてスプレッドシートを作成します。使うのはGASだけなのでスプレッドシートは本来必要ないんですけど、スプレッドシートを作成しておくとGoogleドライブ上でフォルダ管理がしやすくなるのでおすすめです。
スプレッドシートのタイトルは「Gmailの定期削除」とかにしておくと良いですね。次に上部にある「拡張機能」メニューから「Apps Script」をクリックしましょう。
プログラムを入力する画面に遷移するので、赤枠の部分に下記のコードをコピペします。function…と最初から書かれている文字列がありますが、すべて削除してペーストしてください。
// Gmailの特定ラベルのメールを自動削除 function deleteMail() { const queries = getQueries(); for (const query of queries) { console.log(query); const result = GmailApp.search(query); let count = 0; result.forEach(function (mails) { const messages = mails.getMessages(); count += messages.length; GmailApp.moveMessagesToTrash(messages); }); console.log(count); } } //Gmailの検索ワード定義を取得 function getQueries() { return [ "is:inbox older_than:7d", "in:spam older_than:1d", "in:trash older_than:7d", ]; } // N週前の日付を取得 function getBeforeDate(week) { const nowTimestamp = new Date().getTime(); const milliSecond = week * 7 * 24 * 60 * 60 * 1000; const beforeDate = Utilities.formatDate(new Date(nowTimestamp - milliSecond), "JST", "yyyy-MM-dd"); return beforeDate; }
コードを編集する
コードを自分仕様に編集しますが、編集するのはreturnの中にある下記の部分です。
"is:inbox older_than:7d", "in:spam older_than:1d", "in:trash older_than:7d",
試しに3つの条件を入れていますが、自由に変更してください。
例えば「AAAというラベルが付いた1ヶ月以上前」のメールを対象にするにはこんな感じです。
"label:AAA older_than:30d",
older_thanの「30d」は「30日」という意味ですので、1年であれば「365d」とかにもできます。
基本的にはGmailの検索演算子を使うので、迷惑メールだけ削除するのであればこんな感じ。
"in:spam",
受信ボックスに入ったメールをすべて削除するにはこんな感じです。
"in:inbox",
Gmailの検索演算子は他にもたくさんあるので、詳しくは下記を確認してみてください。
「受信ボックスに入った既読メールで1日以上前」にするにはこのようになります。
受信ボックス → is:inbox
既読メール → is:read
1日以上前 → older_than:1d
"is:inbox is:read older_than:1d",
条件をカンマで区切ることで下記のようにたくさんのラベルと演算子を含めて指定することができます。
"label:AAA older_than:7d", "label:BBB older_than:7d", "label:CCC older_than:7d", "label:DDD older_than:7d", "label:EEE older_than:7d", "in:spam older_than:1d",
ダブルコーテーションの後ろにあるカンマを忘れないようにしてください。
プログラムを実行する
プログラムの編集が終わったらCtrl+S
もしくはフロッピーディスクのアイコンをクリックして保存しましょう。
次に赤枠の部分をクリックして実行します。
初回はGoogleアカウントにアプリを承認させないと使えないので、アプリを承認していきます。
赤枠の部分をクリックしていってください。
利用するアカウントを選択します。ここで選択したアカウントのメールが定期削除されますので、仕事用とプライベート用などアカウントを複数で分けているときは注意してください。
「詳細」をクリック。
「続行」をクリック。
これでプログラムが自由に実行できるようになりました。
トリガーを作って定期的に実行する
これだけだと毎回手動で実行しないといけないので、定期的に実行するようにトリガーを設定していきます。
まずは右側にある「トリガー」をクリック。
「実行する関数を選択」が「deleteMail」、「実行するデプロイを選択」が「Head」になっていることを確認してから、実行する頻度を設定するため「イベントのソースを選択」を「時間主導型」にします。
「時間ベースのトリガーのタイプを選択」を「時間ベースのタイマー」に、「時間の間隔を選択」を「1時間おき」にします。
これで完成ですね。
1時間に1回のペースで自動的にプログラムが実行されて、仕事をしてても寝ててもGmailからメールが削除されていきます。
プログラムが正しく実行されているか知るには実行数 – Apps Scriptから確認ができますよ。
ご注意
ちょっとした注意ですが、GASが1回で実行できる時間は最大で6分となっています。
初回とか削除するメール件数が多い場合は6分以内に処理できずにタイムアウトすることがありますが、タイムアウトした場合は次の実行で引き続き処理が行われますので、「処理できてねーよ!」って思ったら数日待ってみると良いですよ。
メールの受信数 < プログラムの処理数になっていれば自然と落ち着くはずです。
さいごに
ずーっとGmailを使っていてGmailを1回も整理したことがないのであれば結構役に立つので、ぜひ活用してみてくださいねー!