GAS活用事例:Gmailの不要メール自動削除(複数ラベル対応版)

この記事では、Google Apps Script(GAS)を活用して、Gmailのストレージを圧迫する不要なメールを自動で整理・削除する方法を紹介します

GASに関する事は「GASの活用事例 【URL監視編】」の記事内の初めの方で紹介しているのでそちらで確認して下さい

スクリプトの概要

特定のラベルが付いたメールのうち、保存期間(半年)を過ぎたものを自動でゴミ箱へ移動します。手動での整理が不要になり、容量不足の解消に役立ちます。

実装コード

複数のラベルを配列で管理し、順番に処理する構成です。

function deleteOldMailsByLabels() {
  // 削除対象のラベルを配列で指定
  const labels = ['メルマガ等', '通知メール', 'ログ'];
  const period = '6m'; 
  
  labels.forEach(labelName => {
    const searchQuery = `label:${labelName} older_than:${period}`;
    const threads = GmailApp.search(searchQuery);
    
    if (threads.length > 0) {
      // 処理件数が多い場合の制限を考慮し、一度に処理する上限を設けるのも手
      threads.forEach(thread => thread.moveToTrash());
      console.log(`ラベル【${labelName}】: ${threads.length}件をゴミ箱へ`);
    }
  });
}

【重要】実行時間制限(6分ルール)への対策

GASには「1回の実行は最大6分まで」という制限があります。大量のメールを一括削除しようとすると、途中でエラー(Time-out)が発生し、処理が中断されます。

  • 小分けに実行する 一度に数千件を消そうとせず、トリガー(1時間に1回など)を使って、少しずつ消化させるのが安全です。
  • 検索件数の制限 GmailApp.search(searchQuery, 0, 100) のように引数を追加することで、1回の実行で処理する件数を100件程度に絞り、ループ回数を抑えることができます。
  • スクリプトの効率化 thread.moveToTrash() をループ内で回すのではなく、スレッドを配列にまとめて一括処理する方法もありますが、まずは件数を絞った定期実行が最も確実です。
  • ラベル事に実行 今回は複数のラベルをまとめて削除しているので、6分を超える場合はラベルを単一にして処理して実行時間を減らします

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です