[EffectiveGoogleAppsScript]Gmail検索にラベル機能を使おう

EffectiveGoogleAppsScriptEffectiveGoogleAppsScript

どうも。つじけ(tsujikenzo)です。今日は単発で 「Gmail検索にラベル機能を使おう」 をお届けします。

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

今日のアジェンダ

  • ラベル機能とは
  • ラベルを取得しよう
  • ラベルからスレッド配列を取得しよう
  • スレッド配列からメッセージ配列を取得しよう

ラベル機能とは

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

ラベルを作成して Gmail を整理する - パソコン - Gmail ヘルプ
メールの保存先となるラベルを作成できます。メールにはいくつでもラベルを追加できます。 注: ラベルはフォルダとは異なります。メールを削除すると、そのメールに適用されたすべてのラベルと受信トレイから消去されます。 ラベルを作成する 注:

受信メールをポチポチ手動でラベルをつけることも可能ですが、ほとんどの場合、フィルタ機能を使って、ラベル付与作業を自動化します。(フィルタの作成方法は割愛させていただきます。) 

このラベル機能を使うことで、Gmail処理のGASが、とてもかんたんになりますので、活用していきましょう。

今回は、メールの件名に「ノンプロ研」というキーワードが入っている受信メールの処理(本文をPDFにする、添付ファイルを保存する、など)を想定します。 

受信メールには、3つのスレッドと、それぞれにメッセージが格納されている、という状況でございます。 

ラベルを取得しよう

Google Wordspace ServicesのGmailでは、GmailLabelオブジェクトが提供されています。

トップレベルオブジェクトであるGmailAppクラスの、getUserLabelByName()メソッドで、GmailLabelオブジェクトを取得できます。

引数にラベル名を渡して、GmailLabelオブジェクトを変数に格納しましょう。

const labelObject = GmailApp.getUserLabelByName('ノンプロ研');

ラベルからスレッド配列を取得しよう

GmailLabelオブジェクトから、スレッドの配列を取得できます。(スレッドが1つしかないときも配列なので気を付けましょう)

GmailLabelクラスには、getThreads(start, max)メソッドが提供されています。

第1引数のstartで、開始スレッドのインデックス、第2引数のmaxで、最終取得スレッドのインデックスを指定できます。受信メールが多い場合は、スレッドの範囲を指定しないと、毎回すべてのスレッドを取得しますので、処理が重たくなります。

開始スレッドのインデックスは0(1番目)でいいでしょう。最終取得スレッドのインデックスは、10程度でよいでしょう(受信メールの頻度によります)。

取得したスレッド配列を変数に格納しましょう。

const threads = labelObject.getThreads(0, 10);
console.log(threads.length); //3

スレッド配列からメッセージ配列を取得しよう

各スレッドには、メッセージが格納されていましたよね。

なので、GmailThreadオブジェクトから、メッセージの配列を取得できます。(メッセージが1つしかないときも配列です)

GmailThreadクラスには、getMessages()メソッドが提供されています。

取得したメッセージ配列を1次元化して、変数に格納しましょう。

const messages = threads.map(thread => thread.getMessages()).flat();
console.log(messages.length); //6

変数messagesには、ラベルに格納されているメッセージがすべて配列の要素として格納されているので、その後の処理が楽になります。

  for (const message of messages) {
    console.log(message.getPlainBody());
  }

  //ノンプロ研で、お忘れ物があるようです。(略)
  //まだ持ち主が見つかっていないようです。(略)
  //見つかったようです!(略)
  //ノンプロ研では新しい講座が始まります。(略)
  //下記URLからPDFをダウンロードしてください!(略)
  //先ほどのメールに誤りがありました。(略)

まとめ

以上で、「Gmail検索にラベル機能を使おう」をお届けしました。

Gmailのメッセージを処理するときは、スレッドとメッセージが複雑に絡み合い、インデックスでつまづくことが多いです。

threads[0][1]だっけ、message[1]だっけ、という感じですね。

しかしながら、Gmailの処理は、メッセージ単位で行うことがほとんどだと思います。

ラベル機能、ぜひ活用してみてください。

Githubリポジトリ

この記事のコード全文は、GithubにUPしています。

GitHub - tsujike/-Blog-GmailLabelObject: [Blog]Gmail検索にラベル機能を使おうのコードです
Gmail検索にラベル機能を使おうのコードです. Contribute to tsujike/-Blog-GmailLabelObject development by creating an account on GitHub.

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

[Effective Google Apps Script]GASユーザー必見!新シリーズのご紹介!
どうも。つじけ(tsujikenzo)です。今日は、2022年1月に始まりましたブログの新シリーズについてご紹介いたします。また、この記事を、シリーズのまとめページとしても運用させていただきます。目次(これまでに公開された...
タイトルとURLをコピーしました