aoma blog

エンジニアの日常とか技術とか

【Gmail】エラーになるほど大量の未読メールを全て既読にする

この記事は移転しました。約5秒後に新記事へ移動します。
移動しない場合はココをクリックして新サイトをお楽しみください。

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

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

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で取得できる上限を超えるとエラーになる

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