見出し画像

【GAS】でGmailのスレッドを使いこなす!GmailThreadクラス編

GoogleAppsScript で Gmail を扱うための中で、この記事では「スレッド(Thread)」のことについて説明しています。


GmailThread クラスとは

Gmail にて一連のやり取りのメール(メッセージ)のまとまりをスレッド(Thread)となりますが、それをオブジェクトとして扱えるのが、「GmailThread」クラスです。

GmailThread の位置付け

GoogleAppsScript にて、「GmailThread クラス」が扱う「スレッド(Thread)」とは、上でもあるように、一連のやりとりのメール(メッセージ)を一つのまとまったものとなります。
一連のやり取りとは、それぞれお互いのメール(メッセージ)が返信し合っている関係となります。

また、GoogleAppsScript で Gmail を扱うにあたり、この「スレッド(Thread)」ごとの扱いが基本になります。

Gmail を扱う上で、この「スレッド(Thread)」と「メッセージ(Message)」の考え方の理解が重要なものになります。
これらのことをより詳しく説明した記事がありますので、ぜひご参照下さい。

GmailThread の構造

GmailThread クラスで扱う「スレッド(Thread)」の構成している情報は、大きく分けて4つになります。

  • 一連のやり取りのメッセージ(Message)の集合

  • スレッドの置かれている場所

  • ステータス情報(ラベル、重要性、既読したかどうかなど)

  • 変更不可能な付属情報(ID、最後のメッセージの日時など)

各項目ごとに詳しく見てみましょう。

一連のやり取りのメッセージ(Message)の集合

ここはそのままなのですが、スレッド(Thread)が抱えている、一連のやり取りの全ての「メッセージ(Message)」があります。

スレッドが置かれている場所

スレッドはいずれかの場所に置かれています。

  • 受信トレイ(Inbox)

  • アーカイブ(Archive)

  • ゴミ箱(Trash)

  • 迷惑メール(Spam)

ステータス情報

ステータスは、そのスレッドの状態の情報になり下の3つからなります。

  • ラベル(スレッドを分類、整理できるタグのようなもの)

  • 既読状態(スレッド内のメッセージが既読されているかどうか)

  • 重要性(そのスレッドが重要か、もしくはスレッドが重要な相手からのものかどうか)

変更不可能な付属情報

そのスレッドが持っている情報になります。
項目名にもあるように、この情報には変更などの手を加えることができず、取得のみとなります。

  • ID(それぞれのスレッドを識別するための固有の ID)

  • リンク(スレッドをブラウザなどで閲覧するための URL(Permalink))

  • スレッドが Gmail によって重要なものかまたは重要な差出人からのものかを判定されたもの(PriorityInbox)

  • メッセージ(Messege)関連の情報
        最終メッセージの日時
        初期メッセージの件名
        スレッド内にスターマーク(重要性の目印)が付いたメッセージを含んでいるかどうか

GmailThread のオブジェクトの取得

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

GmailApp クラスから

受信トレイ(Inbox)、ゴミ箱(Trash)や迷惑メール(Spam)にあるスレッドの取得や検索条件を指定しての取得、直接 ID を指定してスレッドを取得できます。

スレッドの ID からスレッドのオブジェクトを取得

GmailApp.getThreadById(スレッドの ID)

引数:スレッドの ID(文字列)
戻り値:ID に該当したスレッド(GmailThread クラスのオブジェクト)

let threadObject = GmailApp.getThreadById('hehm-sample74-threadID0x');

スレッドの検索

検索条件を指定し、該当するスレッドを取得できます。
検索条件の指定の仕方は、Google の公式のサイトで確認してみてください。

  • 検索条件に合う全てのスレッドを取得

GmailApp.search(検索条件)

引数:検索条件(文字列)
戻り値:条件に該当したスレッドたち(GmailThread クラスのオブジェクトのリスト)

// 'sample@e_mail.com'のアドレスから届いた、2024年以降のスレッドを取得
let threadObjectList = GmailApp.search('from:sample@e_mail.com after:2024/01/01');
  • 検索条件に合った中で指定範囲内のスレッドを取得

GmailApp.search(検索条件、開始位置、終了位置)

引数:
  検索条件(文字列)
  条件に該当したスレッドから取得を開始したい位置(整数)
  条件に該当したスレッドから取得を終了したい位置(整数)

戻り値:条件に該当し、指定範囲内のスレッドたち(GmailThread クラスのオブジェクトのリスト)

// スレッドの検索条件として'sample@e_mail.com'のアドレスから届いた、2024年以降で、
// 該当した内の1番目から10番目までのスレッドを取得
let threadObjectList = GmailApp.search('from:sample@e_mail.com after:2024/01/01', 0, 10);

受信トレイ(Inbox)内のスレッドの取得

  • 全てのスレッドを取得

GmailApp.getInboxThreads()

引数:無し
戻り値:受信トレイ内の全てのスレッド(GmailThread クラスのオブジェクトのリスト)

let inboxThreadList = GmailApp.getInboxThreads();
  • 指定範囲内のスレッドの取得

GmailApp.getInboxThreads(開始位置、終了位置)

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

戻り値:受信トレイ内の指定範囲内のスレッドたち(GmailThread クラスのオブジェクトのリスト)

// 受信トレイ内の新しいスレッドの1番目から10番目までを取得
let inboxThreadList = GmailApp.getInboxThreads(0, 10);

ゴミ箱(Trash)内のスレッドの取得

  • 全てのスレッドを取得

GmailApp.getTrashThreads()

引数:無し
戻り値:ゴミ箱の全てのスレッド(GmailThread クラスのオブジェクトのリスト)

let trashThreadList = GmailApp.getTrashThreads();
  • 指定範囲内のスレッドの取得

GmailApp.getTrashThreads(開始位置、終了位置)

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

戻り値:ゴミ箱の内の指定範囲内のスレッド(GmailThread クラスのオブジェクトのリスト)

// ゴミ箱内の新しいスレッドの1番目から10番目までを取得
let trashThreadList = GmailApp.getTrashThreads(0, 10);

迷惑メール(Spam)内のスレッドの取得

  • 全てのスレッドを取得

GmailApp.getSpamThreads()

引数:無し
戻り値:迷惑メールの全てのスレッド(GmailThread クラスのオブジェクトのリスト)

let spamThreadList = GmailApp.getSpamThreads();
  • 指定範囲内のスレッドの取得

GmailApp.getSpamThreads(開始位置、終了位置)

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

戻り値:迷惑メールの内の指定範囲内のスレッド(GmailThread クラスのオブジェクトのリスト)

// 迷惑メール内の新しいスレッドの1番目から10番目までを取得
let spamThreadList = GmailApp.getSpamThreads(0, 10);

スターマークのメッセージを含んだスレッドの取得

  • 全てのスレッドを取得

GmailApp.getStarredThreads()

引数:無し
戻り値:スターマークが付いたメッセージを含んだスレッドの全てのスレッド(GmailThread クラスのオブジェクトのリスト)

let starredThreadList = GmailApp.getStarredThreads();
  • 指定範囲内のスレッドの取得

GmailApp.getStarredThreads(開始位置、終了位置)

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

戻り値:スターマークが付いたメッセージを含んだスレッド内の指定範囲のスレッド(GmailThread クラスのオブジェクトのリスト)

// スターマークのメッセージを含んだスレッドたちの中で新しいスレッドの1番目から10番目までを取得
let starredThreadList = GmailApp.getStarredThreads(0, 10);

GmailMessage クラスから

GmailMessage クラスのオブジェクトからは、そのメッセージを含むスレッド(GmailThread クラスのオブジェクト)を取得できます。

GmailMessage クラスのオブジェクト.getThread()

引数:無し
戻り値:メッセージを含んだスレッド(GmailThread クラスのオブジェクト)

let threadObject = messeageObject.getThread();

GmailLabel クラスから

GmailLabel クラスのオブジェクトからは、そのラベルが付けられているスレッドを取得できます。

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

GmailLabel クラスのオブジェクト.getThreads()

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

let labeledThreadList = labelObject.getThreads();
  • ラベルが付けられている指定範囲内のスレッドを取得

GmailLabel クラスのオブジェクト.getThreads(開始位置、終了位置)

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

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

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

GmailThread クラスのメソッド

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

スレッドの置かれている場所の管理

スレッドが置かれている場所とは、受信トレイ(Inbox)、アーカイブ(Archive)、ゴミ箱(Trash)か迷惑メール(Spam)のいずれかの場所を指します。
スレッドは、常にこのいずれかに置かれ、受信したメールは、迷惑メールと判定されなければ全て一旦「受信トレイ(Inbox)」に置かれ、その後ユーザーによりいらないものはゴミ箱(Trash)に移し、それ以外は処理し、完了したらアーカイブに移す流れとなります。
ここでは、GoogleAppsScript でスレッドの保管場所の管理の仕方(メソッド)を紹介します。

受信トレイ(Inbox)に関して

  • スレッドが受信トレイ(Inbox)にあるかどうか

.isInInbox()

引数:無し
戻り値:受信トレイ(Inbox)にスレッドがあれば true、違うところであれば false(ブール値)

console.log('スレッドは受信トレイにあるか?:' + threadObject.isInInbox()); // 'スレッドは受信トレイにあるか?:false'
  • スレッドを受信トレイ(Inbox)に移す

.moveToInbox()

引数:無し
戻り値:受信トレイに移されたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.moveToInbox();

アーカイブ(Archive)に関して

  • スレッドをアーカイブ(Archive)に移す

.moveToArchive()

引数:無し
戻り値:アーカイブ(Archive)に移されたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.moveToArchive();

ゴミ箱(Trash)に関して

  • スレッドがゴミ箱(Trash)にあるかどうか

.isInTrash()

引数:無し
戻り値:ゴミ箱(Trash)にスレッドがあれば true、違うところであれば false(ブール値)

console.log('スレッドはゴミ箱にあるか?:' + threadObject.isInTrash()); // 'スレッドはゴミ箱にあるか?:false'
  • スレッドをゴミ箱(Trash)に移す

.moveToTrash()

引数:無し
戻り値:ゴミ箱に移されたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.moveToTrash();

迷惑メール(Spam)に関して

  • スレッドが迷惑メール(Spam)にあるかどうか

.isInSpam()

引数:無し
戻り値:迷惑メール(Spam)にスレッドがあれば true、違うところであれば false(ブール値)

console.log('スレッドは迷惑メールとされているか?:' + threadObject.isInSpam()); // 'スレッドは迷惑メールとされているか?:false'
  • スレッドを迷惑メール(Spam)に移す

.moveToSpam()

引数:無し
戻り値:迷惑メールに移されたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.moveToSpam();

スレッドのステータス情報の管理

スレッドのラベル、重要性や既読状況の情報の取得や変更が行えます。

スレッドのラベルの管理

  • スレッドに付けられた全てのラベルを取得

.getLabels()

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

let labelObjectList = threadObject.getLabels();
  • スレッドにラベルを追加する

.addLabel(追加するラベル)

引数:追加するラベル(GmailLabel クラスのオブジェクト)
戻り値:ラベルが追加されたスレッド(GmailThread クラスのオブジェクト)

let updetedThreadObject = threadObject.addLabel(labelObject);
  • スレッドから特定のラベルを取り除く

.removeLabel(取り除くラベル)

引数:取り除くラベル(GmailLabel クラスのオブジェクト)
戻り値:ラベルが取り除かれたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.removeLabel(labelObject);

スレッドの重要性の管理

  • スレッドが重要とされているかどうか

.isImportant()

引数:無し
戻り値:スレッドが重要であれば ture、重要でなければ false(ブール値)

console.log('このスレッドは重要か?:' + threadObject.isImportant()); // 'このスレッド重要か?:true'
  • スレッドが Gmail によって重要と判断されたものかどうか

.isInPriorityInbox()

引数:無し
戻り値:スレッドが Gmail によって重要と判断されたら ture、出なければ false(ブール値)

console.log('スレッドが Gmail によって重要と判断されたものか?:' + threadObject.isInPriorityInbox()); // 'スレッドが Gmail によって重要と判断されたものか?:false'
  • スレッドが重要であるとする

.markImportant()

引数:無し
戻り値:重要とされたスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.markImportant();
  • スレッドが重要でないとする

.markUnimportant()

引数:無し
戻り値:重要となされなかったスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.markUnimportant();

スレッドの既読状態の管理

  • スレッドが未読かどうか

.isUnread()

引数:無し
戻り値:スレッドが未読なら ture、既読なら false(ブール値)

console.log('スレッドが未読か?:' + threadObject.isUnread()); // → 'スレッドが未読か?:true'
  • スレッドを既読状態にする

.markRead()

引数:無し
戻り値:既読状態になったスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.markRead();
  • スレッドを未読状態にする

.markUnread()

引数:無し
戻り値:未読状態になったスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.markUnread();

スレッドの変更不可な情報の取得

スレッドの ID の取得

.getId()

引数:無し
戻り値:スレッドの ID(文字列)

console.log(threadObject.getId()); // → ’18esample8d6588c7hhgbdf’

スレッドの URL の取得

スレッドをブラウザなどからアクセスできる URL を取得できます。

.getPermalink()

引数:無し
戻り値:Permalink の URL(文字列)

console.log(threadObject.getPermalink()); // → ’https://mail.google.com/mail?extsrc=sync&client=docs&plid=ACUX6DMNncoXXO35YezG6fJAWwe0YKAseUs8ehoghgsample'

メッセージ(Message)に関連する情報の取得

  • スレッドにある全てのメッセージ(Message)の取得

.getMessages()

引数:無し
戻り値:全てのメッセージ(GmailMessage クラスのオブジェクト)

let messageObjectList = threadObject.getMessages();
  • スレッドにあるメッセージ(Message)の数の取得

.getMessageCount()

引数:無し
戻り値:メッセージの数(整数)

console.log(threadObject.getMessageCount()); // → '5'
  • スレッドの最初のメッセージの件名を取得

.getFirstMessageSubject()

引数:無し
戻り値:最初の件名(文字列)

console.log(threadObject.getFirstSubject()); // → '花見の会の開催に関して'
  • スレッドの最新(最後)のメッセージの日時の取得

.getLastMessageDate()

引数:無し
戻り値:最新のメッセージの日時(Date クラスのオブジェクト)

console.log(threadObject.getLastMessageDate().toLocalString()); // → '4/18/2024, 9:13:36 AM'
  • スレッドの中でスターマークがついたメッセージが一つでもあるかどうか

.hasStarredMessages()

引数:無し
戻り値:スレッドの中に一つでもスターマークがあれば true, 一つもなければ false(ブール値)

console.log('このスレッドにスターマークがついたメッセージを含んでいるか?:' + threadObject.hasStarredMessages()); // → 'このスレッドにスターマークがついたメッセージを含んでいるか?:ture'

スレッドへの返信

スレッドへの返信として、スレッドの中の最新(最後)のメッセージ(Message)への返信、または返信メールの下書きの作成を行います。

スレッドの最新(最後)のメッセージ(Message)への返信

  • メッセージの送信者または指定された返信先(replyTo)への返信

.reply(本文, (オプション(任意))

引数:
  本文(文字列)
  オプション(辞書型)(メールのオプションに関してはこちら

戻り値:返信が完了したスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.reply('スレッドへ自動返信しました。');
  • メッセージの送信者または指定された返信先(replyTo)と、そのメッセージの受信者全てへの返信

.replyAll(本文, (オプション(任意))

引数:
  本文(文字列)
  オプション(辞書型)(メールのオプションに関してはこちら

戻り値:返信が完了したスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.replyAll('スレッドへ自動返信しました。');

スレッドの最新(最後)のメッセージ(Message)への返信メールの下書きの作成

  • メッセージの送信者または指定された返信先(replyTo)への返信メールの下書きの作成

.createDraftReply(本文, (オプション(任意))

引数:
  本文(文字列)
  オプション(辞書型)(メールのオプションに関してはこちら

戻り値:返信メールの下書きの作成が完了したスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.createDraftReply('スレッドへ返信メールの下書きを作成しました。');
  • メッセージの送信者または指定された返信先(replyTo)と、そのメッセージの受信者全てへの返信メールの下書きの作成

.createDraftReplyAll(本文, (オプション(任意))

引数:
  本文(文字列)
  オプション(辞書型)(メールのオプションに関してはこちら

戻り値:返信メールの下書きの作成が完了したスレッド(GmailThread クラスのオブジェクト)

let updatedThreadObject = threadObject.createDraftReplyAll('スレッドへ返信メールの下書きを作成しました。');

その他

GoogleAppsScript 上で、スレッドのオブジェクトを最新の状態と同期しておくためのメソッドです。

.refresh()

引数:無し
戻り値:リフレッシュされたスレッド(GmailThread クラスのオブジェクト)

threadObject.refresh();

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