Gmailを使い始めてから10年以上経過したと思うが、メールはほとんど広告メールだけなので、ほとんど読んでません。サーバの容量はまだ余裕がありますが、どうせ読まないので削除していこうと思い、スクリプトを作りました。
方針
- 今回はVSCodeでTypescript使って作成
- スレッドをサーチして削除するプログラムを作成。
- サーチの条件は、3年以前で、スター付きでも、重要でもないメールを500件削除。
プログラム
今回はVisual Studio CodeでTypeScriptのローカル環境を作り、アップしました。
見た目はJavaScriptとあまり変わりませんが、型式を指定することによりインテリセンスが表示されるようになるので使い勝手が良いです。
ただ、環境を構築するのが少し手間なので、今回のようなあまりコード量が多くない場合は、意味なかったかなと思いました。
//メールを削除
function deleteThreads() {
// 最後から指定数削除
const max = 500;
const end = GmailApp.getInboxUnreadCount();
const start = 0;
const yearsBefor = 3;
//指定年以前で、スター付きではなく、重要でもないメール(スレッド)を指定。
const query = `before:${getDeleteDate(yearsBefor)} -is:starred -is:important)`;
const threads = GmailApp.search(query, start, max);
//スレッドを1件1件処理
threads.map((t) => {
Logger.log(`ID:${t.getId()} Sub: ${t.getFirstMessageSubject()} date:${t.getLastMessageDate()} count: ${t.getMessageCount()} star:${t.hasStarredMessages()} important:${t.isImportant()}`);
t.moveToTrash();
});
}
//指定年前の日付を"2000/01/23"の形で返却
function getDeleteDate(year: number): string {
const now = new Date();
const befor = now;
befor.setFullYear(now.getFullYear() - year);
return getDateString(befor);
}
//Dateの書式を"2000/01/23"の形に成形
function getDateString(d: Date): string {
return `${d.getFullYear()}/${d.getMonth()}/${d.getDate()}`
}
gsファイルはこうなります
// Compiled using gas_type 1.0.0 (TypeScript 4.8.4)
//メールを削除
function deleteThreads() {
// 最後から指定数削除
var max = 500;
var end = GmailApp.getInboxUnreadCount();
var start = 0;
var yearsBefor = 3;
//指定年以前で、スター付きではなく、重量でもないメール(スレッド)を指定。
var query = "before:".concat(getDeleteDate(yearsBefor), " -is:starred -is:important)");
var threads = GmailApp.search(query, start, max);
//スレッドを1件1件処理
threads.map(function (t) {
Logger.log("ID:".concat(t.getId(), " Sub: ").concat(t.getFirstMessageSubject(), " date:").concat(t.getLastMessageDate(), " count: ").concat(t.getMessageCount(), " star:").concat(t.hasStarredMessages(), " important:").concat(t.isImportant()));
t.moveToTrash();
});
}
//指定年前の日付を"2000/01/23"の形で返却
function getDeleteDate(year) {
var now = new Date();
var befor = now;
befor.setFullYear(now.getFullYear() - year);
return getDateString(befor);
}
//Dateの書式を"2000/01/23"の形に成形
function getDateString(d) {
return "".concat(d.getFullYear(), "/").concat(d.getMonth(), "/").concat(d.getDate());
}
プログラムの説明
日にちの計算
3年前をの日付をクエリに指定する文字列にします。
//指定年前の日付を"2000/01/23"の形で返却
function getDeleteDate(year: number): string {
const now = new Date();
const befor = now;
befor.setFullYear(now.getFullYear() - year);
return getDateString(befor);
}
//Dateの書式を"2000/01/23"の形に成形
function getDateString(d: Date): string {
return `${d.getFullYear()}/${d.getMonth()}/${d.getDate()}`
}
メールを検索するときはクエリを設定
-is:starred ・・・ スター付きではない
-is:important・・・重要ではない
const query = `before:${getDeleteDate(yearsBefor)} -is:starred -is:important`;
const threads = GmailApp.search(query, start, max);