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回動作するように設定しました。
まとめ
このスクリプトを導入すれば、「必要な期間だけ残して、あとは自動で削除」という理想的なメール管理が可能になります。お役に立てれば嬉しいです。
- 前の記事
2025年9月21日の英語勉強日誌 2025.09.22
- 次の記事
記事がありません