GrapeCity Secure Mail for .NET 4.0J > メールの受信(IMAP) > IMAPのメールボックスモデル |
IMAP では、1つのサーバー上に1つまたは複数のメールボックスが存在します。各メールボックスは名前で識別されます。メールボックスは、ファイルシステムにおけるディレクトリのようなものであり、区切り記号を用いたパス名によってディレクトリツリー内の位置が定義されます。IMAP のメールボックスでは、この区切り記号はサーバーによって異なることもあります。Delimiterプロパティを使用すると、現在のサーバーで使用されている区切り記号を調べることができます。たとえば、多くのサーバーでは階層に \ 記号が使用されるので、階層内の名前は「INBOX\users\guest」の構造に沿って作成されます。しかし、区切り記号としてピリオドを使用するサーバーでは、同じメールボックスモデルは「INBOX.users.guest」という名前で表されます。IMAP プロトコルではメールボックスの階層構造が正規に規定されていませんが、各アプリケーションは IMAP のこの命名規則を使用して、メールボックスを階層として操作できるようになっています。
Imap コンポーネントでは、普段使い慣れた方法でメールボックスに簡単にアクセスできるような仕組みで、メールボックス階層の細部が処理されます。Imap コンポーネントでは、Mailboxesプロパティによって、メールボックス階層のトップレベルにアクセスできます。このプロパティは、1つまたは複数の Mailboxオブジェクトを保持する MailboxCollectionオブジェクトを返します。これらの Mailbox オブジェクトには、位置(imap.Mailboxes[1] など)または名前(imap.Mailboxes["INBOX"] など)でインデックスを指定できます。
また、各 Mailbox オブジェクトは Mailboxesプロパティを備えています。これは、階層において子にあたる(ネストされた)メールボックスを表す MailboxCollection オブジェクトです。このプロパティに初めてアクセスすると、Imap コンポーネントは内部的に IMAP LIST コマンドを実行して、存在する子メールボックスを調べます。Mailboxes 同様、Mailboxes プロパティも、Mailboxes.Refreshメソッドを呼び出すことで更新できます。
これらのコレクションを使用して階層内を移動する際には、名前や区切り記号を意識する必要はありません。これは、 Imap コンポーネントによって解析されます。名前構造にアクセスする必要がある場合は、Mailbox オブジェクトの次の2つのプロパティを使用します。FullNameプロパティは、メールボックスの完全な IMAP 名を表します(「INBOX\users\guest」など)。一方、Nameプロパティは、階層内の各自のレベルでのメールボックス名を表します(「guest」など)。どちらのプロパティも書き込みおよび読み込みが可能であり、どちらのプロパティを使用しても、Mailbox の名前を変更できます。名前変更によって、階層内でのメールボックスの位置が変更された場合は、このメールボックスの新たな親に当たるメールボックスに対して Mailbox.Mailboxes.Refreshメソッドを呼び出す必要があります。こうしないと、モデル内に新規の位置が反映されません。
Mailboxes プロパティを使用すると、メールボックスに階層的にアクセスできますが、Listメソッドを使用すると、特定のメールボックス(1つまたは複数)に直接アクセスできます。List メソッドは、指定した各引数に基づき、Mailbox オブジェクトの配列を返します。directory 引数は、「親」メールボックスと考えることができます。IMAP LIST コマンドは実行時に、この引数に指定された名前を親として参照します。searchTerm 引数は検索対象の名前であり、次の2つのワイルドカードを使用できます。"*" は任意の文字を表し、"%" は区切り記号が出現する位置までのすべての文字を表します。"%" を使用すると、階層内の特定レベルを検索できます。これは、 Imap コンポーネントが Mailbox オブジェクトのツリーを内部的に構築するために使用する検索方法です。