2023年5月14日日曜日

GAS(Google Apps Script)でGmailのメール削除

こんにちは。ざわです。

Gmailを使っているのですが、未読件数がどんどん溜まっていってます。。

手動で削除してもいいのですが、GAS(Google Apps Script)を使ってGmailのメールを一括削除してみることにしました。

手順は以下の通り。

① GASプロジェクト作成

 GASのプロジェクト作成方法については、以前書いたこちらのブログを参照ください。

② メール削除のスクリプトを実行

 ◆ メール削除スクリプト(全体)
let cnt = 0;

function myFunction() {

  // 削除するメールの条件:スター付きでない かつ 過去1年前より古い日付のもの
  const query = '-is:starred older_than:1y';
  const threads = GmailApp.search(query, 0, 100);

  Logger.log('取得スレッド数: ' + threads.length + '件');
 
  if(threads.length > 0){  
    cnt++;
    Logger.log('処理回数: ' + cnt + '回目');

    // スレッドをゴミ箱に移動
    GmailApp.moveThreadsToTrash(threads);

    // 再帰呼び出し
    myFunction();
  }
 
}

 ◆ スクリプトの説明:

 ・削除対象とするメールの条件を指定
スター付きのメールと 過去1年分のメールは削除せずに残そうと思うので、
「スター付きでない かつ 過去1年前より古い日付のもの」を削除条件として設定します。
const query = '-is:starred older_than:1y';
 
 ・対象メールの抽出
Gmailアプリクラスの searchメソッドで、削除対象メールのスレッドを抽出します。
引数には上記の条件と抽出結果で返却されるスレッド数の最大値(ここでは100スレッド)を指定。
(最大値の引数は省略可能で、指定なしの場合は 500 になります)
const threads = GmailApp.search(query, 0, 100);

 ・ 抽出したスレッドをゴミ箱に移動
GmailApp.moveThreadsToTrash(threads);
 
 ・再帰呼び出し 
ここでは1回の削除件数を100スレッドにしているのですが、溜まっている件数はそれ以上なのでスクリプトを再帰呼び出しして、条件に該当するスレッド件数が0件になるまで繰り返し処理するようにしています。
// 再帰呼び出し
myFunction();
 
GASでは、1スクリプトの実行時間が6分間という制限があるそうで、
実行した結果、件数が多かったため 6分以上になると途中でタイムアウトエラーが発生してしまいましたが、
過去年数の条件を変えながら数回に分けて実行することで溜まりに溜まっていたメールを削除することができました。

今後、不要メールが溜まらないよう GASのトリガー機能を使って、この削除スクリプトを定期的に自動実行させたいと思います。

 ・画面左の[トリガー]アイコンをクリックし、[トリガーを追加]ボタンをクリック。

 ・イベントのソースに「時間手動型」を選択し、時間ベースのトリガータイプに任意のタイプを選択。
  (私は月1回実行するように設定)

 それではまた!

0 件のコメント:

コメントを投稿