過去のgmailをまとめて削除する【Google Apps Script】

Pocket

gmailはGoogle Driveの容量(非課金だと15GB)が決まっているので容量がいっぱいになる前に削除しないといけない。

ブラウザからgmailを開いてまとめて選択して削除するという手段だと、一回に100件までしか削除できなくて、10000件のメールを削除する場合100回繰り返さないといけなくて面倒なのでそれを自動化。

Google Apps Script使うのはGoogle Apps Script。

https://script.google.com/

2019年12月31日までのメールを全て削除しようとしたらこんな感じ

function deleteGmail() {
  var criteria = 'before: 2019/12/31'
  var deleteThreads = GmailApp.search(criteria);
  for (var j = 0; j < deleteThreads.length; j++) {
    deleteThreads[j].moveToTrash();
  }
}
}

特定のカテゴリーやラベルが決まっているとき。

function deleteGmail() {
  var deleteItem = [
//    'label:削除するラベル',
    'label:sns-twitter',
//    'category:削除するカテゴリー',
    'category:promotions'
  ];
  
  for(var i = 0; i < deleteItem.length; i++) {
    var item = deleteItem[i];
    var criteria = '' + item + ' before: 2019/12/31'
    var deleteThreads = GmailApp.search(criteria);
    for (var j = 0; j < deleteThreads.length; j++) {
      deleteThreads[j].moveToTrash();
    }
}
}

適当にいつより前みたいなのを実行するたびに書くのもいいけど、面倒なので一年前のものを自動で削除するようにしたい。

Google Apps Scriptはトリガーという機能がついていて定期的にスクリプトを実行させることが出来る。

だから実行する日より一年前の日を自動で取得してそれをスクリプト上に組み込めばそれにトリガーを使えば適宜削除できる。

function deleteGmail() {
  var deleteItem = [
//    'label:削除するラベル',
    'label:sns-twitter',
//    'category:削除するカテゴリー',
    'category:promotions'
  ];
  
  for(var i = 0; i < deleteItem.length; i++) {
    var item = deleteItem[i];
    var date = new Date();
    date.setFullYear(date.getFullYear() - 1);
    lastYear = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd');
    var criteria = '' + item + ' before: ' + lastYear;
    var deleteThreads = GmailApp.search(criteria);
    for (var j = 0; j < deleteThreads.length; j++) {
      deleteThreads[j].moveToTrash();
    }
    }
}

こんな感じかな。

削除するのは2年前以降っていう場合は

date.setFullYear(date.getFullYear() – 1);

の-1を-2に変更したりする。

あとはトリガーで自分の好きなタイミングで実行するように設定すればよい。

1週間か1ヶ月おきに実行するのが良いかな。

ちなみに厳密には削除ではなくてゴミ箱に映すだけなので容量がやばい時はゴミ箱の中身を完全に空にすることを忘れないように。