1
2

More than 1 year has passed since last update.

ラベルを自動的に付けたり外したりするGoogle Apps Script

Last updated at Posted at 2023-03-24

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]);
  } 
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2