GASからGメールを検索し、それらのメールに対して何らかの処理を行うサンプルを紹介します。
ソース
// 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次元配列が取得できたら、後はそれらをループで処理することができます。
サンプルでは、件名と日付を取得しています。