サーバーからのメッセージ操作
メールボックス情報の取得
GetMailBoxSize() と GetMailBoxInfo() メソッドを使用して、メッセージ数やメールボックスのサイズなどの情報を取得できます。
- GetMailBoxSize() メソッドはメールボックスのサイズ(バイト単位)を返します。
- GetMailBoxInfo() メソッドは Pop3MailBoxInfo 型のオブジェクトを返します。
MessageCount プロパティを使用してメッセージ数を取得し、OccupiedSize プロパティを使用してサイズを取得することもできます。以下のサンプルコードは、メールボックスの情報を取得する方法を示しています。次のことが示されています:
- 作成する Pop3Client.
- POP3サーバーに接続する。
- メールボックスのサイズを取得する。
- メールボックス情報を取得する。
- メールボックス内のメッセージ数を取得する。
- 使用中サイズを取得する。
メールボックス内のメール数取得
以下のコードスニペットは、メールボックス内のメールメッセージ数をカウントする方法を示しています。
Aspose.Email を使用すると、開発者はさまざまな方法でメールを操作できます。たとえば、メールをダウンロードする前にヘッダー情報を取得したり、メールをサーバーから取得して解析せずに保存したり(高速)、解析してから保存したり(低速)できます。本稿では、メールの取得と変換方法を示します。
メールヘッダー情報の取得
メールヘッダーは、メール全体を取得するかどうかを判断するための情報を提供します。通常、ヘッダー情報には送信者、件名、受信日などが含まれます(メールヘッダーの詳細は「Customizing Email Headers」に記載されています。このトピックは SMTP でのメール送信に特化していますが、ヘッダー情報は POP3 メールでも有効です)。以下の例は、メッセージのシーケンス番号を使用して POP3 サーバーからメールヘッダーを取得する方法を示しています。
メールメッセージの取得
Aspose.Email.Pop3 クラスコンポーネントは、POP3 サーバーからメールメッセージを取得し、MailMessage コンポーネントのヘルプで MailMessage インスタンスに解析する機能を提供します。MailMessage クラスはメールコンテンツの操作に必要な多数のプロパティとメソッドを含みます。Pop3Client クラスの FetchMessage 関数を使用すると、POP3 サーバーから直接 MailMessage インスタンスを取得できます。以下のコードスニペットは、POP3 サーバーから完全なメールメッセージを取得する方法を示します。
一意の ID を使用したメッセージ概要情報の取得
API の POP3 クライアントは、メッセージのユニーク ID を使用してサーバーからメッセージ要約情報を取得できます。この機能により、メッセージ全体を取得せずに要約情報に迅速にアクセスできます。以下のコードスニペットは、メッセージ要約情報を取得する方法を示します。
マルチコネクションでメッセージ一覧取得
負荷の高い操作に対して、Aspose.Email は ‘use_multi_connection’ プロパティを提供します。 Pop3Client メール取得時に複数接続を使用できるクラスです。ただし、このモードを使用しても必ずしもパフォーマンスが向上するわけではありません。以下のコードスニペットは、POP3 サーバーへの接続を確立し、クライアントが最大 5 つの同時接続を許可するように構成し、マルチ接続モードを有効にしてサーバー上のメッセージ情報を取得する方法を示します:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()
サーバーからメッセージを取得し、ディスクに保存
解析せずにメッセージをディスクに保存
POP3 サーバーからメールメッセージを解析せずにダウンロードしたい場合は、Pop3Client クラスの SaveMessage 関数を使用します。SaveMessage 関数はメールメッセージを解析しないため、FetchMessage 関数よりも高速です。以下のコードスニペットは、シーケンス番号(この例では 1)でメッセージを保存する方法を示します。SaveMessage メソッドはメッセージを元の EML 形式のまま保存し、解析は行いません。
保存前にメッセージを解析
作成したクライアントオブジェクトの ‘fetch_message’ メソッドを使用します。 Pop3Client 特定のシーケンス番号のメッセージを取得するクラスです。以下のコードサンプルは、特定のメッセージを取得し、msg オブジェクトの ‘save’ メソッドを呼び出して件名をファイル名として保存する方法を示しています:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)
送信者、受信者、または日付でのメッセージフィルタリング
Pop3Client クラス(「POP3 サーバーへの接続」で説明)は list_messages() メソッドを提供し、メールボックス内のすべてのメッセージを取得します。条件に合致するメッセージだけを取得したい場合は、MailQuery を引数に取るオーバーロード版 ListMessages() メソッドを使用します。MailQuery クラスは、日付、件名、送信者、受信者などのクエリ条件を指定するためのさまざまなプロパティを提供します。MailQueryBuilder クラスを使用して検索式を構築します。まずすべての条件と制約を設定し、次に MailQueryBuilder が作成したクエリで MailQuery を埋めます。Pop3Client は MailQuery オブジェクトを使用してサーバーからフィルタされた情報を抽出します。本記事では、メールボックスからメールメッセージをフィルタリングする方法を示します。最初の例は、日付と件名に基づいてメッセージをフィルタリングする方法を示しています。他の基準でのフィルタリングや、より複雑なクエリの構築方法も紹介します。また、特定のメールを取得するための日時フィルタの適用例や、ケースセンシティブフィルタの使用方法も示しています。
メールボックスからのメッセージフィルタリング
メールボックスからメッセージをフィルタリングするには:
- POP3 サーバーに接続し、ログインします。
- MailQuery のインスタンスを作成し、必要なプロパティを設定します。
- Pop3Client.list_messages(MailQuery query) メソッドを呼び出し、パラメータに MailQuery を渡すことで、フィルタされたメッセージのみを取得します。
以下のコードスニペットは、POP3 メールボックスに接続し、本日到着したメッセージで件名に "newsletter" を含むものを取得する方法を示します。
特定の条件に合致するメッセージの取得
Aspose.Email は、メールメッセージのクエリとフィルタリングのために複雑な検索条件を構築する機能も提供します。その目的のために MailQueryBuilder クラスとそのプロパティ。取得条件は以下のとおりです:
- 配信日でメッセージを取得します。
- 範囲内のメッセージを取得します。
- 特定の送信者からのメッセージを取得します。
- 特定のドメインからのメッセージを取得します。
- 特定の受信者へのメッセージを取得します。
今日の日付
配信日でメッセージを取得するには、以下のコードサンプルに示すように ‘internal_date’ プロパティを使用します:
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’ プロパティを使用します:
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")
複雑なクエリの構築
複数のクエリを満たす必要がある場合があります。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 演算子でクエリを組み合わせる方法を示します。
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
ケースセンシティブフィルタの適用
API はケースセンシティブな条件に基づいてメールボックスからメールをフィルタリングする機能も提供します。以下のメソッドは、 StringComparisonField クラスはケースセンシティブフラグを指定してメールを検索する機能を提供します。
メソッド Aspose.Email.StringComparisonField.contains(value, ignore_case) メソッド Aspose.Email.StringComparisonField.equals(value, ignore_case) メソッド Aspose.Email.StringComparisonField.not_contains(value, ignore_case) メソッド Aspose.Email.StringComparisonField.not_equals(value, ignore_case)
以下のコードスニペットは、この機能をプロジェクトに実装する方法を示します:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)