GASでGmailの古いメールを自動削除(ゴミ箱に移動)するスクリプト
なぜ自動削除するのか
私たちの周りには便利なサービスが多くあり、アカウント作成することでサービスを使うことができます。
メールを登録すると有益な広告メールが届くこともありますが、見返すことはあまりないと思います。
そこで、定期的に自動で削除するスクリプトをGoogle Apps Scriptで作成します。
Google Apps Script(GAS)とは
Googleによって開発されたスクリプトプラットフォームである軽量のアプリケーション開発のためのGoogleのワークスペースプラットフォーム。 主にGoogleのサービスを自動化するスクリプト言語である。
Wikipedia-Google Apps Script
https://ja.wikipedia.org/wiki/Google_Apps_Script
Apps Script は Google ドライブを活用したクラウドベースの JavaScript プラットフォームで、Google プロダクト全体でタスクの統合と自動化を可能にします。
Google Workspace-シンプルなコードで Google Workspace を自動化および拡張できます。
https://developers.google.com/apps-script?hl=ja
Google Apps Script(GAS)を使ってみる
Google Apps Scriptにアクセス
Google Apps Script にアクセスし、「新しいプロジェクト」から新規作成を行います。
コードを書く
コード.gsにコードを書く。
今回はGmailAppクラスを使います。
function deleteEmails() {
var queries = [
'category:promotions older_than:90d -is:starred'
];
for (var j = 0; j < queries.length; j++) {
// var threads = GmailApp.search(queries[j]);
var threads = GmailApp.search(queries[j], 0, 500); // 500件ずつ取得
for (var i = 0; i < threads.length; i++) {
threads[i].addLabel(GmailApp.getUserLabelByName("AutoDeleted")); // 削除用ラベルを付与
threads[i].moveToTrash(); // ゴミ箱へ移動
}
}
}
コード解説
- queries配列にクエリを記入する。
- GmailApp.searchで検索クエリに一致したメールに"AutoDeleted"を付けて、ゴミ箱に移動する。
Google Workspace-Apps Script-Class GmailApp
https://developers.google.com/apps-script/reference/gmail/gmail-app?hl=ja
クエリとは
Gmailの検索ボックスに入力して検索される条件のことです。
'category:promotions older_than:90d -is:starred'の場合は、
category:promotions(カテゴリ:プロモーション), older_than:90d(90日前), -is:starred(スターがない)
検索条件に一致したメールが見つかり、それらのメールがゴミ箱に移動されます。
Gmailヘルプ-Gmail で検索を絞り込む
https://support.google.com/mail/answer/7190?hl=ja&co=GENIE.Platform%3DDesktop&oco=0
保存して実行してみる。
- 保存する。
- 実行する。
アクセス権限
初めての場合などはアクセス権限を求められます。画面の指示にしたがって、権限の許可をお願いします。
エラーになる場合
もし、以下のようなエラーになった場合は、
threads[i].addLabel(GmailApp.getUserLabelByName("AutoDeleted")); // 削除用ラベルを付与
"AutoDeleted"ラベルがないのでエラーが起きている。
"AutoDeleted"ラベルを作成することで解決できる。
なぜ"AutoDeleted"ラベルを付けるのか?
"AutoDeleted" ラベルを付与することで、プログラムによってゴミ箱に移動したメールと、ユーザーが手動で移動したメールを区別できます。
なぜ検索は500を上限とするのか?
var threads = GmailApp.search(queries[j], 0, 500); // 500件ずつ取得
スクリプトのランタイム(実行時間)には上限があります。上限時間内に完了するために、ここでは500件で制限しています。
Google Workspace-Apps Script-Google サービスの割り当て
https://developers.google.com/apps-script/guides/services/quotas?hl=ja
他にもゴミ箱に移動したいメールがある場合
queries配列に追記することで、複数の削除条件を実行できる。
var queries = [
'category:promotions older_than:90d -is:starred', // 追加する場合はカンマを忘れずに
'削除したい検索条件をここに書く'
];
トリガーで自動的に実行する
-
ストップウォッチマークのトリガーを選択する。
-
右下の「トリガーを追加」ボタンをクリックする。
-
実行条件を設定し、「保存」ボタンをクリックします。
ゴミ箱に入れずに自動実行はできないのか?
Class GmailApp には、2025年1月26日現在、メールを直接削除するメソッドは存在しません。
もし、削除を行う場合 は Gmail API を使うと解決できるかもしれません。
Google Workspace-Gmail-Gmail API
https://developers.google.com/gmail/api/reference/rest?hl=ja
Discussion