【Gmail】Google App Scriptで特定のラベルの付いたメールを未読にする方法

【Gmail】Google App Scriptで特定のラベルの付いたメールを未読にする方法

Gmailでラベルの付いているメールの件数をパッと知りたい…と思うことがありまして。

その夢を実現するためにGoogle App Scriptを使ったので、その方法の備忘録的なエントリーです。

Google App Scriptで特定ラベル内のメールを全部未読にする

よっひー(@yosiakatsuki)です。

Google App ScriptでGmailを操作する方法、いろいろあると思いますが、今回は既読のメールを自動で未読にするという「そんな需要あるんかいな」みたいなことをやりました。

サックっとコードから

// 該当ラベルに属するメールを未読にする
function mark_unread() {
  var labels = [ '_待ち', '_要確認', '_要返答' ];

  for (var i = 0; i < labels.length; i++ ){
    mark_unread_by_label(labels[i]);
  }
}

//検索
function mark_unread_by_label(label) {
  var threads = GmailApp.search('label:'+ label , 0, 100);
  var count = threads.length;

  //ヒットした結果を未読にする
  for (var i = 0; i < count; i++ ){
    var messages = threads[i].getMessages();
    //スレッドの最期のメールだけを未読にする…(全部未読にすると、スレッドを開いた時、全部のメールが開いて面倒)
    GmailApp.markMessageUnread(messages[messages.length - 1]); 
  }
}

ざっくりとした動作説明としては、GmailApp.searchでラベルを対象に検索をかけて、ヒットしたメッセージに対してGmailApp.markMessageUnreadで未読にする…といったところです。

対象ラベルの調整

未読の処理をする対象のラベルは以下の部分を編集します。

function mark_unread() {
  //▼▼▼
  var labels = [ '_待ち', '_要確認', '_要返答' ];
  //▲▲▲

  for (var i = 0; i < labels.length; i++ ){
    mark_unread_by_label(labels[i]);
  }

対象になるラベル名を配列で定義します!

自動実行の設定

コードができたら後は未読の処理を自動実行させます。

自動実行のためにトリガーを設定する

コードを保存したら、時計のマークをクリックして、トリガーを設定していきます。

一定時間で自動的に実行するようにタイマーをセットする

新しいトリガーを追加したら、以下の設定をしていきます

  • 実行:実行する関数名(今回はmark_unread
  • イベント:時間主導型

実行する間隔は好みに合わせて設定して下さい。

僕はとりあえず1時間に1回実行されれば十分だと思うので「時タイマー」の「1時間ごと」に設定しました。

使える関数などはリファレンスを見てみる

全部英語で僕にはちんぷんかんぷんですが、頑張ってリファレンスを見てみると、使えそうな関数が見つかることがあるので眺めてみます。