Gmailを定期的に削除するGASを作ってみた
Gmailを定期的に削除するGASを作ってみた
Gmailは容量が15GBまで無料で利用できますが、それを超えると有料プランに切り替える必要があります。
この容量はGmailの他に、Googleドライブ、Googleフォトと共用の容量となっています。
不要なメールでこれらの容量を圧迫するのを防ぐために、定期的にメールを削除する必要に迫られましたが、
Gmailのフィルターを利用してメールを削除する場合は、受信時に削除されるため、メールを確認する前に削除されてしまう可能性があります。
そこで、メールを削除するまでの日数を指定することで、一定期間経過後にメールを削除する処理をGASを利用して作成しました。
本記事では、前半にユーザーとして使うための方法を記載し、後半にGASの説明をします。
ソースコード及びGAS含むスプレッドシートは下記で公開しています。
https://github.com/KzclassLLC/GmailDeletionTool
https://docs.google.com/spreadsheets/d/1dRjMZD7eZHcL8aIzlyBBVpI5HbYYpPOXdKDiRb62OPI/edit
ツールの概要
特徴
- ユーザー定義のラベルに基づいてメールを削除します。
- ネストされたラベルをサポートします。
- スター付きのメールは削除されません。
- 自動削除を設定した後、1 時間につき 100 件の対象メールが削除されます。
- スプレッドシートの言語設定に基づき、日本語と英語で動作します。サポート外の言語の場合は英語で動作します。
使い方
-
Gmailでラベルを定義します。ラベル名の後には '@' と、メールを削除するまでの日数を指定します。
例えば、'general@365'のラベルがつけられたメールは、受信後 365 日以上経過した場合に削除されます。
カテゴリに分類されているメールについては、下記のように、カテゴリというラベルにネストしたラベルを用意します。
カテゴリ/プロモーション@30
-
下記のスプレッドシートを開き、自分のGoogleドライブへコピーをします。
https://docs.google.com/spreadsheets/d/1dRjMZD7eZHcL8aIzlyBBVpI5HbYYpPOXdKDiRb62OPI/edit
スプレッドシートをコピー後は、スプレッドシートのメニュー>設定を開き、言語と地域が日本以外の場合は日本に設定してください。または、スプレッドシートを開いた後、本スクリプトをGoogleスプレッドシートのスクリプトエディタにコピーします。
対象は下記の 3 つのファイルです。- src/client.js
- src/main.js
- src/const.js
-
スプレッドシートを開き、メニューバーの一番右にある 'Gmail削除ツール' をクリックします。
下記のメニューが表示されます。
- 自動削除をセットする
- 自動削除をストップする
- 一回だけ削除する
最初に「一回だけ削除する」を実行し、動作を確認してください。
なお、初めて実行する際は、アクセス許可を求められますので、下記ページを参考に、許可をしてください。
https://zenn.dev/kzautomation/articles/9e1595f65420be
認証を行った後、再度「一回だけ削除する」を実行してください。終了のダイアログが表示されれば、正常に動 作しています。
その後に「自動削除をセットする」を実行すると、自動削除が開始されます。
制限事項
- タイムアウトを防ぐため、1 回の実行で最大 100 通削除します。
- ラベルがネストされている場合、スクリプトは子ラベルのみを対象とします。
- '@' がないラベルや '@' の後に正の整数以外があるラベルは処理されません。
GASの概要
ソースコードは下記の GitHub にあります。
https://github.com/KzclassLLC/GmailDeletionTool
どのメールを削除するか?
メールを自動で削除するという性質上、ユーザーが意図していないメールを削除するおそれがあります。
そのため、ラベルがついているメールのみを削除するようにしました。
また、削除対象のラベルと、どの程度の期間経過したメールを削除するかについて、ユーザーが定義できるようにしたいと考えていました。
当初、スプレッドシートでリストを定義することを考えましたが、Gmailとスプレッドシートを行ったり来たりしながら設定するのは面倒くさいと考え、Gmailのラベル名自体に日数を入れ込んでおくという仕様にしました。
general@365 というように、ラベル名の後ろに@と削除するまでの日数を指定します。
関数の説明
下記の関数で実現しています。
これ以外に、スプレッドシートのメニューを表示する関数もありますが、本筋ではないため省略します。
ラベルのを取得し、削除するメインの関数
Gmailで使用しているラベルは、GmailApp.getLabels()で取得できます。すごく簡単です。
後は各ラベルで、削除対象のメールがあるかを判定していきます。
ラベルがついたメールを取得し、削除する関数
後述する、検索条件を作成する関数を使って、ラベルがついたメールを取得します。
GASの制限時間に引っかからないように、1 回の実行で削除する件数をカウントするために、削除するメールの件数をカウントしています。
threads として取得したメールを一括で削除する moveThreadsToTrash 関数があるので、まとめて削除しています。
ラベルがついたメールを取得するための検索条件を作成する関数
ラベルが条件を満たしいてるかの判定と、カテゴリを指定されているかの判定をした後に、検索条件を作成します。
デフォルトで用意されているカテゴリと、ユーザーが作るラベルではGmailの検索演算子が異なるため、下記のようなカテゴリと検索演算子の対応表を作成し、不一致ならユーザーラベルと判断、テーブルに追加する方法にしています。
ラベルが条件を満たしているかの判定をする関数
ラベルに@が含まれているか?@の以降に数字があるか?を判定します。
削除対象となるラベルだった場合は、削除する日数も取得して返却します。
ログとトースト
これは見ての通りです。
まとめ
GASでGmailを定期的に削除するツールを作成しました。
GASでは、Gmailを簡単に操作するためのサービスが色々ありますので、このように簡単なスクリプトで便利なツールを作ることができます。
Googleの各種サービスを使用して、ちょっと面倒くさい作業がある場合や、定期的に実施したい作業がある場合、このようなツールを作成することで、作業の効率化ができます。
Google Workspace をお使いの方、Gmailの容量で困っている方、GASの勉強をされている方の参考になれば幸いです。
Discussion