【GAS】Gmailから条件指定で検索して情報を取得する
Google Apps Script(GAS)では、メールの内容を取得して様々な処理が可能です。この記事ではGASで条件指定して検索をかけ、Gmailの内容を取得する方法を解説します。
Gmailの情報取得ではメールの「スレッド」が重要な概念
「スレッド」とは
Gmailでは、指定したある条件(指定しなくてもよい)に一致するメールの一覧を「スレッド」といいます。
例えば「○○という件名がついたメール」「スター付きメール」「30日以内に受信したメール」等の条件を指定して、メールボックス内で一覧化することが可能です。
各スレッドでは開くとメッセージがカード状に時系列に重ねて表示されており、一つの条件についてのメッセージをまとめて見返せる便利な機能です。普段Gmailを使っているユーザーは自然と利用しているのではないでしょうか。
Gmailの情報取得ステップ
GASではGmailAppというクラスを用いて、この「スレッド」を一つの単位とした処理を行います。
まずはGmailからメールスレッドを取得し、その後該当スレッドに含まれている各メールを処理するという手順です。
メールスレッドを取得するには、大きく分けて3つの方法があります。
- 条件指定で検索してスレッドを取得する
- システムラベルからスレッドを取得する
- IDで検索してスレッドを取得する
もっとも自由度が高くよく使うのが1つ目の条件指定で検索する方法なので、この記事ではこちらをメインでご紹介します。後者2つも記事後半でご紹介しているのでぜひチェックしてみてください。
条件指定で検索しメール情報を取得する
searchメソッドで検索してスレッドを取得
GmailApp.search(query [, start, length])
- query(必須):検索演算子(string)
- start(任意):開始位置
- length(必須):取得するスレッド数
普段Gmailを使っている方は、自然とメールボックス内で特定条件でメールを検索する行為を行っていると思います。探したいメールをスムーズに検索できる大変便利な機能ですが、GASでもsearchメソッドを使うことでほぼ検索が再現できます。
function myFunction() {
// 抽出条件指定
const query = 'is:starred'; //星付き
//スレッド化
const threads = GmailApp.search(query);
for(const thread of threads){
console.log(thread.getFirstMessageSubject());
}
}
いろいろな検索演算子
上記のサンプルコードでは「is:starred」としてスター付きのスレッドを取得するコードでしたが、メールボックスでの検索と同様に様々な条件で検索をかけることが可能です。よく使う演算子を表にまとめたので参考に条件を作ってみてください。
演算子 | 説明 | 例 |
---|---|---|
from: | 送信者を指定する | from:Tetsuo |
to: | 受信者を指定する | to:Mike |
cc: | Cc欄の受信者を指定する | cc:Risa |
bcc: | Bcc欄の受信者を指定する | Bcc:Bob |
subject: | 件名を検索対象にする | subject:会員登録のお知らせ |
filename: | 添付ファイル名を検索対象にする | filename:examination.txt |
OR または{ } | OR条件を指定する | from:Tetsuo OR to:Mike |
AND または 半角スペース | AND条件を指定する | cc:Risa Bcc:Bob |
– | 除外、NOT条件を指定する | -from:Tetsuo |
“" | 完全一致 | “GASの基礎をまとめて学びたい方に!おすすめ記事3選" |
searchメソッドで指定できる条件は下記の記事で詳細を解説しています。
searchメソッドを使った検索以外のスレッド取得方法
①:システムラベルを指定
システムラベルとは
システムラベルは「受信トレイ」「重要マークが付与されている」「送信済み」などの条件でデフォルトで指定されているラベルです。
メールボックス画面で各ラベルをクリックすると、該当するシステムラベルに該当するメールスレッド一覧を確認できます。
システムラベルの種類
スレッドを取得できるシステムラベル指定は下記の種類があります。
システムラベル | メソッド |
---|---|
受信トレイ | getInboxThreads |
スター付き | getStarredThreads |
下書き | getStarredThreads |
迷惑メール | getSpamThreads |
ゴミ箱 | getTrashThreads |
ちなみに下書きは送信前なので、スレッドという概念はありません。メッセージのみの配列しか取得できず、下記の記事で解説しているようなスレッドの取り扱いでは制約があります。
サンプルコード
システムラベルの記述方法はどれも同じです。開始位置と取得数を引数としてスレッドを取得します。
GmailApp.getInboxThreads(開始位置, 取得数)
例えば、下記の記述では星付きのメールを一番上から3つ取得する記述になります。
function myFunction() {
const threads = GmailApp.getStarredThreads(0,3); // メールを3取得
for(const thread of threads){
console.log(thread.getFirstMessageSubject()); // 件名をログ出力
}
}
スレッド取得②:IDでスレッドを取得する
GmailスレッドのIDとは
各スレッドは一意に決まるIDが付与されています。このスレッドIDがわかっていれば、getTreadByIdでスレッドを取得できます。
サンプルコード
GmailApp.getThreadById(id);
function myFunction() {
const starred_threads = GmailApp.getStarredThreads(0,3);
const id = starred_threads[0].getId();
const thread = GmailApp.getThreadById(id);
console.log(thread.getFirstMessageSubject());
}
スレッドIDは、メールボックス上で確認することはできず、事前にgetIdメソッドで取得しておく必要があります。従って、getThreadByIdは、何らかの処理を実行した際にIDを保存しておいて再利用する、という使い方がメインになるでしょう。
まとめ
Gmailのスレッドを取得する3つの方法を解説しました。
- システムラベルからスレッドを取得する
- IDで検索してスレッドを取得する
- 特定条件を指定して検索を行うことで取得する