見出し画像

【GAS】でGmailを使いこなす!GmailAppクラス編

GoogleAppsScript を使って自動的にメールを送信したり、定期的に特定のメールを探して処理を行ったりする為に、ここでは Gmail に関して普遍的な事ができるクラスであるGmailApp クラスの使い方、特にメソッドの紹介をして行きます。
なお、普遍的な事とは、メールを送信したり、メールを探したり、ラベル作成したりまたは取得したりできる事を指します。

また、GoogleAppsScript で Gmail で扱うのに際して、知っておいて頂きたい知識がございますので、ぜひ下のリンク先を読んで頂けたらと思います。
特に、Gmail を操作する際、メールを総じてスレッドやメッセージと呼ばれるもので管理されていることに留意してください。


GmailApp クラスでできること

GmailApp クラスを使ってできる事の概要を紹介します。
GmailApp クラスでは、下の項目に対して主に情報を得たり、編集ができます。

メッセージ(Message)
スレッド(Thread)
下書きのメッセージ(Draft)
ラベル(Label)

それぞれの項目に対してできることをもう少し深く見てみましょう。

  • メッセージ(Message)

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

  • スレッド(Thread)

メールの送信
スレッドの ID からスレッドのオブジェクトの取得
スレッドの検索
受信トレイ(Inbox)の情報取得
重要(Important または PriorityInbox)なスレッドの情報取得
スターマークが有効なメッセージを含んだスレッドの情報取得
ゴミ箱(Trash)や迷惑メール(Spam)のスレッドの取得

  • 下書きのメッセージ(Draft)

下書きメッセージの作成
下書きメッセージの ID から下書きのオブジェクトの取得

  • ラベル(Label)

新規ラベルの作成
既存の全てのラベルの取得

大まかに項目ごとにできる事を見てみました。
それでは以降で詳細と実際の使い方を紹介して行きます。

メッセージ(Message)

メッセージとは、スレッドの中の一通のメールでありますが、そのメッセージに対して行えることは、一つしかありません。
それは、事前にあるメッセージの ID を知っている場合、それからそのメッセージのオブジェクトを取得できるというものです。

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

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

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

let message = GmailApp.getMessageById('heghc9-sample8-messagId-he1x');

スレッド(Thread)

メールの送信(新規スレッドの作成)

GmailApp.sendEmail(宛先、件名、本文、(オブション))

引数:
 宛先のアドレス(文字列)
 件名(文字列)
 本文(文字列)
 オプション(辞書型)(任意)

戻り値:GmailApp クラスのオブジェクト

GmailApp.sendEmail('sample@gmail.com', 'GASで送信', 'このメールはGASによって自動的に送信されました。');

引数のオブションとは、添付ファイルの指定、Cc や Bcc などそのほかの情報を設定する場合に指定できます。
これは、任意であり指定しなくてもいいです。
また、メールの送信に関して詳しく書いた記事はこちら

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

GmailApp.getThreadById(スレッドの ID)

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

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

スレッドの検索

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

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

GmailApp.search(検索条件)

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

// 'sample@gmail.com'のアドレスから届いた、2024年以降のスレッドを取得
let threadList = GmailApp.search('from:sample@gmail.com after:2024/01/01');

検索条件に合った中の指定範囲内のスレッドを取得

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

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

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

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

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

受信トレイ(Inbox)内の情報の取得

受信した迷惑メール以外が一旦溜められる場所として「受信トレイ」がありますが、GoogleAppsScript または Gmail では、「Inbox」となります。
取得できる情報は受信トレイ内の、未読メッセージを含むスレッドの数の取得や、スレッド自体の取得ができます。

  • 受信トレイ(Inbox)内の未読のスレッドの数の取得

GmailApp.getInboxUnreadCount()

引数:無し
戻り値:受信トレイ内の未読スレッドの数(整数)

console.log(GmailApp.getInboxUnreadCount()); // -> "4" 4つのスレッドが未読

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

  • 全てのスレッドを取得

GmailApp.getInboxThreads()

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

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

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

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

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

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

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

重要(Important/PriorityInbox)なスレッドの情報の取得

重要なスレッドとは、基本的に重要な送り主からのメールがそれにあたります。
特に GoogleAppsScript 上では、ユーザーが重要と判断したスレッドを「Important」とマークし、Gmail 側が自動的にそうしたものを「PriorityInbox」とマークしています。
どちらも、意味合いは同じで、出所が違う形となり、取得する情報は双方の中からになります。

重要(Important/PriorityInbox)なスレッドの未読の数の取得

GmailApp.getPriorityInboxUnreadCount()

引数:無し
戻り値:重要なスレッドの未読数(整数)

console.log(GmailApp.getPriorityInboxUnreadCount()); // -> "4" 4つのスレッドが未読

重要(Important/PriorityInbox)なスレッドの取得

  • 全てのスレッドを取得

GmailApp.getPriorityInboxThreads()

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

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

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

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

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

// 重要ボックス内の新しいスレッドの1番目から10番目までを取得
let importantThreadList = GmailApp.getPriorityInboxThreads(0, 10);

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

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

スターマークのメッセージとは、スレッドに付けられる重要マークとは違い、スレッドの中のメッセージ個別に重要性や頻繁に閲覧する可能性の印としてつける事ができるものです。
そんなスターマークがついたメッセージが一つでも含まれるスレッドが対象となります。

スターマークのメッセージを含んだスレッドたちの未読のスレッドの数の取得

GmailApp.getStarredUnreadCount()

引数:無し
戻り値:未読スレッドの数(整数)

console.log(GmailApp.getStarredUnreadCount()); // -> "4" 4つのスレッドが未読

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

  • 全てのスレッドを取得

GmailApp.getStarredThreads()

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

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

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

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

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

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

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

迷惑メール(Spam)内の情報の取得

迷惑メールとされたスレッドの情報を取得していきます。

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

GmailApp.getSpamUnreadCount()

引数:無し
戻り値:迷惑メール内の未読スレッドの数(整数)

console.log(GmailApp.getSpamUnreadCount()); // -> "4" 4つのスレッドが未読

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

  • 全てのスレッドを取得

GmailApp.getSpamThreads()

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

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

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

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

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

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

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

ゴミ箱(Trash)内の情報の取得

ゴミ箱に入れたスレッドを取得します。

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

  • 全てのスレッドを取得

GmailApp.getTrashThreads()

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

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

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

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

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

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

範囲を指定する場合、スレッドの中で時系列において一番新しいものが 0 であり、それ以降は時系列的に新しいもの順に 0,1,2,3...と増えていきます。

下書きメッセージ(Draft)

新規に送信しようとしたメッセージや、返信しようとしたメッセージを一旦、保留にしたものが下書きとなります。
そんな下書きを作成したり、既存の下書きを取得したりできます。

なお、下書きを GoogleAppsScript で扱う際は、「GmailDraft クラス」を使います。
加えて、GmailDraft クラスのオブジェクトは、送信先アドレス、件名や本文の情報を保有するいわゆる一通のメールのクラスである「GmailMessage クラス」のオブジェクトを持っていることを覚えておいてください。

新たな送信メッセージの下書きを作成

引数の内容や添付データ、Cc や Bcc などを追加できるオプションの設定の仕方は、メールを送信するものと同じになります。
引数のオブションの設置は任意になっております。
また、メールの送信に関して詳しく書いた記事はこちら

GmailApp.createDraft(送信先アドレス、件名、本文、(オブション)

引数:
  宛先のアドレス(文字列)
  件名(文字列)
  本文(文字列)
  オプション(辞書型)(任意)

戻り値:作成された下書きメッセージ(GmailDraft クラスのオブジェクト)

let newDraft = GmailApp.createDraft('sample@gmail.com', '初めての下書き', '初めてGASを使って下書きを作成しました。');

既存の下書きメッセージ(Draft)を取得

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

GmailApp.getDraft(下書きメッセージの ID)

引数:下書きメッセージの ID(文字列)
戻り値:下書きメッセージ(GmailDraft クラスのオブジェクト)

let draft = GmailApp.getDraft('/*draftID*/');

既存の全ての下書きのオブジェクトを取得

GmailApp.getDrafts()

引数:無し
戻り値:全ての下書き(GmailDraft クラスのオブジェクトのリスト)

let allDraftList = GmailApp.getDrafts();

ラベル(Label)

スレッドがどの様なものなのか分類する為に、スレッドにラベルをつける事ができます。
例えば、仕入れ先からのメールをわかりやすくするために、「仕入れ先」のラベルを付けたりする場合で、後に「仕入れ先」からのスレッドのみ取得したい時に便利です。

ラベル自体を GoogleAppsScript で扱うには、「GmailLabel クラス」を使います。

新たなラベル(Label)の作成

GmailApp.createLabel(ラベル名)

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

let newLabel = GmailApp.createLabel('仕入れ先');

既存のラベル(Label)の取得

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

GmailApp.getLabelByName(ラベル名)

引数:ラベル名(文字列)
戻り値:ラベルのオブジェクト(GmailLabel クラスのオブジェクト)か該当するラベルがない場合は null

let supplierLabel = GmailApp.getLabelByName('仕入れ先');

既存の全てのラベルのオブジェクトの取得

GmailApp.getUserLabels()

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

let labelList = GmailApp.getUserLabels();

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