見出し画像

【GAS】でGmailのラベルを使いこなす!GmailLabelクラス編


GmailLabel クラスとは

ある特定のメールの一連のやり取りのまとまりである「スレッド(thread)」を分類などをして整理するために、ラベル(label)というものがあります。
このラベル(label)は、一つのスレッド(thread)に対して複数のラベルを付けることができます。
例えば、緊急を用する仕入れ先からの問い合わせに関するやり取りが収まっているスレッドに対して「仕入れ先」と「緊急」のラベルを付けておくなどありそうですね。

なおこの記事では、このラベル自体をオブジェクトとして管理できるクラスである「GmailLabel」クラスを紹介します。

GmailLabel の構造

ラベル(label)にある情報は、

  • ラベル名

  • このラベルが付いているスレッド(GmailThread クラスのオブジェクト)

必要な事前知識と注意点

この記事で説明するにあたり、事前に知っておきたい用語などの知識があります。

スレッド(Thread)やメッセージ(Message)

すでに出てきていますが、GoogleAppsScript における Gmail の「スレッド」と「メッセージ」の考え方が理解する上で重要なものになります。
ここでは、簡単に説明しますが、こちらでより詳しく説明しましたので、ぜひご参照ください。

「スレッド(Thread)」とは、メール単体(メッセージ)のまとまったものであり、その関係性はお互いに返信しあった一連のやり取りのものです。

「メッセージ(Message)」とは、一通のメールのことであり、上のスレッドのやり取りの中の一つになります。

GoogleAppsScript で Gmail を扱う場合も特に、「スレッド(Thread)」単位での操作が主になります。

GmailLabel のオブジェクトの取得

「GmailLabel クラス」のオブジェクトを使う前に、そのオブジェクトを取得しなければなりませんが、ここでは、それぞれ他のクラスから「GmailLabel クラス」のオブジェクトの取得の仕方を紹介したいと思います。
それでは、ぞれぞれのクラスごとに見て見ましょう。

GmailApp クラスから

新しいラベルの作成、既存のラベルの取得ができます。

新しいラベルの作成

GmailApp.createLabel(ラベル名)

引数:ラベル名(文字列)
戻り値:作成されたラベル(GmailLabel クラスのオブジェクト)

let newLabelObject = GmailApp.createLabel('仕事’);

ラベル名からラベルのオブジェクトの取得

GmailApp.getUserLabelByName(ラベル名)

引数:ラベル名(文字列)
戻り値:ラベル名のラベル(GmailLabel クラスのオブジェクト)

let labelObject = GmailApp.getUserLabelByName('仕事');

全ての作成したラベルの取得

GmailApp.getUserLabels()

引数:無し
戻り値:作成された全てのラベル(GmailLabel クラスのオブジェクトのリスト)

let labelObjectList = GmailApp.getUserLabels();

GmailThread クラスから

特定のスレッド(thread)が付けられている全てのラベルを取得

GmailThread クラスのオブジェクト.getLabels()

引数:無し
戻り値:スレッドに付いている全てのラベル(GmailLabel クラスのオブジェクトのリスト)

let labelObjectList = threadObject.getLabels();

GmailLabel オブジェクトのメソッド

取得した「GmailLabel クラス」(ラベル)のオブジェクトでできること(メソッド)を紹介していきます。

GmailLabel 情報の取得

ラベル名の取得

.getName()

引数:無し
戻り値:ラベル名(文字列)

console.log(labelObject.getName()); // → ’仕事’

ラベルが付けられているスレッドの中で未読数の取得

.getUnreadCount()

引数:無し
戻り値:ラベルが付いたスレッドの未読数(整数)

console.log(labelObject.getUnreadCount()); // → 3

ラベルが付けられている全てのスレッドを取得

.getThreads()

引数:無し
戻り値:そのラベルが付いてるスレッドたち(GmailThread クラスのオブジェクトのリスト)

let labeledThreadList = labelObject.getThreads();

ラベルが付けられている指定範囲内のスレッドを取得

.getThreads(開始位置、終了位置)

引数:
 取得を開始したい位置(整数)
 取得を終了したい位置(整数)

戻り値:指定範囲内のラベルが付けられているスレッドたち(GmailThread クラスのオブジェクトのリスト)

// ラベルが付いているスレッドたちの中で新しいスレッドの1番目から10番目までを取得
let labeledThreadList = labelObject.getThreads(0, 10);

スレッドのラベル管理

スレッドにラベルを付ける

【一つのスレッドに付ける】

.addToThread(スレッド)

引数:ラベルをつけたいスレッド(GmailThread クラスのオブジェクト)
戻り値:付けたラベル(GmailLabel クラスのオブジェクト)

※ 注意点
詳しい理由は分かりませんが、この操作を行ったら合わせてラベルが付けられたスレッドのオブジェクトに対して「.refresh()」をするよう書かれています。

labelObject.addToThread(threadObject);

// ラベルが付けられたスレッドの情報を反映
threadObject.refresh();

【複数のスレッドに付ける】

.addToThreads(スレッドのリスト)

引数:ラベルをつけたいスレッドたち(GmailThread クラスのオブジェクトのリスト)
戻り値:付けたラベル(GmailLabel クラスのオブジェクト)

※ 注意点
詳しい理由は分かりませんが、この操作を行ったら合わせてラベルが付けられたスレッドたちのオブジェクトに対して「.refresh()」をするよう書かれています。

labelObject.addToThread(threadObjectList);

// ここでラベルが付けられた全てのスレッドの情報を反映
threadObjectList.forEach((threadObject)=>{threadObject.refresh()});

スレッドからラベルをとる

【一つのスレッドからとる】

.removeFromThread(スレッド)

引数:ラベルをとりたいスレッド((GmailThread クラスのオブジェクト)
戻り値:とったラベル(GmailLabel クラスのオブジェクト)

※ 注意点
詳しい理由は分かりませんが、この操作を行ったら合わせてラベルがとられたスレッドのオブジェクトに対して「.refresh()」をするよう書かれています。

labelObject.removeFromThread(threadObject);

// ラベルが取られたたスレッドの情報を反映
threadObject.refresh();

【複数のスレッドからとる】

.removeFromThreads(スレッドのリスト)

引数:ラベルをとりたいスレッドたち((GmailThread クラスのオブジェクトのリスト)
戻り値:とったラベル(GmailLabel クラスのオブジェクト)

※ 注意点
詳しい理由は分かりませんが、この操作を行ったら合わせてラベルがとられたスレッドたちのオブジェクトに対して「.refresh()」をするよう書かれています。

labelObject.removeFromThreads(threadObjectList);

// ここでラベルがとられた全てのスレッドの情報を反映
threadObjectList.forEach((threadObject)=>{threadObject.refresh()});

ラベル自体を削除する

.deleteLabel()

引数:無し
戻り値:無し

labelObject.deleteLabel();

この記事が気に入ったらサポートをしてみませんか?