【GAS】GmailApp.searchの使い方
Google Apps Script(GAS)では、Gmailの中から特定の条件で情報を取得する機能が用意されて言います。そのうち、検索機能を利用したGmailApp.searchの使った方法をご紹介します。
その他の手法は下記の記事で解説しています。
サンプルコード
下記のコードでは、『「未読」かつ「support@eczine.jpから受信」かつ「2021/12/2より前に受信」』に該当するメールを抽出しています。
function myFunction() {
  // 抽出条件指定
  const query = 'is:unread from:support@eczine.jp before:2021/12/2 ';
  const threads = GmailApp.search(query);
  for(const thread of threads){
    console.log(thread.getFirstMessageSubject());
  }
}[ Thu Nov 25 2021 18:31:58 GMT-0500 (Eastern Standard Time), '[12/3]ビデオ接客で成約率1.5倍!ECで購買意欲を喚起する接客術を伝授[ECzine News 号外]’ ]
[ Wed Nov 24 2021 23:47:27 GMT-0500 (Eastern Standard Time), '[締切まであと11日]アパレル・雑貨のOMO デジタル接客・アプリ活用術を伝授[ECzine News 号外]’ ]
GmailApp.searchとは
GmailApp.search(クエリ[,開始位置,取得数])
取得したい情報の条件指定を行えるのがGmailApp.searchです。
普段Gmail利用している人は、探したいメールを検索窓で条件指定して抽出する作業は自然と行っていると思いますが、GASでも全く同じ方法で抽出をかけることが可能です。それがGmailAppクラスsearchメソッドになります。
「クエリ」の部分に検索条件となるテキストを挿入すれば、検索窓で検索する時と同様に該当メールをスレッド化して抽出することができるのです。
Gmailでは、指定したある条件(指定しなくてもよい)に一致するメールの一覧をスレッドといいます。
例えば特定件名やスター付きメール、30日以内に受信したメール等の条件を指定して、メールボックス内で一覧化することが可能です。
各スレッドでは開くとメッセージがカード状に時系列に重ねて表示されており、一つの条件についてのメッセージをまとめて見返せる便利な機能です。

検索演算子の種類
キーワードで検索をかけことが多いですが、どのような検索をかけることができるのかを知っていると、処理の幅が広がります。先に利用可能な演算子を確認しましょう。
| 演算子 | 説明 | 例 | |
|---|---|---|---|
| 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選" | |
| () | グループ化 | to:(Mike Tom) | |
| is: | 状態を指定する | is:unread | 未読 | 
| is:read | 既読 | ||
| is:important | 重要 | ||
| is:starred | スター付き | ||
| is:sent | 送信済み | ||
| in: | 場所を指定する | in:anywhere | アカウント内すべて | 
| in:inbox | 受信トレイ | ||
| in:drafts | 下書き | ||
| in:spam | 迷惑メール | ||
| in:trash | ゴミ箱 | ||
| has: | 添付ファイルやリンクの存在を指定する | has:attachment | 添付ファイル | 
| has:spreadsheet | スプレッドシートリンク | ||
| has:drive | ドライブリンク | ||
| after: | 指定日以降を検索 | after:2021/12/22 | |
| before: | 指定日以前を検索 | before:2022/01/02 | |
検索演算子の記述方法
上記の表のとおり、半角スペースを空けて演算子を記述すればAND条件での検索となります。
| 検索条件 | 記述方法 | 
|---|---|
| 「スター付き」かつ「未読」 | is:starred is:unread | 
| 「aaa@gmail.comから受信」かつ「添付ファイルあり」 | from:aaa@gmail.com has:attachment | 
| 「件名が『お問い合わせメール』」かつ 「2021年12月23日以降に受信」 | subject:お問い合わせメール after:2021/12/23 | 
検索ボックスでの検索方法を一緒なので、わからなくなったら一度メールボックスで条件指定してみてどのようなスクリプトになるのかを確認するのも一手でしょう。
これらを一つの文字列として記述し、GmailApp.searchの引数とすれば検索をかけることができます。
まとめ
GmailApp.searchを使ったGmailのスレッド抽出方法をご紹介しました。
- スレッドとは特定条件に一致するメールの一覧のこと
- 検索演算子を使って、searchメソッド(GmailApp.search)でメールの検索条件を指定する
Gmail連携の全体像は下記の記事で詳しく解説しているので是非参考にしてみてください。

 https://tetsuooo.net/gas/1246/
 https://tetsuooo.net/gas/1246/









