Python で IMAP メールを検索およびフィルタリング

メールボックスからすべてのメッセージを取得するには、Aspose.Email が提供する ’list_messages’ メソッドを使用します。 ImapClient クラスです。特定の条件を満たすメッセージだけを取得するには、オーバーロードされた ’list_messages’ メソッドを使用し、 MailQuery を引数として。 MailQuery クラスは、日付、件名、送信者、受信者など、これらの条件を定義するさまざまなプロパティを提供します。

最初のコードサンプルは、日付と件名の両方に基づいてメッセージをフィルタリングする方法を示します。追加の例では、他の条件によるフィルタリングや、より複雑なクエリの構築を紹介しています。さらに、API は正確なフィルタリングのために大文字小文字を区別した検索条件をサポートし、メールボックスからメッセージをフィルタリングする際に検索文字列のエンコーディングを指定することも可能です。

IMAP サーバーからメッセージをフィルタリングおよび取得

シンプルな IMAP クエリを構築

以下のコードスニペットを使用して IMAP メールボックスに接続し、今日受信した件名に "newsletter" を含むメッセージを取得します。

  1. ユーザー名とパスワードを使用してポート 993 で IMAP サーバーに接続します。
  2. "Inbox" フォルダーを選択して受信メールを操作します。
  3. インスタンスを作成する IMAPクエリビルダー 検索クエリを構築するために。
  4. 検索条件を指定します。例として、メールの件名に "Newsletter" を含み、内部日付が今日の日付と一致するようにします。
  5. ビルダーから取得して検索クエリを生成します。
  6. クエリを使用して条件を満たすメッセージを一覧表示します。
  7. 検索条件に一致するメッセージの総数を出力します。

複雑な検索条件を構築

Aspose.Email は、配信日や範囲指定、特定の送信者、特定のドメイン、特定の受信者など、メールメッセージの検索およびフィルタリングのための複雑な検索条件を構築することも可能にします。この目的のために、次のものを使用してください。 MailQueryBuilder クラスとそのプロパティです。以下のコードサンプルは、特定の条件でメッセージを取得する方法を示します。

本日の日付でメールをフィルタリング

配信日でメッセージを取得するには、‘internal_date’ プロパティを使用してください。 MailQueryBuilder 以下のコードサンプルに示すクラスです:

import aspose.email as ae
from datetime import datetime

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())

日付範囲でメールをフィルタリング

日付範囲内のメッセージを取得するには、同じ ‘internal_date’ プロパティで日付範囲を指定します。以下のコードサンプルを参照してください:

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))

特定の送信者でメールをフィルタリング

特定の送信者からメッセージを取得するには、‘from_address’ プロパティを使用します。 MailQueryBuilder 以下のコードサンプルに示すクラスです:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")

特定のドメインでメールをフィルタリング

特定のドメインからのメッセージを取得するには、以下のコードサンプルに示すように ‘from_address’ プロパティを使用します:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")

特定の受信者でメールをフィルタリング

特定の受信者へのメッセージを取得するには、以下のコードサンプルに示すように ’to’ プロパティを使用します:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")

内部日付でメッセージをフィルタリング

「内部日付」や「件名に含む」など、指定された条件でクエリを構築します。"internal date" はメールメッセージが受信またはサーバーに追加された日時を指し、‘internal_date’ プロパティを使用して設定できます。 IMAPクエリビルダー クラスです。以下のコードサンプルは、件名と日付の条件に基づいて受信トレイから特定のメールを取得する方法を示しています:

import aspose.email as ae
from datetime import datetime

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")

# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())

# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
    print(f"Internal Date: {info.internal_date}")

カスタムキーワードフラグでメッセージをフィルタリング

IMAP メールボックス内でカスタムキーワードフラグ(具体的には "custom1" と "custom2")を含むメールを検索するクエリを作成します。クエリを構築するには、次を使用してください IMAPクエリビルダー クラスは、IMAP サーバーからメールを取得する際にフィルタリングを行います。

まず、クエリビルダーのインスタンスを作成します。以下を使用して has_flags メソッドで、指定された IMAP キーワードフラグを持つメールのみを含む条件を追加します。IMAP のカスタムキーワード(ユーザー定義フラグとも呼ばれる)は、メールにタグ付けやカテゴリ分けを行い、例えばステータスをマークするなど、さまざまな目的で使用できます。

以下のコードスニペットは、カスタムキーワードフラグに基づいてメールを取得するクエリの作成方法を示しています:


builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))

複雑なクエリの構築

複数のクエリを満たす必要がある場合があります。Aspose.Email は、複数のステートメントでクエリを組み合わせることでこれを可能にします。まず MailQueryBuilder オブジェクトとそのプロパティを使用して特定のクエリを構築します。

AND を使用したクエリの組み合わせ

以下のコードスニペットは、AND を使用してクエリを組み合わせる方法を示しています。

import aspose.email as ae
from datetime import datetime, timedelta

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")

OR を使用したクエリの組み合わせ

以下のコードスニペットは、OR 演算子でクエリを組み合わせる方法を示します。


builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

ケースセンシティブフィルタの適用

API はケースセンシティブな条件に基づいてメールボックスからメールをフィルタリングする機能も提供します。以下のメソッドは、 StringComparisonField クラスはケースセンシティブフラグを指定してメールを検索する機能を提供します。

  • StringComparisonField.contains(value, ignore_case)
  • StringComparisonField.equals(value, ignore_case)
  • StringComparisonField.not_contains(value, ignore_case)
  • StringComparisonField.not_equals(value, ignore_case)

以下のコードスニペットは、この機能をプロジェクトに実装する方法を示します:


builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)

カスタム検索クエリを実行

IMAP メールボックス用の検索クエリを作成し、カスタム Gmail 検索条件(具体的には添付ファイルがあるメール)でメールをフィルタリングします。

まず、次のインスタンスを作成します: IMAPクエリビルダー、複雑な IMAP 検索クエリの構築に役立ちます。以下を使用してください custom_search クエリビルダーに Gmail 固有の検索文字列を追加するメソッドです。

検索文字列 X-GM-RAW "has:attachment" は Gmail の拡張 IMAP 属性 X-GM-RAW を利用しており、IMAP クエリ内で Gmail の強力なウェブメール検索構文を使用できます。ここで、has:attachment 演算子は添付ファイルを含むすべてのメールを返します。

以下のコードスニペットは、添付ファイル付きのすべてのメッセージを取得するためのメールフィルタリング方法を示しています:


builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")

mailQuery = builder.get_query()

このメソッドは、Gmail 固有の高度なフィルタリングを可能にし、対象メールを取得します。