0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでの未処理Gmailメール判定方法

0
Last updated at Posted at 2026-04-04

概要

Gmailで受信したメールをGoogle Apps Scriptで処理する際には、同じメールを何度も処理するのを防ぐため、未処理のメールを判定する必要があります。
判定方法を3つ紹介します。

1. 未読メールは未処理

人間が読まずに自動処理するメールの場合、既読フラグ(is:unread)を流用するのが簡単です。

前提として、受信したメールが人間の目に触れないよう、Gmailのフィルタ設定でInbox以外のフォルダに振り分けます。情報収集用など、あまり重要でないメールであれば、Trashに振り分けると30日後に自動削除されて便利です。

以下はアマゾンのおすすめメールを処理する例です。

  const criteria = 'from:store-news@amazon.co.jp in:trash is:unread'
  const threads = GmailApp.search(criteria,0,1)
  for (let t = 0; t < threads.length; t++) {
    let messages = threads[t].getMessages()
    let message = messages[messages.length - 1]
    // 処理
    message.markRead() // 既読にする
  }

上記では端折っていますが、同じスレッドで複数のメールが来るケースでは、スレッド内の全未読メールを処理する必要があると思います。

2. ラベル付きスレッドは未処理

人間も読むメールでは、既読フラグは使えません。
この場合はラベルで判定する手があります。

Gmail受信時にフィルタでラベルをつけて、ラベルがついているスレッドを処理対象とします。処理後はラベルを外します。

以下は、unprocessedラベルとcustomerラベルがついた、客先から来た未処理メールを処理する例です。

  const label = GmailApp.getUserLabelByName('unprocessed')
  const criteria = 'label:unprocessed AND label:customer'
  const threads = GmailApp.search(criteria, 0, 2)
  for (let t = 0; t < threads.length; t++) {
    // 処理
    threads[t].removeLabel(label) // unprocessedラベルを外す
  }

3. ラベルなしスレッドは未処理

逆に、処理した際にラベルをつけて、ラベルがついていないスレッド(-label:…)を処理対象とする手もあります。

Gmailでフィルタを設定しなくても済む利点があります。
ただし、保存するメールでラベルがずっと残るのが気になるほか、処理対象のメールをGASで検索するのが重くなりそうなので、使っていません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?