見出し画像

【GAS入門④】「処理済みのメール」にスターを付けて、「新着メール」のみ取得する方法

GASを用いて、GmailとSlackを自動で連携させる方法について
これまで学んできました。

今回取り組むのは、
「新着メール」と「処理済みのメール」を区別する方法についてです。

既に処理をしたメールに対しては、
次回以降、処理を走らせないようにしたい

と考えている方にとって、とても参考になると思います。

それでは、早速コードを見ていきましょう!

function getGmail() {
  const query = 'in:inbox subject:(新しいデバイスが登録されました)';
  const gmailThread = GmailApp.search(query, 0,10);
  const gmailMessage =  GmailApp.getMessagesForThreads(gmailThread);

  for(const message of gmailMessage) {
    for(const mail of message) {
      //既にスターが付いてるメールは処理をスキップ
      if(mail.isStarred() == true) continue; 

      const body = mail.getPlainBody();
      const regexp = RegExp( /以下をご覧ください。[\s\S]*?デバイスを追加しましょう/);
      const result = body.match(regexp)[0].replace('以下をご覧ください。', '');
      
      sendMessageToSlack(`${result}🔥\nApple developerリンク: https://developer.apple.com/account/resources/devices/add`);
      //メールにスターを付けて処理済みにする
      mail.star();
    }
  }
}

ポイントは2つあります。

ポイント①

1つ目は、8〜9行目の部分です。

      //既にスターが付いてるメールは処理をスキップ
      if(mail.isStarred() == true) continue; 

isStarred()メソッドを使うことにより、メールに⭐️が付いているかどうかを
判別することができます。

もし、isStarred() == trueであれば、既に「処理済みのメール」になります。

こうすることで、「新着メール」のみ取得して、
その後、Slackに通知するという処理を行うことができます。


ポイント②

2つ目は、16〜17行目の部分です。

      //メールにスターを付けて処理済みにする
      mail.star();

これは、処理が終わったメールに対してstar()メソッドを走らせています。

こうすることで、「新着メール」から「処理済みのメール」へと変化させ、
次回以降は処理をしないようにすることができます。


まとめ

いかがでしたでしょうか?

「新着メール」と「処理済みのメール」を区別することで、
常に「新着メール」のみに対してSlackに通知をすることができました。

実装自体はとてもシンプルですよね!
ぜひ参考にしていただければ幸いです👍

いいなと思ったら応援しよう!