Labs

<< 最初 < 前ページ 次ページ > 最後 >>
icon [GAS]Gmail指定ラベルの不要メール削除 (2019/05/15)
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);
}

Google Apps Script : GmailApp Reference


GmailApp の機能はClass GmailAppを参照

Gmail検索ラベルは複数あるので、Googleスプレッドシートに記載して読み取る
スプレッドシートの指定は、ファイル名検索でもできるが、あらかじめID取得しておいた方が楽

var sheet = SpreadsheetApp.openById(spreadsheet_id).getActiveSheet();

Gmail操作


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 では用意されていない)

Threadをまとめてゴミ箱に移動


上記だと 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);
これを、メールがなくなるまでループで回せば全削除はできそう

トリガー登録で定期実行


定期的にスクリプトを実行するには「編集 > 現在のプロジェクトのトリガー」から設定できる。
GAS Trigger

「トリガーを追加」でスケジュールを設定できる(詳細設定はわかりやすいので割愛)
GAS Trigger
<< 最初 < 前ページ 次ページ > 最後 >>