Gmailのインボックスにメールがたまりすぎて、どうにも整理がつかなくなってきたので、Google Apps Scriptを作って自動的にラベルをつけることにした。
私宛に来たと思われるメールを"美山様" OR "美山さん" OR "Dear Toru" OR "Dear Dr. Miyama" OR "美山先生" OR "Prof. Miyama"で検索して、"Miyama"というラベルをつける。"to:my@email.adress"のように検索すると、メーリングリストなども該当するので、そうはしない。これだけなら、Gmailの機能のフィルターでもできるのだが、インボックスから外した(アーカイブした)メールからは、ラベルを取ってくれるのがミソ。これを一定期間(1時間間隔など)にトリガーして自動的にラベルを整理する。
以下がスクリプト。queryやonLabelを変えれば別のラベルもつけることが出来る。
例えば
query='"締め切り" OR "締切" OR "deadline"'
onLabel="Deadline"
など。
プロトタイプはChatGPTに作ってもらったのですぐに出来た。
function labelmail() {
query='"美山様" OR "美山さん" OR "Dear Toru" OR "Dear Dr. Miyama" OR "美山先生" OR "Prof. Miyama"'
onLabel="Miyama"
label(query,onLabel);
}
function label() {
// ラベルを取得する。なければ作成する。
var label = GmailApp.getUserLabelByName(onLabel);
if (!label) {
label = GmailApp.createLabel(onLabel);
}
// query 条件、及びinboxにあり、及びlabelがついていないメールのスレッドを取得する。
var threads = GmailApp.search(`label:inbox ${query} -label:${onLabel}`);
// 各スレッドにラベルを付ける。
for (var i = 0; i < threads.length; i++) {
label.addToThread(threads[i]);
}
// inboxに無い場合はlabelを外す
unlabel(onLabel)
}
function unlabel(onLabel) {
// ラベルを取得する。
var label = GmailApp.getUserLabelByName(onLabel);
// ラベルがついているがinboxに無いメールのスレッドを取得する。
var threads = label.getThreads(0, 100).filter(function(thread) {
return !thread.isInInbox();
});
// 各スレッドからラベルを外す。
for (var i = 0; i < threads.length; i++) {
label.removeFromThread(threads[i]);
}
}