Gmailで返信数の多いスレッドに自動的にラベルを付ける方法
私が使用しているあるGmailアドレスが1日に200通以上メールを受け取っています。
フィルタを利用してかなり見やすくしているつもりなのですが、それでも重要なメールの見落としがあったので Google Apps Scriptを利用して盛り上がっているスレッドに自動的にラベルを付くようにしてみました。
もしかすると、同じような悩みをお持ちの方がいるかもしれませんので、作成したスクリプトを公開しておきます。
フィルタを利用してかなり見やすくしているつもりなのですが、それでも重要なメールの見落としがあったので Google Apps Scriptを利用して盛り上がっているスレッドに自動的にラベルを付くようにしてみました。
もしかすると、同じような悩みをお持ちの方がいるかもしれませんので、作成したスクリプトを公開しておきます。
/*
スレッドあたりのメッセージ数を調べて、一定数以上ならラベルを付けるスクリプト
Date: 2017/03/01
Author: backy0175
*/
// 設定
var sheetName = "Settings";
var cellQuery = "B1";
var cellNumMsgs = "B2";
var cellLabel = "B3";
var cellLastChecked = "B5";
// タイマーイベントでこの関数を自動的に実行されるようにする
function run() {
// 実行日時の取得
var dd = new Date();
// スプレッドシートの取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
if (sheet == null) {
Logger.log("Sheet not found : " + sheetName);
return;
}
// 設定値の読み込み
var query = sheet.getRange(cellQuery).getValue();
var numMsgs = sheet.getRange(cellNumMsgs).getValue();
var label = sheet.getRange(cellLabel).getValue();
query += " -label:" + label; // すでにラベル付けされているスレッドの除外
Logger.log(query + ", " + cellNumMsgs + ", " + label);
// ラベルオブジェクトの取得
var labels = GmailApp.getUserLabels();
var objLabel = null;
for (var i = 0 ; i < labels.length ; i++) {
if (labels[i].getName() == label) {
objLabel = labels[i];
Logger.log("Found label: " + objLabel.getName());
break;
}
}
if (objLabel == null) {
Logger.log("Create label: " + label);
objLabel = GmailApp.createLabel(label);
}
// メールの検索
var threads = GmailApp.search(query);
Logger.log("Number of threads = " + threads.length);
// メッセージ数の確認
for (var i = 0 ; i < threads.length ; i++) {
var thread = threads[i];
if (thread.getMessageCount() >= numMsgs) {
Logger.log(i + ":" + thread.getFirstMessageSubject());
// ラベル付け
thread.addLabel(objLabel);
}
}
// 実行日時の保存
sheet.getRange(cellLastChecked).setValue(dd);
}
この記事へのコメント