BBH
-Biz Branding Hub-
投稿日 : 
2019/09/01
更新日 : 
2019/09/01

GASでGメールを検索して何らかの処理を行うサンプル

GASからGメールを検索し、それらのメールに対して何らかの処理を行うサンプルを紹介します。

ソース

GoogleAppsScript

// gメールを検索して何らかの処理を行う
//exaple:cnd="label:unread before:2019/08/29"
function SearchGmailAndExecSomething(cnd) {

  // メール(スレッド)を検索
  var threads = GmailApp.search(cnd, 0, 200);
  
  // スレッドからメッセージを取得(2次元配列)
  var msgs = GmailApp.getMessagesForThreads(threads);
  
  // スレッドぶんループ
  for(var th_i = 0; th_i < msgs.length; th_i++) {
    var thread = msgs[th_i];
    
    // スレッド内のメッセージぶんループ
    for(var msg_i = 0; msg_i < thread.length; msg_i++) {
      // 何らかの処理
      var subject = thread[msg_i].getSubject(); // サンプル処理。件名を取得。
      var dateString = thread[msg_i].getDate(); // サンプル処理。日付を取得。
    }
    
  }
}

メール(スレッド)を検索

GmailApp.search(cnd, 0, 200) でGメールの検索を行っています。
パラメータは以下です。
1:検索条件("label:unread before:2019/08/29"など)
詳細はGmail で使用できる検索演算子を参照。
2:開始スレッド
3:最大取得スレッド
例えば上記の例だと、検索条件に合致したスレッドのうち、1件目から最大200件を取得します。

ちなみにスレッドと言うのは、メールの一連のやり取りのまとまりです。
例えば、Aというメールに対してBというメールを返すと、AとBのやりとりが1スレッドになります。
1スレッドには1件以上のメールが含まれるということですね。
スレッドの概念については以下でわかりやすく説明されています。
Gmailにおけるスレッド機能とは | Gmailの使い方

スレッドからメールを取得

大体の処理はメールの本文や題名を使いうことがほとんどかと思います。
そのため、スレッドからメールを取り出す必要があります。
その処理が、 GmailApp.getMessagesForThreads(threads) になります。
この処理によって、2次元配列でメールを取得することができます。
以下のようなイメージになります。

1スレッド目[1通目のメール、2通目のメール]
2スレッド目[1通目のメール]
3スレッド目[1通目のメール、2通目のメール、3通目のメール]
4スレッド目[1通目のメール]
5スレッド目[1通目のメール、2通目のメール]

例えば、3スレッド目の2通目のメールを取得したい場合は、 msgs[2][1] のように取得することができます。

ループで処理

GmailApp.getMessagesForThreads() でスレッドとメールの2次元配列が取得できたら、後はそれらをループで処理することができます。
サンプルでは、件名と日付を取得しています。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend