質問: GMailの検索窓とGmailApp.searchについて教えてください。 これらで"in:inbox after:2019/02/01"とすると 2018/12/25のメールに2019/02/01のメールがぶら下がっているスレッドも 引っかかってくるのですが、 "in:inbox after:2019/02/01 label:AAA" というようにラベル(~~スレッドにしかない機能~~)の条件を追加すると 2018/12/25のメールに2019/02/01のメールがぶら下がっているスレッドが 引っかかってこなくなります。 (もちろんこのスレッドにもラベルAAAはついています。) ~~スレッドにしか対応しない~~ラベルの条件を追加すると、 「受信トレイにあり、スレッド内のいずれかのメールの日付が2019/02/01以降のスレッド」 が、 「受信トレイにあり、スレッド先頭メールの日付が2019/02/01以降のスレッド、で、ラベルAAAのついたスレッド」 という解釈に切り替わるのでしょうか。 いまいちどういう動作をする機能なのか分かりません。 https://developers.google.com/apps-script/reference/gmail/gmail-app#search(String)
回答: Gmailではラベルはメッセージ単位にもっています。 スレッドについているラベルはメッセージ単位にもっているラベルの集合体と考えていただくのがわかりやすいです。 一つのスレッドに対して 2018/12/25 label:AAA 2019/02/01 (ラベルなし) という2つのメッセージがぶらさがっている場合に、スレッドは見かけ上、label:AAAの状態になります。 検索はメッセージ単位に行われるため、label:AAAと検索したり、after:2019/02/01すると、そのメッセージをもっているスレッドが引っかかってくるのですが after:2019/02/01 label:AAA とすると、そのようなメッセージは存在しないため、該当のスレッドがひっかかってきません。 これはGmailAPIを実行すればよくわかります。 User.messages:listにて、userIdにメールアドレス、qにlabel:AAAと条件を入力した場合に、2019/02/01のメッセージはひっかかってこないのではないでしょうか。 User.threads:listでも試してみてください。