どうも。つじけ(tsujikenzo)です。今日は単発で 「Gmail処理にStar機能を使おう」 をお届けします。
この記事は、#Effective GoogleAppsScriptタグがついております。
今日のアジェンダ
- Star機能とは
- Star付きの受信メールを取得しよう
- 受信メールにStarを付けよう
- 時限式トリガーと組み合わせてGmail処理を自動化しよう
Star機能とは
GmailのStar機能、みなさん使ったことありますよね。受信メールにStar(星マーク)をつけて、メールを整理する機能です。
受信メールにポチポチ手動でStarを付けたり外したりすることが可能ですが、GASでも操作可能です。
このStar機能を使うことで、Gmail処理のGASが、とてもかんたんになりますので、活用していきましょう。
今回は、メールの件名に「ノンプロ研」というキーワードが入っている受信メールの処理(本文をPDFにする、添付ファイルを保存する、など)を想定します。
Gmailのラベル機能が便利ですので、こちらの記事も参考にしてください。
受信メールには、3つのスレッドと、それぞれにメッセージが格納されている、という状況でございます。
手動でStarを付ける
まず、手動でStarを付けてみましょう。
受信メールのスレッドを開いて、好きなメッセージにStarをつけましょう。
スレッド一覧で見ると、このような見た目になりますので、注意しましょう。
Star付きの受信メールを取得しよう
まず、対象のメッセージをすべて配列に格納します。コードを理解するためには、こちらの記事も参考にしてください。
const labelObject = GmailApp.getUserLabelByName('ノンプロ研');
const threads = labelObject.getThreads(0, 10);
const messages = threads.map(thread => thread.getMessages()).flat();
console.log(messages.length); //6
GmailMessageクラスには、isStarred()メソッドが提供されています。
メッセージ配列から、Star付きのメッセージのみを抽出しましょう。
const starredMessages = messages.filter(message => message.isStarred());
console.log(starredMessages.length); //2
論理否定演算子を使うと、Starのついていないメッセージのみを抽出できます。
const withoutstarMessages = messages.filter(message => !message.isStarred());
console.log(withoutstarMessages.length); //4
受信メールにStarを付けよう
GmailMessageクラスには、star()メソッドが提供されています。
Messageオブジェクトにぶつけることで、メッセージにStarを付けることができます。
まだStarのついていないメッセージに、すべてStarをつけてみましょう。
for (const withoutstarMessage of withoutstarMessages) {
withoutstarMessage.star();
}
実行すると、このようになります。(ブラウザをリロードしましょう)
実務では、まずメッセージのStarを判定し、Starがついていなければ処理を実行します。
そして、処理が終わったらStarを付けることで、処理の重複を回避できます。
時限式トリガーと組み合わせてGmail処理を自動化しよう
それでは実践編です。まず、新着メッセージにはStarがついていない、という状況にしておきましょう。(手動で設定していただいても構いません)
メッセージのBodyをログ出力する関数を作成します。
処理済みのメッセージには、Starを付けます。
実行してみましょう。
/**
* メッセージの本文をログ出力する関数
* 時限トリガー: 10分に1度
*/
function messagebodyforLogging() {
const labelObject = GmailApp.getUserLabelByName('ノンプロ研');
const threads = labelObject.getThreads(0, 10);
const messages = threads.map(thread => thread.getMessages()).flat();
const withoutstarMessages = messages.filter(message => !message.isStarred());
for (const withoutstarMessage of withoutstarMessages) {
console.log(withoutstarMessage.getPlainBody());
withoutstarMessage.star();
}
//ノンプロ研で、お忘れ物があるようです。(略)
//まだ持ち主が見つかっていないようです。(略)
//見つかったようです!(略)
}
上記のようにログが出力されて、メッセージにはStarがつきます。
時限式トリガーを設置して、完了です。
まとめ
以上で、「Gmail処理にStar機能を使おう」をお届けしました。
Star機能のいいところは、手動でブラウザでStarをつけたりはずしたりできることです。
メッセージが処理済みかどうか、スプレッドシートを見たりデータ上で判定となると、すこし抵抗がありますよね。
Star機能、ぜひ活用してみてください。
Githubリポジトリ
この記事のコード全文は、GithubにUPしています。