未読メールをすべて既読にしたい

自分に関係ないメールを未読スルーしてると大量にたまっていることありますよね!?

f:id:aoma23:20190417142250p:plain
大量の未読メール

その数30000件超え!

令和になる前に整理したくなったので、すべて既読にしようとしました。

大量すぎてエラーになる...

Gmailの画面からすべて既読にしようとしたところ、大量過ぎてエラーに。。

f:id:aoma23:20190417142323p:plain
大量すぎてエラーになる

2000件程度なら大丈夫だったのですが、10000超えてくるとエラーになる感じですね。。 ググってみると同じ事象にハマっている人がいました。。

未読メールを既読に出来ません。 - Gmail ヘルプ

GASで既読にする

未読のまま放置したくない!(今更w)どうしても既読にしたい! と思い悩んでいたところ、先程のページにGASでやっちゃえばいいじゃん!という回答があったので、参考にスクリプトを組みました。

下記をgoogle app scriptにコピペして実行すればすべて既読にできます!(時間はかかりますが)

function toRead() {

  //設定したトリガーがあれば削除(一つ前に起動終了したトリガーを削除する)
  var trigger = ScriptApp.getProjectTriggers();
  var trigger_count = trigger.length;
  var i = 0;
  for(i; i < trigger_count; i++) {
    ScriptApp.deleteTrigger(trigger[i]);
  }
  
  var mail = GmailApp.search("is:unread label:読まない");  // 未読メールを取得 ※「label:読まない」は適宜変更ください。
  var count = mail.length;
  Logger.log(count);
  //もし未読メールがなければスクリプトを終了
  if(count == 0) {
    return;
  }
  
  var i = 0;
  for(i; i < count; i++) {
    mail[i].markRead();
  }

  // APIで500件しか取得できないので、終わったら1分後にまた叩く
  ScriptApp.newTrigger("toRead")
  .timeBased().after(1 * 1000)
  .create();
}

ただし、GmailApp.searchが1日に取得できる上限(契約により20000または50000)があるので、上限を超えるほど大量な場合は明日また実行してください。(cron登録しとく手もありますね)

f:id:aoma23:20190417145334p:plain
1日にAPIで取得できる上限を超えるとエラーになる

それではまた!よければ読者登録!はてブ!お願いします!

Updated: