[EffectiveGoogleAppsScript]Gmail処理にStar機能を使おう

EffectiveGoogleAppsScriptEffectiveGoogleAppsScript

どうも。つじけ(tsujikenzo)です。今日は単発で 「Gmail処理にStar機能を使おう」 をお届けします。

この記事は、#Effective GoogleAppsScriptタグがついております。

今日のアジェンダ

  • Star機能とは
  • Star付きの受信メールを取得しよう
  • 受信メールにStarを付けよう
  • 時限式トリガーと組み合わせてGmail処理を自動化しよう

Star機能とは

GmailのStar機能、みなさん使ったことありますよね。受信メールにStar(星マーク)をつけて、メールを整理する機能です。

Gmail でのスター付きメール - パソコン - Gmail ヘルプ
Gmail では重要なメールにスターのマークを付けることができます。後でメールを確認するときに便利です。 メールにスターを付ける パソコンで Gmail を開きます。 受信トレイで、メールの左側にあるスターアイコン

受信メールにポチポチ手動で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しています。

Build software better, together
GitHub is where people build software. More than 100 million people use GitHub to discover, fork, and contribute to over 420 million projects.

ノンプログラマーのためのEffectiveGoogleAppsScript

タイトルとURLをコピーしました