Smdn.Net.Imap4.WebClientsのドキュメントのアーカイブです。 Smdn.Net.Imap4.WebClientsは現在開発を停止しているので、Smdn.Net.Imap4.Clientを使用してください。 ソースコードおよびビルド済みDLLパッケージの配布はリリース一覧 §.Smdn.Net.Imap4.WebClientsにて継続しています。
概要
C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 Smdn.Net.Imap4.ClientをラップしてSystem.Net.WebRequest/System.Net.WebResponseを使ってIMAPの操作を行えるようにしたものです。 メッセージのダウンロードにWebClientクラスのメソッドを使うこともできます。 IMAP URL(RFC 5092)を用いたリクエストに対応していて、System.Net.FtpWebRequest等と同様にWebRequest.Methodプロパティで送信するコマンドを制御できます。
導入
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとIMAP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。
ライブラリの詳細については§.ImapWebRequest/ImapWebResponseクラス、この他のサンプルコードについては§.サンプルコードを参照してください。 また、本ライブラリのデモ用アプリケーションTundereBirdもあわせてご覧ください。
サンプルコード
個々のクラス・メソッド・プロパティについての解説は後述します。 サンプルコード中では証明書の検証を省略している箇所がありますが、実際に使用するコードでは必ず適切な検証を行うように書き換えてください。
メッセージをダウンロードしてファイルに保存する
メッセージをアップロードする
メッセージの検索
メッセージのコピー
INBOXにあるメッセージすべてをINBOX.backupにコピーする例。 AllowCreateMailboxプロパティをtrueにしておくことで、サーバがレスポンスコードTRYCREATEを返した場合は自動的にメールボックスを作成します。
メールボックスの削除
メールボックスINBOX.oldを削除する例。 ExpectedErrorResponseCodesプロパティにImapResponseCode.NonExistentを指定しておくことで、メールボックスが存在しない場合(サーバがレスポンスコードNONEXISTENTを返した場合)でもWebExceptionをスローしないようにします。
メールボックスの作成
メールボックスINBOX.newを作成する例。 先の例と同様に、メールボックスがすでに存在する場合(サーバがレスポンスコードALREADYEXISTSを返した場合)でもWebExceptionをスローしないようにします。
メッセージの検索
ImapStyleUriBuilderを使って、複雑な検索クエリを含むリクエストを送信する例。
この例で指定している検索クエリは、
- fromが'差出人'かつ送信日が2010年2月6日以前、もしくは
- 未読で件名に'未承諾広告'を含まない
となる。
メッセージへのフラグの設定
fromにspammer.example.comを含むメッセージをすべて既読にし、Thunderbirdの迷惑メールのマーク(Junk)を設定する例。 ImapStoreDataItem.ReplaceFlagsメソッドを使って新しく置き換える(設定する)フラグを作成し、StoreDataItemプロパティにしています。
ImapWebRequest/ImapWebResponseクラス
ここではImapWebRequest/ImapWebResponseクラスおよびSmdn.Net.Imap4.WebClients名前空間のクラスの詳細と使い方を紹介します。
概説
本ライブラリはSmdn.Net.Imap4.Clientのクラスをラップして実装しています。 そのため、基本的な機能と動作についてはSmdn.Net.Imap4.Clientの解説をご覧ください。 ここではSmdn.Net.Imap4.WebClientsおよびImapWebRequest/ImapWebResponseクラスに固有な部分を中心に解説します。
基本的にはHttpWebRequest/ResponseやFtpWebRequest/Responseを用いた操作と同様で、
- リクエストURLを指定してWebRequest.CreateメソッドでImapWebRequestのインスタンスを作成
- Method、Credentialsなどのプロパティを指定
- ImapWebRequest.GetResponseでリクエストを実行、レスポンスを取得
- 取得したImapWebResponseインスタンスを参照、必要に応じてImapWebResponse.GetResponseStreamメソッドを呼び出す
の順でIMAPコマンドを実行、レスポンスを取得します。
imap, imapsスキームの登録
WebRequestクラスがimapスキームおよびimapsスキームのURLを処理できるように、ImapWebRequest/ImapWebResponseクラスを使う前にImapWebRequestCreator.RegisterPrefixメソッドを呼び出しておく必要があります。
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、imapスキームおよびimapsスキームに対してImapWebRequestCreatorを関連付けます。
リクエストURLと接続・認証時の動作
接続と認証
接続・認証時の動作は、リクエストURLに記述されるスキーム・ホスト名・ポート・認証方式・ユーザ名に基づいて決まります。
リクエストURLで記述されない接続・認証時の動作は、ImapWebRequestクラスのプロパティで指定できます※ImapWebRequestのプロパティも合わせて参照してください。
プロパティ | 解説 |
---|---|
Credentials | 認証時に使用する資格情報(パスワード等)を指定します (ImapWebRequest.CredentialsプロパティはWebRequestから継承しているためICredentialsインターフェイスを実装していることを要求しますが、設定されるインスタンスはICredentialsByHostも実装している必要があります) |
UseTlsIfAvailable | 認証を開始する前に、可能ならSSL/TLSへアップグレードするかどうかを指定します |
UsingSaslMechanisms | 認証時に試行する認証メカニズムを指定します |
AllowInsecureLogin | 接続がSSL/TLSで保護されていない場合でも、平文による認証を許可するかどうか指定します |
以下はコード上での記述と接続・認証時の動作の例です。 実際にSSL/TLSを使用する場合は証明書の検証等が必要になります。
証明書の選択と検証
デフォルトでは、接続・認証時にImapSessionManagerクラスの以下のメンバを参照して証明書の選択と検証を行います。
型 | ImapWebRequestクラスが参照するメンバ |
---|---|
X509Certificate2Collection | ImapSessionManager.ClientCertificates |
RemoteCertificateValidationCallback | ImapSessionManager.ServerCertificateValidationCallback |
RemoteCertificateValidationCallback | ImapSessionManager.ClientCertificateSelectionCallback |
以下は証明書の検証を行う簡単な例です。
SSL/TLS接続時の動作をデフォルトからカスタマイズしたい場合は、ImapSessionManager.CreateSslStreamCallbackに適切なコールバックメソッドを指定してください。
リクエストURLとリクエスト・レスポンスの動作
HTTPと異なり、IMAP URLではリクエストURLの形式によりリクエストの対象が変わります。
リクエストURLの形式 | リクエストの対象 |
---|---|
imap://imap.example.net/ | URLで指定されたサーバ・アカウント |
imap://imap.example.net/mailbox | URLで指定されたメールボックス |
imap://imap.example.net/mailbox?... | URLで指定されたメールボックスにあるメッセージのうち、検索クエリに該当する全てのメッセージ |
imap://imap.example.net/mailbox/;UID=1 | URLで指定されたメールボックスにあるメッセージのうち、UIDに該当する特定のメッセージ |
WebRequest.Createメソッドが返すWebRequestインスタンスのMethodプロパティにデフォルトで設定される値は、リクエストURLの形式によって決まります。
ImapWebRequest.GetResponseの動作は、リクエストURLで表されるリクエストの対象と、WebRequest.Methodプロパティに設定する値によって変わります。 基本的な動作はRFC 5092 - IMAP URL Schemeに記述されている内容に準じたものになっていますが、ImapWebRequestは本ライブラリ固有の拡張を含んでいます。
以下でリクエストURLの形式とMethodプロパティに指定可能な値、リクエストとレスポンスについて解説します。 ImapWebRequestクラスのプロパティのうち、リクエストに影響するその他のプロパティについては別項で説明します。
サーバ・アカウントに対するリクエスト
リクエストURLがサーバ・アカウントを表す場合(imap://imap.example.net/の形式)のリクエストとレスポンスの動作は次のとおりです。
Methodプロパティ | リクエスト | 解説 | レスポンス |
---|---|---|---|
ImapWebRequestMethods.Lsub, "LSUB" (デフォルト) |
LSUBコマンドを送信して購読中のメールボックスの一覧を取得します。 | - | 取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。 |
ImapWebRequestMethods.List, "LIST" | LISTコマンドを送信して全てのメールボックスの一覧を取得します。 | - | 取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。 |
Methodプロパティ | リクエスト | 解説 | レスポンス |
ImapWebResponse.Mailboxesプロパティに設定されるImapMailboxインスタンスは、ログアウトするまでの間ライブラリ側で管理されます。 同じメールボックスに対して操作を行った場合は、インスタンスの値のみが更新され、常に同じインスタンスが返されます。
メールボックスに対するリクエスト
リクエストURLがメールボックスを表す場合(imap://imap.example.net/mailboxの形式)のリクエストとレスポンスの動作は次のとおりです。
Methodプロパティ | リクエスト | 解説 | レスポンス |
---|---|---|---|
ImapWebRequestMethods.Fetch, "FETCH" (デフォルト) |
FETCHコマンドを送信してメールボックスにあるメッセージの一覧を取得します。 | 取得するのはメッセージの属性のみです。 メッセージ本文は取得しません。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。 | 取得したメッセージの一覧は、ImapWebResponse.MessageAttributesプロパティに設定されます。 |
ImapWebRequestMethods.Append, "APPEND" | APPENDコマンドを送信してメールボックスにメッセージをアップロードします。 | アップロードするメッセージはWebRequest.GetRequestStreamメソッドが返すStreamに書き込みます。 現在の実装では、リクエスト開始時にContentLengthの値が指定されているか、GetRequestStreamメソッドが返すStreamを閉じるまでアップロードは保留されます。 メッセージはMIME形式であるべきですが、ライブラリ側ではアップロードする内容をチェックしません。 | サーバがアップロードしたメッセージのUIDを返す場合は、アップロードしたメッセージのURLがWebResponse.ResponseUriに設定されます。 |
ImapWebRequestMethods.Expunge, "EXPUNGE" | EXPUNGEコマンドを送信してメールボックスから\Deletedフラグの付いたメッセージを削除します。 | - | - |
ImapWebRequestMethods.Create, "CREATE" | CREATEコマンドを送信してURLで指定された名前でメールボックスを作成します。 | ImapWebRequest.Subscriptionプロパティがtrueの場合、作成したメールボックスに対して自動的にSUBSCRIBEコマンドを送信します。 | 作成したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、作成したメールボックスのURLがWebResponse.ResponseUriに設定されます。 |
ImapWebRequestMethods.Delete, "DELETE" | DELETEコマンドを送信してメールボックスを削除します。 | ImapWebRequest.Subscriptionプロパティがtrueの場合、削除したメールボックスに対してUNSUBSCRIBEコマンドを送信します。 削除しようとするメールボックスにメッセージがある場合は削除に失敗するので、STOREやEXPUNGEでメッセージを削除してからメールボックスを削除する必要があります。 |
- |
ImapWebRequestMethods.Rename, "RENAME" | RENAMEコマンドを送信してメールボックスの名前を変更します。 | ImapWebRequest.Subscriptionプロパティがtrueの場合、変更前後のメールボックスに対して自動的にUNSUBSCRIBE/SUBSCRIBEコマンドを送信します。 変更後のメールボックス名はImapWebRequest.DestinationUriプロパティで指定します。 |
名前を変更した後のメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、名前を変更した後のメールボックスのURLがWebResponse.ResponseUriに設定されます。 |
ImapWebRequestMethods.Check, "CHECK" | CHECKコマンドを送信します。 | このコマンドは何もしません。 CHECKコマンドの動作、レスポンスの内容はサーバの実装によります。 | - |
ImapWebRequestMethods.Select, "SELECT" | SELECTコマンドを送信してメールボックスを選択します。 | このコマンドは選択するだけで何もしません。 メールボックスの状態を取得する場合などに使います。 | 選択したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、選択したメールボックスのURLがWebResponse.ResponseUriに設定されます。 |
ImapWebRequestMethods.Examine, "EXAMINE" | EXAMINEコマンドを送信して読み取り専用でメールボックスを選択します。 | このコマンドは選択するだけで何もしません。 メールボックスの状態を取得する場合などに使います。 | 選択したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、選択したメールボックスのURLがWebResponse.ResponseUriに設定されます。 |
ImapWebRequestMethods.Status, "STATUS" | STATUSコマンドを送信してメールボックスの状態を取得します。 | 取得する情報は、ImapWebRequest.StatusDataItemプロパティで指定します。 既にメールボックスを選択している状態で、他のメールボックスの状態を取得する場合に使います。 |
状態を取得したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 |
ImapWebRequestMethods.Subscribe, "SUBSCRIBE" | SUBSCRIBEコマンドを送信してメールボックスの購読を開始します。 | - | - |
ImapWebRequestMethods.Unsubscribe, "UNSUBSCRIBE" | UNSUBSCRIBEコマンドを送信してメールボックスの購読を解除します。 | - | - |
Methodプロパティ | リクエスト | 解説 | レスポンス |
ImapWebResponse.Mailboxesプロパティに設定されるImapMailboxインスタンスは、ログアウトするまでの間ライブラリ側で管理されます。 同じメールボックスに対して操作を行った場合は、インスタンスの値のみが更新され、常に同じインスタンスが返されます。
メールボックスに対する検索クエリを含むリクエスト
リクエストURLがメールボックスに対する検索クエリを表す場合(imap://imap.example.net/mailbox?...の形式)のリクエストとレスポンスの動作は次のとおりです。
Methodプロパティ | リクエスト | 解説 | レスポンス |
---|---|---|---|
ImapWebRequestMethods.Search, "SEARCH" (デフォルト) |
SEARCHコマンドを送信して検索クエリに該当するメッセージの一覧を取得します。 | 取得するのはメッセージの属性のみです。 メッセージ本文は取得しません。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。 | 取得したメッセージの一覧は、ImapWebResponse.MessageAttributesプロパティに設定されます。 |
ImapWebRequestMethods.Copy, "COPY" | COPYコマンドを送信して検索クエリに該当するメッセージを別のメールボックスにコピーします。 | コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。 | サーバがCOPYUIDレスポンスコードを返した場合は、コピーしたメッセージのURLがWebResponse.ResponseUriに設定されます。 また、コピー先のメールボックスを自動的に作成した場合、作成したメールボックスはImapWebResponse.Mailboxesプロパティに設定されます。 |
ImapWebRequestMethods.Expunge, "EXPUNGE" | STOREコマンドを送信して検索クエリに該当するメッセージに\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。 | サーバがUID EXPUNGEに対応していない場合、検索クエリに該当したメッセージだけでなく既に\Deletedフラグが設定されている他のメッセージも同時に削除されます。 | - |
ImapWebRequestMethods.Store, "STORE" | STOREコマンドを送信して検索クエリに該当するメッセージにフラグを追加・削除・設定します。 | 追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。 | - |
ImapWebRequestMethods.Sort, "SORT" | SORTコマンドを送信して検索クエリに該当するメッセージの一覧をソート済みの形式で取得します。 | ソート方法はImapWebRequest.SortCriteriaプロパティで指定します。 サーバがSORTコマンドをサポートするかどうかはチェックせずにリクエストを実行します。 SEARCH同様、取得するのはメッセージの属性のみです。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。 |
取得したソート済みメッセージの一覧は、ImapWebResponse.MessageAttributesプロパティに設定されます。 |
ImapWebRequestMethods.Thread, "THREAD" | THREADコマンドを送信して検索クエリに該当するメッセージの一覧をスレッド形式で取得します。 | スレッド形式のアルゴリズムはImapWebRequest.ThreadingAlgorithmプロパティで指定します。 サーバがTHREADコマンドをサポートするかどうかはチェックせずにリクエストを実行します。 SEARCH同様、取得するのはメッセージの属性のみです。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。 |
取得したスレッド形式の一覧は、ImapWebResponse.ThreadTreeプロパティに設定されます。 また、個々のメッセージの一覧は、ImapWebResponse.MessageAttributesプロパティに設定されます。 |
Methodプロパティ | リクエスト | 解説 | レスポンス |
メールボックス内の特定のメッセージに対するリクエスト
リクエストURLが特定のメッセージを表す場合(imap://imap.example.net/mailbox/;UID=1の形式)のリクエストとレスポンスの動作は次のとおりです。
Methodプロパティ | リクエスト | 解説 | レスポンス |
---|---|---|---|
ImapWebRequestMethods.Fetch, "FETCH" (デフォルト) |
FETCHコマンドを送信してメッセージの本文を取得します。 | 取得の際にBODY[]とBODY.PEEK[]のどちらを使用するかはImapWebRequest.FetchPeekプロパティで指定します。 URLにSECTION/PARTIALのいずれも指定していない場合は、メッセージの本文だけでなく属性も取得します。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。 |
メッセージ本文はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 URLでSECTION/PARTIALを指定している場合は、メッセージ本文のうち、該当する部分のみ取得されます。 URLにSECTION/PARTIALのいずれも指定していない場合のみ、取得するメッセージのサイズがWebResponse.ContentLength、Content-TypeがWebResponse.ContentTypeプロパティに設定されます。 UID/SECTION/PARTIALに該当するメッセージがない場合、WebExceptionStatus.SuccessのWebExceptionをスローします。 |
ImapWebRequestMethods.Copy, "COPY" | COPYコマンドを送信してメッセージを別のメールボックスにコピーします。 | コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。 | サーバがCOPYUIDレスポンスコードを返した場合は、コピーしたメッセージのURLがWebResponse.ResponseUriに設定されます。 また、コピー先のメールボックスを自動的に作成した場合、作成したメールボックスはImapWebResponse.Mailboxesプロパティに設定されます。 |
ImapWebRequestMethods.Expunge, "EXPUNGE" | STOREコマンドを送信して\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。 | サーバがUID EXPUNGEに対応していない場合、URLで指定されたメッセージだけでなく既に\Deletedフラグが設定されている他のメッセージも同時に削除されます。 | - |
ImapWebRequestMethods.Store, "STORE" | STOREコマンドを送信してメッセージにフラグを追加・削除・設定します。 | 追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。 | - |
Methodプロパティ | リクエスト | 解説 | レスポンス |
リクエスト対象に制限されないリクエスト
リクエストURLの形式によらず使用可能なコマンドのリクエストとレスポンスの動作は次のとおりです。
Methodプロパティ | リクエスト | 解説 | レスポンス |
---|---|---|---|
ImapWebRequestMethods.NoOp, "NOOP" | NOOPコマンドを送信します。 | このコマンドは何もしません。 自動ログアウトタイマの更新、セッションの接続性確認、新着メッセージの確認などに使います。 | - |
Methodプロパティ | リクエスト | 解説 | レスポンス |
ImapWebRequestクラスのプロパティ
ImapWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
プロパティ | デフォルト | 対象となるコマンド | 解説 |
---|---|---|---|
KeepAlive | true | 全て | リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます。 |
ExpectedErrorResponseCodes | null | 全て | サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、エラーレスポンスでもWebExceptionがスローされません。 |
UseTlsIfAvailable | true | 全て(認証時) | サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。 |
UsingSaslMechanisms | {"DIGEST-MD5", "CRAM-MD5", "NTLM"} | 全て(認証時) | 認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。 |
AllowInsecureLogin | false | 全て(認証時) | 接続がSSL/TLSで保護されていない場合でも、平文による認証を許可するかどうか指定します。 |
ReadOnly | false | FETCH, SEARCH等 | メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。 |
AllowCreateMailbox | true | COPY | COPYコマンドを送信した際にサーバがレスポンスコードTRYCREATEを返した場合、自動的にメールボックスを作成するかどうかを指定します。 現在の実装では、APPENDコマンドでTRYCREATEが返された場合でもメールボックスは作成せず、常にエラーとなります。 |
DestinationUri | null | COPY, RENAME | COPYの場合はメッセージのコピー先メールボックス名、RENAMEの場合は変更後のメールボックス名を含むURLを指定します。 URLはコピー元・変更前(WebRequest.RequestUri)と同一サーバ、同一ユーザである必要があります。 それ以外の場合、ArgumentExceptionをスローします。 |
Subscription | true | CREATE, DELETE, RENAME, COPY | メールボックスを作成・削除する際に、対象のメールボックスに対して自動的にSUBSCRIBE/UNSUBSCRIBEコマンドを送信し、購読・購読解除するかどうかを指定します。 |
FetchDataItem | ImapFetchDataItemMacro.All | SEARCH, SORT, THREAD, FETCH | メッセージの属性を取得する際に、取得する属性を表すマクロを指定します。 マクロと取得する属性の対応は後述の対応表を参照してください。 |
StoreDataItem | null | STORE | STOREコマンドでメッセージに追加・削除・設定するフラグを指定します。 |
StatusDataItem | null | STATUS | STATUSコマンドで取得するメールボックスの情報を指定します。 |
SortCriteria | null | SORT | SORTコマンドで使用するソート方法を指定します。 |
ThreadingAlgorithm | null | THREAD | THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。 |
FetchBlockSize | 10240 | FETCH | FETCHコマンドでメッセージ本文を取得する際に、1回のFETCHコマンドで取得するブロックのサイズをバイト単位で指定します。 |
FetchPeek | true | FETCH | FETCHコマンドでメッセージ本文を取得する際に、BODY.PEEK[]とBODY[]のどちらを使用するかを指定します。 trueの場合はBODY.PEEK[]が使用され、取得したメッセージは未読のままになります。 |
プロパティ | デフォルト | 対象となるコマンド | 解説 |
ImapWebRequest.FetchDataItemプロパティに指定できるマクロの値と、取得する属性の種類は次のとおりです。
値 | 取得される属性 |
---|---|
ImapFetchDataItemMacro.All | ALLマクロで表される属性を取得します。 取得するのはFLAGS、INTERNALDATE、RFC822.SIZE、ENVELOPEです。 |
ImapFetchDataItemMacro.Fast | FASTマクロで表される属性を取得します。 取得するのはFLAGS、INTERNALDATE、RFC822.SIZEです。 |
ImapFetchDataItemMacro.Full | FULLマクロで表される属性を取得します。 取得するのはFLAGS、INTERNALDATE、RFC822.SIZE、ENVELOPE、BODYです。 |
ImapFetchDataItemMacro.Extensible | Fullと同じですが、BODYのかわりに拡張されたデータを含むBODYSTRUCTUREを取得します。 |
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
プロパティ | デフォルト | 対象となるコマンド | 解説 |
---|---|---|---|
Timeout | -1 | 全て | リクエストを開始してからレスポンスを取得するまでのタイムアウト時間を指定します。 |
ReadWriteTimeout | 300000 | 全て | ソケット送受信のタイムアウト時間を指定します。 |
ContentLength | 0 | APPEND | メールボックスにアップロードするメッセージのサイズを指定します。 |
以下のプロパティは、未テスト・不完全な実装に関連するプロパティです。 使用はできますが、今後廃止する可能性もあるので、現時点では使用を推奨できません。
プロパティ | デフォルト | 対象となるコマンド | 解説 |
---|---|---|---|
UseDeflateIfAvailable | false | 全て | サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます) |
ImapWebRequestクラスのデフォルト値の変更
ImapWebRequestDefaultsクラスのプロパティの値を変更することにより、ImapWebRequestクラスのプロパティに設定されるデフォルト値を一括して指定することができます。 全てのリクエストでデフォルトの値を変更したい場合は、ImapWebRequestDefaultsクラスのプロパティの値を変更してください。
ImapWebRequestDefaultsクラスにはImapWebRequestプロパティと同名のプロパティを用意してありますが、以下の一覧にあるプロパティはImapWebRequestでは設定できないプロパティです。
プロパティ | デフォルト | 解説 |
---|---|---|
Subscription | true | ImapWebRequest.Subscriptionプロパティと同様ですが、falseにした場合WebRequest.Methodのデフォルト値が"LSUB"から"LIST"に変わります。 |
ClientID | name=(現在実行中のアセンブリの名前) version=(現在実行中のアセンブリのバージョン) environment=(ランタイムの名前とバージョン) |
サーバがID extensionをサポートしている場合に送信されるIDを指定します。 |
リクエストとIMAP URLに関するその他の留意事項
- UIDVALIDITYを含むIMAP URLも扱えますが、無視します。 現時点ではUIDVALIDITYが指定されていない場合と同様に扱います。
アプリケーション構成ファイルでの設定
アプリケーション構成ファイルを記述することにより、imap, imapsスキームの登録と、ImapWebRequestDefaultsクラスの値を変更することができます。 コード上での変更をしたくない場合、する必要がない場合などは、アプリケーション構成ファイルに設定を記述することができます。 以下はアプリケーション構成ファイルの記述例です。
記述内容についてはネットワーク設定スキーマおよび構成セクション スキーマも合わせて参照してください。
例外
ImapWebRequestからはSystem.Net.WebExceptionまたはSystem.Net.ProtocolViolationExceptionをスローします。 WebExceptionをスローする場合は、エラーの状況によりWebException.StatusプロパティとInnerExceptionプロパティに値が設定されます。 また、サーバがエラー応答を返した場合は、Responseプロパティも設定されます。
非同期操作・スレッドセーフティ
WebRequestから継承されるBeginGetResponse()/EndGetResponse()メソッドは実装済みのため、これらのメソッドを使って非同期操作を行えます。 ただし、.NET Framework上では、WebClient.OpenReadAsync()、WebClient.Download*Async()などのメソッドを使用した非同期操作は正しく動作しないようなので、現時点では使用できません。