🛠️

GASでGmailの古いメールを自動削除(ゴミ箱に移動)するスクリプト

2025/01/26に公開

なぜ自動削除するのか

私たちの周りには便利なサービスが多くあり、アカウント作成することでサービスを使うことができます。
メールを登録すると有益な広告メールが届くこともありますが、見返すことはあまりないと思います。
そこで、定期的に自動で削除するスクリプトを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 にアクセスし、「新しいプロジェクト」から新規作成を行います。
https://script.google.com/home

コードを書く

コード.gsにコードを書く。
今回はGmailAppクラスを使います。

コード.gs
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(); // ゴミ箱へ移動
    }
  }
}

コード解説

  1. queries配列にクエリを記入する。
  2. 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

保存して実行してみる。

  1. 保存する。
  2. 実行する。

アクセス権限

初めての場合などはアクセス権限を求められます。画面の指示にしたがって、権限の許可をお願いします。

エラーになる場合

もし、以下のようなエラーになった場合は、

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', // 追加する場合はカンマを忘れずに
    '削除したい検索条件をここに書く'
  ];

トリガーで自動的に実行する

  1. ストップウォッチマークのトリガーを選択する。

  2. 右下の「トリガーを追加」ボタンをクリックする。

  3. 実行条件を設定し、「保存」ボタンをクリックします。

ゴミ箱に入れずに自動実行はできないのか?

Class GmailApp には、2025年1月26日現在、メールを直接削除するメソッドは存在しません。
もし、削除を行う場合 は Gmail API を使うと解決できるかもしれません。

Google Workspace-Gmail-Gmail API
https://developers.google.com/gmail/api/reference/rest?hl=ja

Discussion