30日前より前のメールをラベル抽出して、ゴミ箱に移動するスクリプト GitHub: yoo16/gas_samples
function removeGmail() {
var before_days = 30;
var spreadsheet_id = 'スプレードシートID';
var sheet = SpreadsheetApp.openById(spreadsheet_id).getActiveSheet();
var values = sheet.getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
removeMail(values[i], before_days);
}
}
function removeMail(label, before_days) {
var condition = 'older_than:' + before_days + 'd label:'+ label;
var threads = GmailApp.search(condition);
for (var i = 0; i < threads.length; i++) {
threads[i].moveToTrash();
}
//TODO loop for all threads by label
//var threads = GmailApp.search(condition, 0, 100);
//GmailApp.moveThreadsToTrash(threads);
}
GmailApp の機能はClass GmailAppを参照
Gmail検索ラベルは複数あるので、Googleスプレッドシートに記載して読み取る スプレッドシートの指定は、ファイル名検索でもできるが、あらかじめID取得しておいた方が楽
var sheet = SpreadsheetApp.openById(spreadsheet_id).getActiveSheet();
GmailApp.search() メソッドで Gmailを検索できるが、引数は Gmail のブラウザ操作で現れるものと同じと考えて良い。
var threads = GmailApp.search('older_than:' + before_days + 'd label:'+ label);
ただし件数制限がある模様(threads.length を調べると500件)
for (var i = 0; i < threads.length; i++) {
threads[i].moveToTrash();
}
1スレッドづつ削除するが、完全削除ではなくゴミ箱に移動する (完全削除メソッドは GAS では用意されていない)
上記だと forループで1スレッド毎にゴミ箱に移動するが、一括でゴミ箱移動する「GmailApp.moveThreadsToTrash()」がメソッドが存在する
var threads = GmailApp.search('older_than:' + before_days + 'd label:'+ label);
GmailApp.moveThreadsToTrash(threads);
ただし「この操作は最大 100 件のスレッドにのみ適用できます。」と表示され、100件までしか動作しないようなので、search() するときに件数を指定
var condition = 'older_than:' + before_days + 'd label:'+ label;
var threads = GmailApp.search(condition, 0, 100);
GmailApp.moveThreadsToTrash(threads);
これを、メールがなくなるまでループで回せば全削除はできそう
定期的にスクリプトを実行するには「編集 > 現在のプロジェクトのトリガー」から設定できる。
「トリガーを追加」でスケジュールを設定できる(詳細設定はわかりやすいので割愛)