見出し画像

【GAS】でGmailのメッセージを使いこなす!GmailMessageクラス編

GoogleAppsScript で Gmail を扱うための中で、この記事では「メッセージ(Message)」のことについて説明しています。


GmailMessage クラスとは

Gmail において一通のメールにあたるものが、メッセージ(Message)になり、これをオブジェクトとして扱えるのが、「GmailMessage」クラスです。

GmailMessage の位置付け

GoogleAppsScript にて、「GmailMessage クラス」が扱う Gmail の「メッセージ(Message)」とは、「スレッド(Thread)」と呼ばれる一連のやり取りがまとまったものの中の、一通のメールをメッセージと呼ばれます。

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

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

GmailMessage の構造

GmailMessage クラスで扱う「メッセージ(Message)」の構造としてまずは大きく分けて3つからなります。

  • メール的要素(宛先、件名、本文など)

  • ステータス情報(スターマーク、既読情報、ゴミ箱か)

  • 変更不可能な付属情報(日時、スレッドなど)

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

メール的要素

メール的要素とは、メール本来のものを構成している要素になり、下の4つから成ります。

  • メールアドレス
        宛先(To):必須
        差出元(From):必須
        指定返信先(ReplyTo):任意
         Cc(cc):任意
         Bcc(bcc):任意

  • 件名:必須

  • 本文:必須

  • 添付データ:任意

なお指定返信先とは、本来、返信先は差出元になりますが、意図的に他に返信させる際に送信者が指定できる返信先となります。

ステータス情報

ステータスは、そのメッセージ(メール)の状態の情報になり下の3つあります。

  • スターマーク(重要なものや、頻繁に参照するものの目印)

  • 既読状態(既読したものか、まだなのかの情報)

  • 破棄(ゴミ箱にあるかそうで無いかの情報)

変更不可能な付属情報

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

  • ID(それぞれのメッセージを識別するための固有の ID)

  • 日時

  • メッセージが下書きのものかそうで無いか

  • スレッド(Thread)関係
        メッセージを含んでいるスレッド(Thread)
        メッセージを含んでいるスレッドが受信トレイ(Inbox)にあるかどうか
        メッセージを含んでいるスレッドが重要(PriorityInbox)とされているかどうか

GmailMessage のオブジェクトの取得

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

GmailApp クラスから

メッセージの ID からメッセージ(Message)のオブジェクトの取得、スレッド(Thread)に含まれているメッセージ(Message)の取得や下書きメッセージ(Draft)からのメッセージ(Message)の取得できます。

メッセージの ID からメッセージのオブジェクトを取得

GmailApp.getMessageById(メッセージの ID)

引数:メッセージの ID(文字列)
戻り値:ID に該当したメッセージ(GmailMessage クラスのオブジェクト)

let messageObject = GmailApp.getMessageById('/*message id*/');

スレッドに含まれる全てのメッセージを取得

GmailApp.getMessagesForThreads(対象のスレッドたち)

引数:対象のスレッドたち(GmailThread クラスのオブジェクトのリスト)
戻り値:スレッドごとのメッセージたち(GmailMessage の二次元配列)

let messagesForThreads = GmailApp.getMessagesForThreads(threadsList);

全ての下書きメッセージが持っているメッセージの取得

下書きのメッセージのクラスである「GmailDraft クラス」のオブジェクトには、宛先、件名や本文の情報を持っているメッセージ(Message)クラスのオブジェクトを持っているので、それを取得します。
以下のメソッドでは、既存の全ての下書きメッセージのメッセージ(Message)のオブジェクトを取得します。

GmailApp.getDraftMessages()

引数:無し
戻り値:全ての下書きが持っているメッセージ(GmailMessage クラスのオブジェクトのリスト)

let draftMessageObjectList = GmailApp.getDraftMessages();

GmailThread クラスから

スレッド(Thread)が持っている一連のやり取りのメッセージ(Message)を取得します。

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

GmailThread.getMessages()

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

let messageObjectList = threadObject.getMessages();

GmailDraft クラスから

下書きメッセージ(Draft)からメッセージ(Message)を取得

上記でも書きましたが、下書きのメッセージのクラスである「GmailDraft クラス」のオブジェクトには、宛先、件名や本文の情報を持っているメッセージ(Message)クラスのオブジェクトを持っているので、それを取得します。

GmailDraft クラスのオブジェクト.getMessage()

引数:無し
戻り値:下書きに対するメッセージ(GmailMessage クラスのオブジェクト)

let draftMessageObject = draftObject.getMessage();

下書きメッセージ(Draft)を送信して送信済みのメッセージとして取得

GmailDraft クラスのオブジェクト.send()

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

let sentMessageObject = draftObject.send();

GmailMessage クラスのメソッド

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

メール的要素の取得

メールアドレス関連

以下では、メッセージ(Message)に含まれる各メールアドレスを取得します。
各メールアドレスには、宛先(To)、差出元(From)、指定返信先(ReplyTo)や Cc、Bcc がありますが、取得方法と戻り値として全てメールアドレスの文字列であるためまとめて説明させて頂きます。

  • 宛先(To)

.getTo()

  • 差出元(From)

.getFrom()

  • 指定返信先(ReplyTo)

.getReplyTo()

  • Cc

.getCc()

  • Bcc

.getBcc()

引数:無し
戻り値:メールアドレス(文字列)

console.log(messageObeject.getCc()); // → 'sample_A@e_mail.com, sample_B@e_mail.com'

件名の取得

.getSubject()

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

console.log(messageObject.getSubject()); // → 'テストメール'

本文の取得

.getBody()

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

console.log(messageObject.getBody()); // → 'こんにちは、初めまして、よろしくお願いします。'

添付データの取得

.getAttachments()

引数:無し
戻り値:添付データ(GmailAttachment クラスのオブジェクトのリスト)

let attachmentObjectList = messageObject.getAttachments();

メッセージのステータス情報の管理

メッセージの重要性、既読状態や破棄状況の管理を行います。

メッセージの重要性を管理(スターマーク)

メッセージが重要であったり頻繁に参照するものとしての目印としてスターマークを付与できます。

  • メッセージにスターマークがついているかどうか

.isStarred()

引数:無し
戻り値:スターマークがついている場合は true、無い場合は false(ブール値)

console.log('このメッセージにスターがついているか?:' + messageObject.isStarred()); // → 'このメッセージにスターがついているか?:true'
  • メッセージにスターマークをつける

.star()

引数:無し
戻り値:スターがつけられたメッセージ(GmailMessage クラスのオブジェクト)

messageObject.star();
  • メッセージからスターマークを取る

.unstar()

引数:無し
戻り値:スターが取られたメッセージ(GmailMessage クラスのオブジェクト)

messageObject.unstar();

メッセージの既読状態の管理

メッセージ単体が既読されているかまだ未読かの状態を取得したり、メッセージを既読にしたり、未読の状態にします。

  • メッセージが未読の状態かどうか

.isUnread()

引数:無し
戻り値:未読の場合は true、既読済みの場合は false(ブール値)

console.log('このメッセージにまだ未読か?:' + messageObject.isUnread()); // → 'このメッセージにまだ未読か?:false'
  • メッセージを既読済みにする

.markRead()

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

messageObject.markRead();
  • メッセージを未読状態にする

.markUnread()

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

messageObject.markUnread();

メッセージの破棄状態の管理

メッセージ単体が破棄されているかどうかの情報の取得や、メッセージを破棄したりします。

  • メッセージが破棄されているかどうか

.isInTrash()

引数:無し
戻り値:破棄されているの場合は true、破棄されていないの場合は false(ブール値)

console.log('このメッセージは破棄されているか?:' + messageObject.isInTrash()); // → 'このメッセージは破棄されているか?:true'
  • メッセージを破棄する

.moveToTrash()

引数:無し
戻り値:破棄されたメッセージ(GmailMessage クラスのオブジェクト)

messageObject.moveToTrash();

メッセージの変更不可な情報の取得

メッセージの ID の取得

.getId()

引数:無し
戻り値:メッセージの ID(文字列)

console.log(messageObject.getId()); // → ’1heme8esahemple8d6588c7hhgbdf’

メッセージの日時を取得

.getDate()

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

console.log(messageObject.getDate().toLocalString()); // → '4/18/2024, 9:13:36 AM'

メッセージが下書きの状態のものかどうか

.isDraft()

引数:無し
戻り値:下書き状態なら ture、出なければ false(ブール値)

console.log('このメッセージは下書きの状態ですか?:' + messageObject.isDraft()); // → 'このメッセージは下書きの状態ですか?:true'

スレッド(thread)に関連する情報の取得

  • そのメッセージを含むスレッド(GmailThread クラスのオブジェクト)の取得

.getThread()

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

let threadObject = messeageObject.getThread();
  • メッセージを含むスレッドが受信トレイ(Inbox)にあるかどうか

.isInInbox()

引数:無し
戻り値:メッセージを含むスレッドが受信トレイにあるならなら ture、なければ false(ブール値)

console.log('このメッセージを含むスレッドは受信トレイにありますか?:' + messageObject.isInInbox()); // → 'このメッセージを含むスレッドは受信トレイにありますか?:false'
  • メッセージを含むスレッドが Gmail によって重要と位置付けられた(PriorityInbox)状態にあるか

.isInPriorityInbox()

引数:無し
戻り値:メッセージを含むスレッドが Gmail に重要であるとされているなら ture、でなければ false(ブール値)

console.log('このメッセージを含むスレッドは重要とされていますか?:' + messageObject.isInPriorityInbox()); // → 'このメッセージを含むスレッドは重要とされていますか?:true'

メッセージへの返信

メッセージへの返信または返信メールの下書きの作成を行います。

メッセージへの返信

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

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

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

戻り値:返信が完了した元のメッセージ(GmailMessage クラスのオブジェクト)

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

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

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

戻り値:返信が完了した元のメッセージ(GmailMessage クラスのオブジェクト)

let updatedMessageObject = messageObject.replyAll('メッセージへ自動返信しました。');

メッセージへの返信メールの下書きの作成

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

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

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

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

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

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

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

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

let updatedMessageObject = messageObject.createDraftReplyAll('メッセージへ返信メールの下書きを作成しました。');

メッセージを転送

.forward(転送先)

引数:転送先のメールアドレス(文字列)
戻り値:転送した元のメッセージ(GmailMessage クラスのオブジェクト)

// 'sample_A@e_mail.com''samlpe_B@e_mail.com'宛にメッセージを転送
messageObject.forwand('sample_A@e_mail.com, samlpe_B@e_mail.com');

その他

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

.refresh()

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

messageObject.refresh();

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