★うめじ英語塾 お問い合わせフォーム★

Gmailを自動整理!ラベルごとに保存期間を決めて古いメールを削除するGASコード

Gmailを自動整理!ラベルごとに保存期間を決めて古いメールを削除するGASコード

Gmailを長く使っていると、どうしてもメールがたまってしまいます。必要な期間が過ぎればもう読まないのに、削除を後回しにしてしまいがちです。

例えば、うめじ英語塾の場合、欠席連絡のメールは一定期間が過ぎれば不要になります。しかし、放置するとチリも積もって山のようになります。

今回は、ラベルごとに保存期間を設定し、古いメールを自動的にゴミ箱に移動するGoogle Apps Script(GAS)を、ChatGPTの助けを借りながら作成しました。

スクリプトの特徴
【1】ラベル単位で保存日数を設定できる
【2】親ラベル/子ラベルにも対応
【3】テストモードと本番モードを切り替え可能
【4】処理件数の上限を考慮し、次回実行で続きから処理可能

コード全文

function moveOldEmailsFlexible() {
  // ------------------------------
  // モード切替
  // testMode = true → ログに削除候補を表示するだけ(テスト用)
  // testMode = false → 実際にメールをゴミ箱に移動(本番用)
  // ------------------------------
  var testMode = true; // ←ここを true/false に変更して切替
 
  // ラベルごとに削除日数を設定
  var targets = [
    { label: "お知らせ", daysOld: 100 }, // 100日で削除
    { label: "会議/スケジュール通知", daysOld: Math.round(365/2) }, // 半年で削除
    { label: "社内連絡/休暇申請", daysOld: 365 }, // 1年で削除
    { label: "会計/請求書", daysOld: 365*7 }, // 7年で削除
    // 必要に応じて追加可能
  ];
 
  var now = new Date();
  var maxPerBatch = 50; // 1回で処理するスレッド数
  var props = PropertiesService.getScriptProperties();
 
  targets.forEach(function(target, index) {
    var label = GmailApp.getUserLabelByName(target.label);
    if (!label) {
      Logger.log("ラベルが見つかりません: " + target.label);
      return;
    }
 
    var start = parseInt(props.getProperty("start_" + index)) || 0;
    var threads;
    var processed = 0;
 
    do {
      threads = label.getThreads(start, maxPerBatch);
      for (var i = 0; i < threads.length; i++) { var thread = threads[i]; var lastMsgDate = thread.getLastMessageDate(); var diffDays = (now - lastMsgDate) / (1000 * 60 * 60 * 24); if (diffDays >= target.daysOld) {
          if (testMode) {
            Logger.log("削除候補(テスト): " + thread.getFirstMessageSubject() +
                       " | ラベル: " + target.label +
                       " | 最終日付: " + lastMsgDate +
                       " | 経過日数: " + Math.floor(diffDays));
          } else {
            thread.moveToTrash();
            Logger.log("ゴミ箱へ移動: " + thread.getFirstMessageSubject() +
                       " | ラベル: " + target.label +
                       " | 最終日付: " + lastMsgDate +
                       " | 経過日数: " + Math.floor(diffDays));
          }
        }
      }
 
      processed += threads.length;
      start += maxPerBatch;
 
      if (processed >= 300) {
        Logger.log("ラベル「" + target.label + "」が1回の実行の処理件数上限に達しました。次回実行で続きから処理します。");
        break;
      }
 
    } while (threads.length > 0);
 
    props.setProperty("start_" + index, start);
 
    if (threads.length < maxPerBatch) {
      props.setProperty("start_" + index, 0);
      Logger.log("ラベル「" + target.label + "」の処理完了。");
    }
  });
}

保存期間の例
・「お知らせ」ラベル → 100日で削除
・「会議/スケジュール通知」ラベル → 半年で削除(整数に四捨五入)
・「社内連絡/休暇申請」ラベル → 1年で削除
・「会計/請求書」ラベル → 7年で削除

使い方
【1】Google Apps Scriptを開く
Google Apps Script にアクセスして新規プロジェクトを作成
【2】上記コードを貼り付ける
【3】テストモードで動作確認(※実際に使用するにはアクセス権限の付与が必要です)
var testMode = true; にして実行。削除候補がログに出力されます。
【4】本番モードに切替
var testMode = false; にして実行すると、古いメールが自動でゴミ箱へ移動します。ゴミ箱に移動したメールは、移動から30日後に自動的に完全削除されます。
【5】定期実行トリガーを設定
メニューの「トリガー」から、毎日や毎週など定期的に実行するように設定できます。わたしは毎週1回動作するように設定しました。

まとめ
このスクリプトを導入すれば、「必要な期間だけ残して、あとは自動で削除」という理想的なメール管理が可能になります。お役に立てれば嬉しいです。