はじめに
こんにちは、限界ちゃんです。普段はサイバーセキュリティ関連の記事を書くことが多いですが、今回はちょっと趣向を変えて作業効率系の内容を書いてみようと思います。
実は、小学生の頃から使っているGoogleアカウントの容量がついに上限に達してしまいました。「容量が足りません」という通知を見てもずっと放置していたのですが、ある日 「お客様宛のメールは送信者に返送され、後から復元することもできません。」 という警告が届き、さすがに焦りました。(ここまで放置するのはよくない)
「これはマズい、そろそろ本気で整理しないと…」と思い、GAS(Google Apps Script)を使って特定期間の不要なメールを一括削除するスクリプトを作成しました。
Gmailの容量不足で困っている人の参考になれば嬉しいです。(ほぼ自分用のメモです)
Gmailの削除制限と問題点
GASでは GmailApp.search()
を使ってメールを取得できますが、一度に取得できるスレッド数の上限は500件です。そのため、一回の実行だけではすべてのメールを削除できません。
そこで、500件ずつ削除を繰り返すバッチ処理を組み込み、効率的にメールを整理できるようにしました。
GASを使ったGmailのメール削除スクリプト
このスクリプトでは、一度に最大500件のメールを取得し、削除する処理を繰り返します。Gmailの GmailApp.search()
には一度に取得できるスレッド数が500件までという制限があるため、大量のメールを削除する場合にはループ処理が必要になります。
また、削除が進むごとに Logger.log()
を使って削除されたメールの件数を記録することで、処理の進捗が確認できるようにしています。さらに、Gmail APIにはリクエスト制限があるため、短時間で大量のリクエストを送るとエラーになる可能性があります。その対策として Utilities.sleep(3000)
を挿入して、3秒の待機時間を設定することで、APIの制限を回避しながら安定して処理が進むようにします。
function deleteEmails() {
var startDate = "yyyy/mm/dd"; //削除開始日(この日以降のメールを削除)設定してね
var endDate = "yyyy/mm/dd"; //削除終了日(この日以前のメールを削除)設定してね
var searchQuery = "after:" + startDate + " before:" + endDate;
var batchSize = 500;
var deletedCount = 0;
while (true) {
var threads = GmailApp.search(searchQuery, 0, batchSize);
if (threads.length === 0) {
Logger.log("削除がおわりました: " + deletedCount);
break;
}
for (var i = 0; i < threads.length; i++) {
threads[i].moveToTrash();
}
deletedCount += threads.length;
Logger.log(deletedCount + "件のスレッドを削除");
Utilities.sleep(3000);
}
}
ゴミ箱のメールを消去
このスクリプトでは、削除されたメールはゴミ箱に移動するだけなので、消去したい場合はこれを追加してください。
function emptyTrash() {
var trashThreads = GmailApp.getTrashThreads();
for (var i = 0; i < trashThreads.length; i++) {
trashThreads[i].deleteForever();
}
Logger.log("消去完了");
}
もしこれがめんどくさい場合は、Gmail上のゴミ箱から「ゴミ箱を今すぐ空にする」ボタンをクリックすることでもできます。