特定のラベルをつけたメッセージだけを取り出したい

503 views
Skip to first unread message

伊藤元亮

unread,
Sep 26, 2014, 12:39:03 AM9/26/14
to google-app...@googlegroups.com
ドメイン内のユーザーに向けて汎用的なメールチェックスクリプトをつくろうとしています。
スレッド表示をオフにして運用しているユーザーの場合に下記に行き詰っています。

手順
1)「未チェック」というラベルに手動でメールをドラッグ(ラベル付け)
2)GASで「未チェック」ラベル内にあるメールのFrom一覧を取得する

というものですが、ラベルを指定してからFromを撮ろうとすると、ラベル内にあるメール(GmailMessage)だけでなく、スレッド毎とってしまいます。スレッドの中から、ユーザーが目視しているメールだけを取り出す方法はあるでしょうか?

現状は下記のような書き方です。これだと、「未チェック」ラベルに表示されているメールが1件だとしても、それを含むスレッド全てを扱ってしまいます。

function myFunction() {
  var label = GmailApp.getUserLabelByName("未チェック");
  var threads = label.getThreads();
  var mailFrom;
  
  for(var i in threads) {
    for(var loop = 0; loop < threads[i].getMessages().length; loop++) {
      Logger.log(threads[i].getMessages()[loop].getFrom() );
    } 
  }
}

改善方法、ヒントなどアドバイスお願い致します。

defalco andrea

unread,
Sep 26, 2014, 4:40:59 AM9/26/14
to google-app...@googlegroups.com
こんばんは、お役に立てるか分かりませんが、

Logger.logの行で、
getMessages()[loop].getLabels()を取得して、
Label.getName()が"未チェック"を含むメッセージであれば、geFrom()すればよいのではないでしょうか。

伊藤元亮

unread,
Sep 26, 2014, 4:57:27 AM9/26/14
to google-app...@googlegroups.com
早々のご指摘ありがとうございます!
リファレンスからはgetMessages()[loop]の戻り値、GmailMessageにはgetLabelsのメソッドはなく、getThreads()に思えます。

threads[i].getMessages()[loop].getLabels()

と書換えてみましたが、「getMessagesで関数getLabelsが見つかりません」のエラーになりました。
Gmailの通常のウェブ画面では、スレッド表示オフにすればスレッドの中の特定メールだけがラベルの中に表示されているので、情報としてはありそうなもんなんですが、何か根本的な思い違いしているのでしょうか、、、

2014年9月26日金曜日 17時40分59秒 UTC+9 defalco andrea:
Reply all
Reply to author
Forward
0 new messages