【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に通知をすることができました。
実装自体はとてもシンプルですよね!
ぜひ参考にしていただければ幸いです👍