2010-02-15T07:14:38の更新内容

works/tools/junk/TundereBird/index.wiki.txt

current previous
16,13 16,6
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,TundereBird-0.25.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
----[[works/libs/Smdn.Net.Imap4]] 0.25
+
----[[works/libs/Smdn.Net.Pop3]] 0.25
+
----[[works/libs/Smdn.Security.Authentication.Sasl]] 0.25
+
----[[works/libs/Smdn.Formats.Mime]] 0.16
+
----[[works/libs/Smdn.Formats.Ini]] 0.16
 
--${smdncms:distfilelink,TundereBird-0.24.tar.bz2}
--${smdncms:distfilelink,TundereBird-0.24.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
----[[works/libs/Smdn.Net.Imap4]] 0.24
----[[works/libs/Smdn.Net.Imap4]] 0.24
88,13 81,6
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**0.25
+
-修正・改善
+
--IMAP
+
---送信するIDにsupport-urlを含めるようにした
+
--POP
+
---設定ファイルのCertFilesに記載されているサーバ証明書を読み込んでいなかったのを修正
+

          
 
**0.24
**0.24
 
-修正・改善
-修正・改善
 
--パスワードの入力ダイアログを追加、設定ファイルにパスワードを記入しなくても接続できるようにした。
--パスワードの入力ダイアログを追加、設定ファイルにパスワードを記入しなくても接続できるようにした。

works/libs/Smdn.Net.Imap4/releases/index.wiki.txt

current previous
4,7 4,6
 

        

        
 
*リリース一覧
*リリース一覧
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.25.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.24.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.24.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.23.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.23.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.22.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.22.tar.bz2}
16,43 15,6
 
0.20以降はMIT X11ライセンスでのリリースとなります。 0.20より前のバージョンについては特に使用条件を定めていません。
0.20以降はMIT X11ライセンスでのリリースとなります。 0.20より前のバージョンについては特に使用条件を定めていません。
 

        

        
 
*変更履歴
*変更履歴
+
**0.25
+
主に未サポートだった拡張の実装、アプリケーション構成ファイルでの設定のサポート、パフォーマンスと.NET Frameworkでの動作の改善。
+

          
+
-機能追加
+
--&urn2url(urn:ietf:rfc:2087){QUOTA};に対応
+
--&urn2url(urn:ietf:rfc:3516){BINARY}; FETCH/APPENDに対応(実機での動作は未確認)
+
--&urn2url(urn:ietf:rfc:5464){METADATA};に対応(実機での動作は未確認)
+
--&urn2url(urn:ietf:rfc:5466){FILTERS};に部分的に対応(実機での動作は未確認)
+
--WebClients名前空間
+
---アプリケーション構成ファイルのconfiguration/system.net/webRequestModules要素でimap/imapsスキームを登録できるようにした
+
---ImapWebRequestDefaultsクラスを追加、コード内もしくはアプリケーション構成ファイルでImapWebRequestの各プロパティのデフォルト値を設定できるようにした
+
---ImapWebRequest.FetchPeekプロパティを追加
+
-修正・改善
+
--ImapResponseCodeをSmdn.Net.Imap4.Protocol.ClientからSmdn.Net.Imap4.Protocolに移動
+
--SslStream.AuthenticateAsClientでAuthenticationExceptionが発生した場合、ストリームを閉じるようにした
+
--ライブラリ内のメッセージとサーバからのレスポンスを区別できるように内部処理と書式を変更した
+
--Mono 2.6.x, Mono 2.4.xで文字列からDateTimeOffsetへの変換でFormatExceptionがスローされないようにした
+
--パフォーマンス関連
+
---レスポンスパーサの実装を最適化、冗長な処理を削除
+
---文字列比較処理を最適化
+
---ロック処理にSemaphoreを使用していた箇所をMonitorに置き換えた
+
--.NET Framework関連
+
---NetworkCredentialの各プロパティがnullを返すことを期待していた実装を修正、nullではなくstring.Emptyの場合に認証をキャンセルするようにした
+
---SocketError.TimedOutのSocketExceptionが発生した場合、ImapConnectionExceptionではなくTimeoutExceptionをスローするようにした
+
--WebClients名前空間
+
---SslStream作成用のコールバック、証明書関連のコールバックのプロパティ名を変更、また値をImapConnectionと共有しないようにした
+
---ImapSessionManagerからIWebRequestCreateの実装を分離、WebRequest.RegisterPrefixはImapWebRequestCreator.RegisterPrefixで行うようにした
+
---RequestStreamへの書き込み待ち合わせにAutoResetEventを使用していた箇所をMonitorに置き換えた
+
---ImapWebRequestDefaults.Subscriptionがtrueの場合はLSUB、falseの場合はLISTをImapWebRequest.Methodプロパティのデフォルトとするようにした
+

          
+
0.24と0.25のパフォーマンスの比較。
+
|~テストケース|>|~テスト環境|
+
|~|Ubuntu 9.10 + Mono(r148762)|Windows Vista + .NET Framework 3.5|
+
|4kBのメッセージを1500回ダウンロード&br;2回試行|[1]06.05sec -> 03.80sec&br;[2]06.40sec -> 04.46sec|[1]03.94sec -> 03.68sec&br;[2]04.04sec -> 03.57sec|
+
|17MBのメッセージを10回ダウンロード&br;2回試行|[1]45.00sec -> 31.95sec&br;[2]46.43sec -> 32.78sec|[1]37.09sec -> 32.54sec&br;[2]36.99sec -> 32.63sec|
+

          
+

          
 
**0.24
**0.24
 
主にIMAP URL関連の修正と、WebClients名前空間のクラスでの非ASCII文字を含む検索とpartial fetchのサポート。
主にIMAP URL関連の修正と、WebClients名前空間のクラスでの非ASCII文字を含む検索とpartial fetchのサポート。
 

        

        

works/libs/Smdn.Net.Imap4/doc/index.wiki.txt

current previous
1,6 1,6
 
${smdncms:title,ドキュメント・サンプル}
${smdncms:title,ドキュメント・サンプル}
 
${smdncms:keywords,}
${smdncms:keywords,}
~
[[works/libs/Smdn.Net.Imap4]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.25時点のもので、記載不備などがあるかもしれません。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
[[works/libs/Smdn.Net.Imap4]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.24時点のもので、記載不備などがあるかもしれません。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*使用例
*使用例
 
個々のサンプルの詳細については、後述するSmdn.Net.Imap4.WebClients名前空間の説明を参照してください。
個々のサンプルの詳細については、後述するSmdn.Net.Imap4.WebClients名前空間の説明を参照してください。
16,7 16,7
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    ImapWebRequestCreator.RegisterPrefix();
    ImapSessionManager.RegisterWebRequestPrefix();
 

        

        
 
    using {
    using {
 
      client.Credentials = new NetworkCredential("user", "pass");
      client.Credentials = new NetworkCredential("user", "pass");
38,7 38,7
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    ImapWebRequestCreator.RegisterPrefix();
    ImapSessionManager.RegisterWebRequestPrefix();
 

        

        
 
    using {
    using {
 
      client.Credentials = new NetworkCredential("user", "pass");
      client.Credentials = new NetworkCredential("user", "pass");
59,8 59,8
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    ImapWebRequestCreator.RegisterPrefix();
    ImapSessionManager.RegisterWebRequestPrefix();
~
    ImapSessionManager.ServerCertificateValidationCallback = delegate { return true; };
    ImapSessionManager.CertificateValidationCallback = delegate { return true; };
 

        

        
 
    var request = WebRequest.Create("imaps://user@imap.gmail.com/INBOX?SUBJECT \"[Mono-dev]\"");
    var request = WebRequest.Create("imaps://user@imap.gmail.com/INBOX?SUBJECT \"[Mono-dev]\"");
 

        

        
98,9 98,9
 
|*証明書に関する型と該当するメンバ(いずれもクラス・プロパティ)
|*証明書に関する型と該当するメンバ(いずれもクラス・プロパティ)
 
|~証明書に関する型|>|~該当するメンバ|h
|~証明書に関する型|>|~該当するメンバ|h
 
|~|~Smdn.Net.Imap4.Protocol.Client名前空間|~Smdn.Net.Imap4.WebClients名前空間|
|~|~Smdn.Net.Imap4.Protocol.Client名前空間|~Smdn.Net.Imap4.WebClients名前空間|
~
|X509Certificate2Collection|ImapConnection.ClientCertificates|ImapSessionManager.ClientCertificates|
|X509Certificate2Collection|ImapConnection.CertCollection|ImapSessionManager.CertCollection|
~
|RemoteCertificateValidationCallback|ImapConnection.ServerCertificateValidationCallback|ImapSessionManager.ServerCertificateValidationCallback|
|RemoteCertificateValidationCallback|ImapConnection.CertificateValidationCallback|ImapSessionManager.CertificateValidationCallback|
~
|LocalCertificateSelectionCallback|ImapConnection.ClientCertificateSelectionCallback|ImapSessionManager.ClientCertificateSelectionCallback|
|LocalCertificateSelectionCallback|ImapConnection.CertificateSelectionCallback|ImapSessionManager.CertificateSelectionCallback|
 

        

        
 
**操作とデータ構造
**操作とデータ構造
 
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
126,13 126,11
 
の順でIMAPコマンドを実行、レスポンスを取得できます。 以下でSmdn.Net.Imap4.WebClientsに固有な部分について解説します。
の順でIMAPコマンドを実行、レスポンスを取得できます。 以下でSmdn.Net.Imap4.WebClientsに固有な部分について解説します。
 

        

        
 
**imap, imapsスキームの登録
**imap, imapsスキームの登録
~
Smdn.Net.Imap4.WebClients名前空間のクラスを使う場合には、WebRequestクラスがimapスキームおよびimapsスキームのURLを処理できるようにImapWebRequestCreator.RegisterPrefixメソッドを呼び出しておく必要があります。
Smdn.Net.Imap4.WebClients名前空間のクラスを使う場合には、WebRequestクラスがimapスキームおよびimapsスキームのURLを処理できるようにImapSessionManager.RegisterWebRequestPrefixメソッドを呼び出しておく必要があります。
 

        

        
~
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、imapスキームおよびimapsスキームに対してImapWebRequestCreatorを関連付けます。
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、imapスキームおよびimapsスキームに対してImapSessionManagerを関連付けます。
 

        

        
 
**リクエストURLと接続時の動作
**リクエストURLと接続時の動作
+
接続時の動作は&urn2url(urn:ietf:rfc:5092);に記述されている内容に準じた動作となるようにしています。 (ただしimapsスキームを使用した場合にSSL/TLSでの接続を試みる動作は本ライブラリ固有の動作です)
+

          
 
***SSL/TLS・接続ポート
***SSL/TLS・接続ポート
 
リクエストURLのスキームがimapsの場合は、常にSSL/TLSでの接続を試みます。 スキームがimapの場合は、ImapWebRequest.UseTlsIfAvailableプロパティがtrueで、かつサーバがSTARTTLSに対応している場合、認証を開始する前にSSL/TLSを使用した接続にアップグレードします。 URLでポート番号を指定しない場合、デフォルトのポート(imapは143、imapsは993)に接続します。
リクエストURLのスキームがimapsの場合は、常にSSL/TLSでの接続を試みます。 スキームがimapの場合は、ImapWebRequest.UseTlsIfAvailableプロパティがtrueで、かつサーバがSTARTTLSに対応している場合、認証を開始する前にSSL/TLSを使用した接続にアップグレードします。 URLでポート番号を指定しない場合、デフォルトのポート(imapは143、imapsは993)に接続します。
 

        

        
154,10 152,10
 

        

        
 
|*リクエストURLの形式と認証動作の例
|*リクエストURLの形式と認証動作の例
 
|リクエストURLの形式|ユーザ名|使用する認証メカニズム|h
|リクエストURLの形式|ユーザ名|使用する認証メカニズム|h
~
|imap://user;AUTH=DIGEST-MD5@imap.example.net/|user|DIGEST-MD5|
|imap://user;AUTH=DIGEST-MD5@imap.example.net/|user|DIGEST-MD5|
~
|imap://;AUTH=DIGEST-MD5@imap.example.net/|WebRequest.Credentialsより取得|DIGEST-MD5|
|imap://;AUTH=DIGEST-MD5@imap.example.net/|WebRequest.Credentialsより取得|DIGEST-MD5|
~
|imap://user;AUTH=*@imap.example.net/&br;imap://user@imap.example.net/|user|サーバ・クライアントが対応しているものを順に試行|
|imap://user;AUTH=*@imap.example.net/&br;imap://user@imap.example.net/|user|サーバ・クライアントが対応しているものを順に試行|
~
|imap://;AUTH=ANONYMOUS@imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUS|
|imap://;AUTH=ANONYMOUS@imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUS|
 
|imap://imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUSもしくはLOGINコマンドを使用|
|imap://imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUSもしくはLOGINコマンドを使用|
 

        

        
 
試行する認証メカニズムを制御するには、後述するImapWebRequest.UsingSaslMechanismsプロパティの値を変更してください。
試行する認証メカニズムを制御するには、後述するImapWebRequest.UsingSaslMechanismsプロパティの値を変更してください。
173,9 171,7
 

        

        
 
WebRequest.Createメソッドが返すWebRequestインスタンスのMethodプロパティにデフォルトで設定される値は、リクエストURLの形式によって決まります。
WebRequest.Createメソッドが返すWebRequestインスタンスのMethodプロパティにデフォルトで設定される値は、リクエストURLの形式によって決まります。
 

        

        
~
ImapWebRequest.GetResponseの動作は、リクエストURLで表されるリクエストの対象と、WebRequest.Methodプロパティに設定する値によって変わります。 基本的な動作は&urn2url(urn:ietf:rfc:5092);に記述されている内容に準じたものになっていますが、ImapWebRequestは本ライブラリ固有の拡張を含んでいます。
ImapWebRequest.GetResponseの動作は、リクエストURLで表されるリクエストの対象と、WebRequest.Methodプロパティに設定する値によって変わります。 以下でリクエストURLの形式とMethodプロパティに指定可能な値、リクエストとレスポンスについて解説します。 ImapWebRequestクラスのプロパティのうち、リクエストに影響するその他のプロパティについては別項で説明します。
+

          
+
以下でリクエストURLの形式とMethodプロパティに指定可能な値、リクエストとレスポンスについて解説します。 ImapWebRequestクラスのプロパティのうち、リクエストに影響するその他のプロパティについては別項で説明します。
 

        

        
 
***サーバ・アカウントに対するリクエスト
***サーバ・アカウントに対するリクエスト
 
リクエストURLがサーバ・アカウントを表す場合(imap://imap.example.net/の形式)のリクエストとレスポンスの動作は次のとおりです。
リクエストURLがサーバ・アカウントを表す場合(imap://imap.example.net/の形式)のリクエストとレスポンスの動作は次のとおりです。
219,7 215,7
 
リクエストURLが特定のメッセージを表す場合(imap://imap.example.net/mailbox/;UID=1の形式)のリクエストとレスポンスの動作は次のとおりです。
リクエストURLが特定のメッセージを表す場合(imap://imap.example.net/mailbox/;UID=1の形式)のリクエストとレスポンスの動作は次のとおりです。
 

        

        
 
|Methodプロパティ|リクエスト|解説|レスポンス|h
|Methodプロパティ|リクエスト|解説|レスポンス|h
~
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメッセージの本文を取得します。|取得の際にBODY[]とBODY.PEEK[]のどちらを使用するかはImapWebRequest.FetchPeekプロパティで指定します。&br;該当するUIDのメッセージがない場合、WebExceptionStatus.SuccessのWebExceptionをスローします。|メッセージ本文はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 取得するメッセージのサイズはWebResponse.ContentLength、Content-TypeはWebResponse.ContentTypeプロパティに設定されます。|
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメッセージの本文を取得します。|該当するUIDのメッセージがない場合、WebExceptionStatus.SuccessのWebExceptionをスローします。|メッセージ本文はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 取得するメッセージのサイズはWebResponse.ContentLength、Content-TypeはWebResponse.ContentTypeプロパティに設定されます。|
 
|ImapWebRequestMethods.Copy, "COPY"|COPYコマンドを送信してメッセージを別のメールボックスにコピーします。|コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。|サーバがCOPYUIDレスポンスコードを返した場合は、コピーしたメッセージのURLがWebResponse.ResponseUriに設定されます。 また、コピー先のメールボックスを自動的に作成した場合、作成したメールボックスはImapWebResponse.Mailboxesプロパティに設定されます。|
|ImapWebRequestMethods.Copy, "COPY"|COPYコマンドを送信してメッセージを別のメールボックスにコピーします。|コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。|サーバがCOPYUIDレスポンスコードを返した場合は、コピーしたメッセージのURLがWebResponse.ResponseUriに設定されます。 また、コピー先のメールボックスを自動的に作成した場合、作成したメールボックスはImapWebResponse.Mailboxesプロパティに設定されます。|
 
|ImapWebRequestMethods.Expunge, "EXPUNGE"|STOREコマンドを送信して\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、URLで指定されたメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|-|
|ImapWebRequestMethods.Expunge, "EXPUNGE"|STOREコマンドを送信して\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、URLで指定されたメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|-|
 
|ImapWebRequestMethods.Store, "STORE"|STOREコマンドを送信してメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|-|
|ImapWebRequestMethods.Store, "STORE"|STOREコマンドを送信してメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|-|
236,92 232,38
 
ImapWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
ImapWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
 

        

        
 
|*ImapWebRequestクラスのプロパティ
|*ImapWebRequestクラスのプロパティ
~
|プロパティ|デフォルト|対象となるコマンド|解説|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
~
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます。|
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます|
 
|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、エラーレスポンスでもWebExceptionがスローされません。|
|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、エラーレスポンスでもWebExceptionがスローされません。|
 
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|
 
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
 
|ReadOnly|false|FETCH, SEARCH等|メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。|
|ReadOnly|false|FETCH, SEARCH等|メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。|
 
|AllowCreateMailbox|true|COPY|COPYコマンドを送信した際にサーバがレスポンスコードTRYCREATEを返した場合、自動的にメールボックスを作成するかどうかを指定します。 現在の実装では、APPENDコマンドでTRYCREATEが返された場合でもメールボックスは作成せず、常にエラーとなります。|
|AllowCreateMailbox|true|COPY|COPYコマンドを送信した際にサーバがレスポンスコードTRYCREATEを返した場合、自動的にメールボックスを作成するかどうかを指定します。 現在の実装では、APPENDコマンドでTRYCREATEが返された場合でもメールボックスは作成せず、常にエラーとなります。|
 
|DestinationUri|null|COPY, RENAME|COPYの場合はメッセージのコピー先メールボックス名、RENAMEの場合は変更後のメールボックス名を含むURLを指定します。 URLはコピー元・変更前(WebRequest.RequestUri)と同一サーバ、同一ユーザである必要があります。 それ以外の場合、ArgumentExceptionをスローします。|
|DestinationUri|null|COPY, RENAME|COPYの場合はメッセージのコピー先メールボックス名、RENAMEの場合は変更後のメールボックス名を含むURLを指定します。 URLはコピー元・変更前(WebRequest.RequestUri)と同一サーバ、同一ユーザである必要があります。 それ以外の場合、ArgumentExceptionをスローします。|
~
|Subscription|true|CREATE, DELETE, RENAME, COPY|メールボックスを作成・削除する際に、対象のメールボックスに対して自動的にSUBSCRIBE/UNSUBSCRIBEコマンドを送信し、購読・購読解除するかどうかを指定します。|
|Subscription|true|CREATE, DELETE, RENAME, COPY|メールボックスを作成・削除する際に、対象のメールボックスを自動的にSUBSCRIBE/UNSUBSCRIBEコマンドを送信して購読・購読解除するかどうかを指定します。|
 
|StoreDataItem|null|STORE|STOREコマンドでメッセージに追加・削除・設定するフラグを指定します。|
|StoreDataItem|null|STORE|STOREコマンドでメッセージに追加・削除・設定するフラグを指定します。|
 
|StatusDataItem|null|STATUS|STATUSコマンドで取得するメールボックスの情報を指定します。|
|StatusDataItem|null|STATUS|STATUSコマンドで取得するメールボックスの情報を指定します。|
 
|SortCriteria|null|SORT|SORTコマンドで使用するソート方法を指定します。|
|SortCriteria|null|SORT|SORTコマンドで使用するソート方法を指定します。|
 
|ThreadingAlgorithm|null|THREAD|THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。|
|ThreadingAlgorithm|null|THREAD|THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。|
 
|FetchBlockSize|10240|FETCH|FETCHコマンドでメッセージ本文を取得する際に、1回のFETCHコマンドで取得するブロックのサイズをバイト単位で指定します。|
|FetchBlockSize|10240|FETCH|FETCHコマンドでメッセージ本文を取得する際に、1回のFETCHコマンドで取得するブロックのサイズをバイト単位で指定します。|
+
|FetchPeek|true|FETCH|FETCHコマンドでメッセージ本文を取得する際に、BODY.PEEK[]とBODY[]のどちらを使用するかを指定します。 trueの場合はBODY.PEEK[]が使用され、取得したメッセージは未読のままになります。|
 

        

        
 
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
 

        

        
 
|*WebRequestクラスから継承されるプロパティ
|*WebRequestクラスから継承されるプロパティ
~
|プロパティ|デフォルト|対象となるコマンド|解説|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
 
|Timeout|-1|全て|リクエストを開始してからレスポンスを取得するまでのタイムアウト時間を指定します。|
|Timeout|-1|全て|リクエストを開始してからレスポンスを取得するまでのタイムアウト時間を指定します。|
 
|ReadWriteTimeout|300000|全て|ソケット送受信のタイムアウト時間を指定します。|
|ReadWriteTimeout|300000|全て|ソケット送受信のタイムアウト時間を指定します。|
 
|ContentLength|0|APPEND|メールボックスにアップロードするメッセージのサイズを指定します。|
|ContentLength|0|APPEND|メールボックスにアップロードするメッセージのサイズを指定します。|
 

        

        
 
以下のプロパティは、未テスト・不完全な実装に関連するプロパティです。 使用はできますが、今後廃止する可能性もあるので、現時点では使用を推奨できません。
以下のプロパティは、未テスト・不完全な実装に関連するプロパティです。 使用はできますが、今後廃止する可能性もあるので、現時点では使用を推奨できません。
 
|*ImapWebRequestクラスのプロパティ
|*ImapWebRequestクラスのプロパティ
~
|プロパティ|デフォルト|対象となるコマンド|解説|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
 
|UseDeflateIfAvailable|false|全て|サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます)|
|UseDeflateIfAvailable|false|全て|サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます)|
 
|AllowLoginRedirect|true|全て(認証時)|認証時にサーバがレスポンスコードREFERRALを返した場合、レスポンスコードで指定されたURLで再度ログインを試みるかどうかを指定します。(この機能は未テストです。 期待する動作となるかどうかは分かりません)
|AllowLoginRedirect|true|全て(認証時)|認証時にサーバがレスポンスコードREFERRALを返した場合、レスポンスコードで指定されたURLで再度ログインを試みるかどうかを指定します。(この機能は未テストです。 期待する動作となるかどうかは分かりません)
 

        

        
+
***ImapWebRequestクラスのデフォルト値の変更
+
ImapWebRequestDefaultsクラスのプロパティの値を変更することにより、ImapWebRequestクラスのプロパティに設定されるデフォルト値を一括して指定することができます。 全てのリクエストでデフォルトの値を変更したい場合は、ImapWebRequestDefaultsクラスのプロパティの値を変更してください。
+

          
+
ImapWebRequestDefaultsクラスにはImapWebRequestプロパティと同名のプロパティを用意してありますが、以下の一覧にあるプロパティはImapWebRequestでは設定できないプロパティです。
+

          
+
|*ImapWebRequestDefaultsクラスのプロパティ
+
|プロパティ|デフォルト|解説|h
+
|AnonymousToken|"anonymous"|匿名ユーザでログインする場合に使用されるユーザ名を指定します。|
+
|Subscription|true|ImapWebRequest.Subscriptionプロパティと同様ですが、falseにした場合WebRequest.Methodのデフォルト値が"LSUB"から"LIST"に変わります。|
+
|ClientID|name=(現在実行中のアセンブリの名前)&br;version=(現在実行中のアセンブリのバージョン)&br;environment=(ランタイムの名前とバージョン)|サーバが&urn2url(urn:ietf:rfc:2971){ID extension};をサポートしている場合に送信されるIDを指定します。|
+

          
 
***リクエストとIMAP URLに関するその他の留意事項
***リクエストとIMAP URLに関するその他の留意事項
 
-UIDVALIDITYを含むIMAP URLも扱えますが、無視します。 現時点ではUIDVALIDITYが指定されていない場合と同様に扱います。
-UIDVALIDITYを含むIMAP URLも扱えますが、無視します。 現時点ではUIDVALIDITYが指定されていない場合と同様に扱います。
 

        

        
+
**アプリケーション構成ファイルでの設定
+
アプリケーション構成ファイルを記述することにより、imap, imapsスキームの登録と、ImapWebRequestDefaultsクラスの値を変更することができます。 コード上での変更をしたくない場合、する必要がない場合などは、アプリケーション構成ファイルに設定を記述することができます。 以下はアプリケーション構成ファイルの記述例です。
+

          
+
#code(xml,アプリケーション構成ファイルの記述例){{
+
<?xml version="1.0" encoding="utf-8" ?>
+
<configuration>
+
  <configSections>
+
    <!-- smdn.net.imap4.client要素を処理するためのセクションハンドラクラスの設定 -->
+
    <sectionGroup name="smdn.net.imap4.client">
+
      <section name="webRequestDefaults" type="System.Configuration.DictionarySectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+
    </sectionGroup>
+
  </configSections>
+
  <system.net>
+
    <!-- imap, imapsスキームの登録 -->
+
    <webRequestModules>
+
      <add prefix="imap"  type="Smdn.Net.Imap4.WebClients.ImapWebRequestCreator, Smdn.Net.Imap4.Client" />
+
      <add prefix="imaps" type="Smdn.Net.Imap4.WebClients.ImapWebRequestCreator, Smdn.Net.Imap4.Client" />
+
    </webRequestModules>
+
  </system.net>
+
  <smdn.net.imap4.client>
+
    <!-- ImapWebRequestDefaultsクラスのデフォルト値の変更 -->
+
    <webRequestDefaults>
+
      <add key="timeout" value="-1"/>
+
      <add key="readWriteTimeout" value="-1"/>
+
      <add key="fetchBlockSize" value="102400"/>
+
      <add key="fetchPeek" value="true"/>
+
      <add key="subscription" value="true"/>
+
      <add key="allowCreateMailbox" value="true"/>
+
      <add key="useTlsIfAvailable" value="true"/>
+
      <add key="keepAlive" value="true"/>
+
      <add key="readOnly" value="false"/>
+
      <add key="anonymousToken" value="anonymous"/>
+
      <add key="usingSaslMechanisms" value="DIGEST-MD5, CRAM-MD5, NTLM"/>
+
      <add key="expectedErrorResponseCodes" value="ALREADYEXISTS, NONEXISTENT"/>
+
      <add key="clientID" value="name=MyImapClient, support-url=http://imap.example.net/support/"/>
+
    </webRequestDefaults>
+
  </smdn.net.imap4.client>
+
</configuration>
+
}}
+

          
+
記述内容については[[ネットワーク設定スキーマ:http://msdn.microsoft.com/ja-jp/library/dacty7ed%28VS.80%29.aspx]]および[[構成セクション スキーマ:http://msdn.microsoft.com/ja-jp/library/0hyxd0xc%28VS.80%29.aspx]]も合わせて参照してください。
+

          
 
**サンプル
**サンプル
 
***メッセージのコピー
***メッセージのコピー
 
INBOXにあるメッセージすべてをINBOX.backupにコピーする例。 AllowCreateMailboxプロパティをtrueにしておくことで、サーバがレスポンスコードTRYCREATEを返した場合は自動的にメールボックスを作成します。
INBOXにあるメッセージすべてをINBOX.backupにコピーする例。 AllowCreateMailboxプロパティをtrueにしておくことで、サーバがレスポンスコードTRYCREATEを返した場合は自動的にメールボックスを作成します。
352,7 294,7
 
using System;
using System;
 
using System.Net;
using System.Net;
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
~
using Smdn.Net.Imap4.Protocol;
using Smdn.Net.Imap4.Protocol.Client;
 
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClients;
 
  :
  :
 

        

        
375,7 317,7
 
using System;
using System;
 
using System.Net;
using System.Net;
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
~
using Smdn.Net.Imap4.Protocol;
using Smdn.Net.Imap4.Protocol.Client;
 
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClients;
 
  :
  :
 

        

        
434,6 376,7
 
using System.Text;
using System.Text;
 

        

        
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
-
using Smdn.Net.Imap4.Protocol.Client;
 
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClients;
 
  :
  :
 

        

        
524,7 467,7
 
class Sample {
class Sample {
 
  public static void Main()
  public static void Main()
 
  {
  {
~
    ImapConnection.ServerCertificateValidationCallback += delegate {
    ImapConnection.CertificateValidationCallback += delegate {
 
      return true;
      return true;
 
    };
    };
 

        

        

works/libs/Smdn.Net.Imap4/index.wiki.txt

current previous
10,35 10,34
 
--[[works/libs/Smdn.Formats.Mime]]
--[[works/libs/Smdn.Formats.Mime]]
 

        

        
 
*機能
*機能
~
**主な機能
すべての標準コマンドといくつかの拡張コマンドの送受信、SSL/TLS接続(IMAP over SSL, STARTTLS)、SASL認証メカニズムなどに対応しています。
+
+すべての標準コマンドの送受信
+
+いくつかの拡張コマンドの送受信
+
++IDLE
+
++QUOTA
+
++SORT/THREADほか
+
+SSL/TLS接続(IMAP over SSL, STARTTLS)
+
+SASL認証メカニズム(DIGEST-MD5他)
 

        

        
~
その他、サポートしている機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]をご覧ください。
使用可能なコマンド
-
:認証系コマンド|LOGIN, AUTHENTICATE, LOGOUT, STARTTLS
-
::SASL認証方式|DIGEST-MD5, CRAM-MD5, NTLM, PLAIN, LOGIN, ANONYMOUS
-
SASLの実装は[[works/libs/Smdn.Security.Authentication.Sasl]]に含まれています
-
:メールボックス操作系コマンド|
-
::標準コマンド|CREATE, RENAME, DELETE, CLOSE, SELECT, EXAMINE, LIST, LSUB, STATUS, SUBSCRIBE, UNSUBSCRIBE
-
::拡張コマンド|RLIST, RLSUB, LIST(LIST-EXTENDED), XLIST(Gimap), UNSELECT, NAMESPACE
-
:メッセージ操作系コマンド|
-
::標準コマンド|APPEND,SEARCH, EXPUNGE
-
::拡張コマンド|(UID)SORT,, UID EXPUNGE
-
:その他のコマンド|
-
::標準コマンド|NOOP, CHECK, CAPABILITY
-
::拡張コマンド|ENABLE, COMPRESS, IDLE, ID, COMPARATOR, LANGUAGE
 

        

        
~
**クライアント実装
実装しているクライアントは次の二種類です。
+
クライアント実装として以下の2つのクラスを用意しています。
 
:ImapSessionクラス|IMAPコマンドと1対1に対応するメソッドを持つクライアント
:ImapSessionクラス|IMAPコマンドと1対1に対応するメソッドを持つクライアント
 
:ImapWebRequest/ImapWebResponseクラス|WebRequest/WebResponseクラスから派生し、IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)での操作に対応したクライアント
:ImapWebRequest/ImapWebResponseクラス|WebRequest/WebResponseクラスから派生し、IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)での操作に対応したクライアント
 

        

        
~
**その他の主な特徴
その他、サポートしている機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]をご覧ください。
+
:メッセージ本文はStreamとして取得可能|メッセージの加工・解析は任意の手段を使用できるよう、Streamとして返します。 MIMEメッセージのデコード機能は含んでいません。
+
:StreamReader, Regexは不使用|送受信時の文字列処理はstringではなくbyte[]のまま処理しています。 byte[]⇄stringの変換に起因する不必要なメモリの消費と速度の低下はできる限り抑えてあります。 また、大きなメッセージを取得してもLarge Object Heapを消費しないよう実装しています。
+
:ログ出力にTraceSourceを使用|送受信内容・動作状況のログをTraceListenerで取得できます。 またログ出力のレベルを設定できます。 イベントハンドラによる送受信時のフックは無駄と考え用意していません。
+
:パース済みのレスポンスにアクセス可能|受信したレスポンスは必要な部分だけを拾い読みして結果を返すのではなく、全てパースしてから結果を返します。
+
:フリー・オープンソース|本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license]]を採用しています。
 

        

        
 
*ダウンロード
*ダウンロード
 
#googleadunit
#googleadunit
 

        

        
 
本ライブラリはMIT X11ライセンスでのリリースとなります。
本ライブラリはMIT X11ライセンスでのリリースとなります。
 

        

        
~
:最新版|${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.25.tar.bz2}
:最新版|${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.24.tar.bz2}
 
:開発版|[[anonsvn]]よりチェックアウトできます
:開発版|[[anonsvn]]よりチェックアウトできます
 

        

        
 
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
54,8 53,8
 
class GimapFetchExample {
class GimapFetchExample {
 
  public static void Main()
  public static void Main()
 
  {
  {
~
    ImapWebRequestCreator.RegisterPrefix();
    ImapSessionManager.RegisterWebRequestPrefix();
~
    ImapSessionManager.ServerCertificateValidationCallback += delegate {
    ImapSessionManager.CertificateValidationCallback += delegate {
 
      return true;
      return true;
 
    };
    };
 

        

        
91,8 90,7
 

        

        
 
*制限事項・特記事項
*制限事項・特記事項
 
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
~
-SASLの実装は、本体とは別ライブラリの[[works/libs/Smdn.Security.Authentication.Sasl]]に含まれています。
-実装にあたり、セキュリティ上の考慮はしていますが、保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
+
-実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
 

        

        
 
*参考文献
*参考文献
 
#amazon(4873110289,left,content)
#amazon(4873110289,left,content)

works/libs/Smdn.Net.Imap4/feature/index.wiki.txt

current previous
13,7 13,7
 
**standards and IMAP extensions
**standards and IMAP extensions
 
サポートする標準仕様およびIMAP拡張仕様の一覧です。 標準化されていないドラフトも一部サポートしています。
サポートする標準仕様およびIMAP拡張仕様の一覧です。 標準化されていないドラフトも一部サポートしています。
 
|RFC|capability name|status|note|h
|RFC|capability name|status|note|h
~
|&urn2url(urn:ietf:rfc:2087,anchor-text);|QUOTA|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:2087,anchor-text);|QUOTA|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:2088,anchor-text);|LITERAL+|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:2088,anchor-text);|LITERAL+|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:2177,anchor-text);|IDLE|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:2177,anchor-text);|IDLE|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:2180,anchor-text);|-|&color(orange){partially implemented};||
|&urn2url(urn:ietf:rfc:2180,anchor-text);|-|&color(orange){partially implemented};||
27,7 27,7
 
|&urn2url(urn:ietf:rfc:3348,anchor-text);|CHILDREN|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:3348,anchor-text);|CHILDREN|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:3501,anchor-text);|IMAP4rev1|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:3501,anchor-text);|IMAP4rev1|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:3502,anchor-text);|MULTIAPPEND|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:3502,anchor-text);|MULTIAPPEND|&color(green){implemented};||
~
|&urn2url(urn:ietf:rfc:3516,anchor-text);|BINARY|&color(red){not tested};||
|&urn2url(urn:ietf:rfc:3516,anchor-text);|BINARY|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:3691,anchor-text);|UNSELECT|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:3691,anchor-text);|UNSELECT|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:4314,anchor-text);|ACL|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:4314,anchor-text);|ACL|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:4314,anchor-text);|RIGHTS=*|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:4314,anchor-text);|RIGHTS=*|&color(gray){not implemented};||
57,10 57,10
 
|&urn2url(urn:ietf:rfc:5267,anchor-text);|CONTEXT=SEARCH|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:5267,anchor-text);|CONTEXT=SEARCH|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:5267,anchor-text);|CONTEXT=SORT|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:5267,anchor-text);|CONTEXT=SORT|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:5267,anchor-text);|ESORT|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:5267,anchor-text);|ESORT|&color(green){implemented};||
~
|&urn2url(urn:ietf:rfc:5464,anchor-text);|METADATA|&color(red){not tested};||
|&urn2url(urn:ietf:rfc:5464,anchor-text);|METADATA|&color(gray){not implemented};||
~
|&urn2url(urn:ietf:rfc:5464,anchor-text);|METADATA-SERVER|&color(red){not tested};||
|&urn2url(urn:ietf:rfc:5464,anchor-text);|METADATA-SERVER|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:5465,anchor-text);|NOTIFY|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:5465,anchor-text);|NOTIFY|&color(gray){not implemented};||
~
|&urn2url(urn:ietf:rfc:5466,anchor-text);|FILTERS|&color(red){not tested};||
|&urn2url(urn:ietf:rfc:5466,anchor-text);|FILTERS|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:5524,anchor-text);|URLAUTH=BINARY|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:5524,anchor-text);|URLAUTH=BINARY|&color(gray){not implemented};||
 
|&urn2url(urn:ietf:rfc:5530,anchor-text);|-|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:5530,anchor-text);|-|&color(green){implemented};||
 
|&urn2url(urn:ietf:id:ietf-morg-inthread-00,anchor-text);|SEARCH=INTHREAD|&color(green){implemented};||
|&urn2url(urn:ietf:id:ietf-morg-inthread-00,anchor-text);|SEARCH=INTHREAD|&color(green){implemented};||
102,9 102,9
 
|STORE, UID STORE|&urn2url(urn:ietf:rfc:3501,#6.4.6,short); &urn2url(urn:ietf:rfc:3501,#6.4.11,short); &urn2url(urn:ietf:rfc:4466,#2.5,short);|&color(green){implemented};||
|STORE, UID STORE|&urn2url(urn:ietf:rfc:3501,#6.4.6,short); &urn2url(urn:ietf:rfc:3501,#6.4.11,short); &urn2url(urn:ietf:rfc:4466,#2.5,short);|&color(green){implemented};||
 
|COPY, UID COPY|&urn2url(urn:ietf:rfc:3501,#6.4.7,short); &urn2url(urn:ietf:rfc:3501,#6.4.11,short);|&color(green){implemented};|Modified UTF-7対応&sub{*1};|
|COPY, UID COPY|&urn2url(urn:ietf:rfc:3501,#6.4.7,short); &urn2url(urn:ietf:rfc:3501,#6.4.11,short);|&color(green){implemented};|Modified UTF-7対応&sub{*1};|
 
|~Extensions|-|-|-|
|~Extensions|-|-|-|
~
|SETQUOTA|&urn2url(urn:ietf:rfc:2087,#4.1,short);|&color(green){implemented};||
|SETQUOTA|&urn2url(urn:ietf:rfc:2087,#4.1,short);|&color(gray){not implemented};||
~
|GETQUOTA|&urn2url(urn:ietf:rfc:2087,#4.2,short);|&color(green){implemented};||
|GETQUOTA|&urn2url(urn:ietf:rfc:2087,#4.2,short);|&color(gray){not implemented};||
~
|GETQUOTAROOT|&urn2url(urn:ietf:rfc:2087,#4.3,short);|&color(green){implemented};||
|GETQUOTAROOT|&urn2url(urn:ietf:rfc:2087,#4.3,short);|&color(gray){not implemented};||
 
|IDLE|&urn2url(urn:ietf:rfc:2177,#3,short);|&color(green){implemented};||
|IDLE|&urn2url(urn:ietf:rfc:2177,#3,short);|&color(green){implemented};||
 
|RLIST|&urn2url(urn:ietf:rfc:2193,#5.1,short);|&color(red){not tested};||
|RLIST|&urn2url(urn:ietf:rfc:2193,#5.1,short);|&color(red){not tested};||
 
|RLSUB|&urn2url(urn:ietf:rfc:2193,#5.2,short);|&color(red){not tested};||
|RLSUB|&urn2url(urn:ietf:rfc:2193,#5.2,short);|&color(red){not tested};||
135,8 135,8
 
|THREAD, UID THREAD|&urn2url(urn:ietf:rfc:5256,#3,short);|&color(green){implemented};|非ASCII文字での検索に対応&sub{*2};|
|THREAD, UID THREAD|&urn2url(urn:ietf:rfc:5256,#3,short);|&color(green){implemented};|非ASCII文字での検索に対応&sub{*2};|
 
|CONVERSIONS|&urn2url(urn:ietf:rfc:5259,#5.1,short);|&color(gray){not implemented};||
|CONVERSIONS|&urn2url(urn:ietf:rfc:5259,#5.1,short);|&color(gray){not implemented};||
 
|CONVERT, UID CONVERT|&urn2url(urn:ietf:rfc:5259,#6,short);|&color(gray){not implemented};||
|CONVERT, UID CONVERT|&urn2url(urn:ietf:rfc:5259,#6,short);|&color(gray){not implemented};||
~
|GETMETADATA|&urn2url(urn:ietf:rfc:5464,#4.2,short);|&color(red){not tested};||
|GETMETADATA|&urn2url(urn:ietf:rfc:5464,#4.2,short);|&color(gray){not implemented};||
~
|SETMETADATA|&urn2url(urn:ietf:rfc:5464,#4.3,short);|&color(red){not tested};||
|SETMETADATA|&urn2url(urn:ietf:rfc:5464,#4.3,short);|&color(gray){not implemented};||
 
|NOTIFY|&urn2url(urn:ietf:rfc:5465,#3.1,short);|&color(gray){not implemented};||
|NOTIFY|&urn2url(urn:ietf:rfc:5465,#3.1,short);|&color(gray){not implemented};||
 
|CREATE with special-use flags|&urn2url(urn:ietf:id:ietf-morg-list-specialuse-00,anchor-text);|&color(gray){not implemented};||
|CREATE with special-use flags|&urn2url(urn:ietf:id:ietf-morg-list-specialuse-00,anchor-text);|&color(gray){not implemented};||
 
|LIST with STATUS return option|&urn2url(urn:ietf:id:ietf-morg-status-in-list-01,anchor-text);|&color(green){implemented};||
|LIST with STATUS return option|&urn2url(urn:ietf:id:ietf-morg-status-in-list-01,anchor-text);|&color(green){implemented};||
162,7 162,7
 
|UIDNEXT|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
|UIDNEXT|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
 
|UIDVALIDITY|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
|UIDVALIDITY|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
 
|UNSEEN|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
|UNSEEN|&urn2url(urn:ietf:rfc:3501,short);|&color(green){implemented};||
~
|UNKNOWN-CTE|&urn2url(urn:ietf:rfc:3516,short);|&color(orange){partially implemented};|通常のNOレスポンスと同様&sub{*1};に扱います。|
|UNKNOWN-CTE|&urn2url(urn:ietf:rfc:3516,short);|&color(gray){not implemented};||
 
|UIDNOTSTICKY|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
|UIDNOTSTICKY|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
 
|APPENDUID|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
|APPENDUID|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
 
|COPYUID|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
|COPYUID|&urn2url(urn:ietf:rfc:4315,short);|&color(green){implemented};||
182,13 182,10
 
|MAXCONVERTMESSAGES|&urn2url(urn:ietf:rfc:5259,short);|&color(gray){not implemented};||
|MAXCONVERTMESSAGES|&urn2url(urn:ietf:rfc:5259,short);|&color(gray){not implemented};||
 
|MAXCONVERTPARTS|&urn2url(urn:ietf:rfc:5259,short);|&color(gray){not implemented};||
|MAXCONVERTPARTS|&urn2url(urn:ietf:rfc:5259,short);|&color(gray){not implemented};||
 
|NOUPDATE|&urn2url(urn:ietf:rfc:5267,short);|&color(gray){not implemented};||
|NOUPDATE|&urn2url(urn:ietf:rfc:5267,short);|&color(gray){not implemented};||
~
|METADATA LONGENTRIES|&urn2url(urn:ietf:rfc:5464,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
|METADATA|&urn2url(urn:ietf:rfc:5464,short);|&color(gray){not implemented};||
+
|METADATA MAXSIZE|&urn2url(urn:ietf:rfc:5464,short);|&color(orange){partially implemented};|通常のNOレスポンスと同様&sub{*1};に扱います。|
+
|METADATA TOOMANY|&urn2url(urn:ietf:rfc:5464,short);|&color(orange){partially implemented};|通常のNOレスポンスと同様&sub{*1};に扱います。|
+
|METADATA NOPRIVATE|&urn2url(urn:ietf:rfc:5464,short);|&color(orange){partially implemented};|通常のNOレスポンスと同様&sub{*1};に扱います。|
 
|NOTIFICATIONOVERFLOW|&urn2url(urn:ietf:rfc:5465,short);|&color(gray){not implemented};||
|NOTIFICATIONOVERFLOW|&urn2url(urn:ietf:rfc:5465,short);|&color(gray){not implemented};||
 
|BADEVENT|&urn2url(urn:ietf:rfc:5465,short);|&color(gray){not implemented};||
|BADEVENT|&urn2url(urn:ietf:rfc:5465,short);|&color(gray){not implemented};||
~
|UNDEFINED-FILTER|&urn2url(urn:ietf:rfc:5466,short);|&color(orange){partially implemented};|通常のNOレスポンスと同様&sub{*1};に扱います。|
|UNDEFINED-FILTER|&urn2url(urn:ietf:rfc:5466,short);|&color(gray){not implemented};||
 
|UNAVAILABLE|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
|UNAVAILABLE|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
 
|AUTHENTICATIONFAILED|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
|AUTHENTICATIONFAILED|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
 
|AUTHORIZATIONFAILED|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|
|AUTHORIZATIONFAILED|&urn2url(urn:ietf:rfc:5530,short);|&color(orange){partially implemented};|通常のレスポンスと同様&sub{*1};に扱います。|

works/libs/Smdn.Net.Pop3/releases/index.wiki.txt

current previous
4,7 4,6
 

        

        
 
*リリース一覧
*リリース一覧
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.25.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.24.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.24.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.23.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.23.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.22.tar.bz2}
--${smdncms:distfilelink,../Smdn.Net.Pop3.Client-0.22.tar.bz2}
14,28 13,6
 
0.20以降はMIT X11ライセンスでのリリースとなります。 0.20より前のバージョンについては特に使用条件を定めていません。
0.20以降はMIT X11ライセンスでのリリースとなります。 0.20より前のバージョンについては特に使用条件を定めていません。
 

        

        
 
*変更履歴
*変更履歴
+
**0.25
+
主にアプリケーション構成ファイルでの設定のサポート、パフォーマンスと.NET Frameworkでの動作の改善。
+

          
+
-機能追加
+
--WebClients名前空間
+
---アプリケーション構成ファイルのconfiguration/system.net/webRequestModules要素でpop/popsスキームを登録できるようにした
+
---PopWebRequestDefaultsクラスを追加、コード内もしくはアプリケーション構成ファイルでPopWebRequestの各プロパティのデフォルト値を設定できるようにした
+
-修正・改善
+
--PopResponseCodeをSmdn.Net.Pop3.Protocol.ClientからSmdn.Net.Pop3.Protocolに移動
+
--SslStream.AuthenticateAsClientでAuthenticationExceptionが発生した場合、ストリームを閉じるようにした
+
--ライブラリ内のメッセージとサーバからのレスポンスを区別できるように内部処理と書式を変更した
+
--パフォーマンス関連
+
---レスポンスパーサの実装を最適化、冗長な処理を削除
+
---文字列比較処理を最適化
+
---ロック処理にSemaphoreを使用していた箇所をMonitorに置き換えた
+
--.NET Framework関連
+
---NetworkCredentialの各プロパティがnullを返すことを期待していた実装を修正、nullではなくstring.Emptyの場合に認証をキャンセルするようにした
+
---SocketError.TimedOutのSocketExceptionが発生した場合、ImapConnectionExceptionではなくTimeoutExceptionをスローするようにした
+
--WebClients名前空間
+
---SslStream作成用のコールバック、証明書関連のコールバックのプロパティ名を変更、また値をPopConnectionと共有しないようにした
+
---PopSessionManagerからIWebRequestCreateの実装を分離、WebRequest.RegisterPrefixはPopWebRequestCreator.RegisterPrefixで行うようにした
+

          
 
**0.24
**0.24
 
-機能追加
-機能追加
 
--拡張コマンドなど任意のコマンドを送信するためのメソッドを追加
--拡張コマンドなど任意のコマンドを送信するためのメソッドを追加

works/libs/Smdn.Net.Pop3/doc/index.wiki.txt

current previous
1,6 1,6
 
${smdncms:title,ドキュメント・サンプル}
${smdncms:title,ドキュメント・サンプル}
 
${smdncms:keywords,}
${smdncms:keywords,}
~
[[works/libs/Smdn.Net.Pop3]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.25時点のもので、記載不備などがあるかもしれません。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
[[works/libs/Smdn.Net.Pop3]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.24時点のもので、記載不備などがあるかもしれません。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*使用例
*使用例
 
個々のサンプルの詳細については、後述するSmdn.Net.Pop3.WebClients名前空間の説明を参照してください。
個々のサンプルの詳細については、後述するSmdn.Net.Pop3.WebClients名前空間の説明を参照してください。
11,12 11,12
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

        
~
using Smdn.Net.Pop3.WebClients;
using Smdn.Net.Imap4.WebClients;
 

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    PopWebRequestCreator.RegisterPrefix();
    PopSessionManager.RegisterWebRequestPrefix();
 

        

        
 
    using {
    using {
 
      client.Credentials = new NetworkCredential("user", "pass");
      client.Credentials = new NetworkCredential("user", "pass");
40,8 40,8
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    PopWebRequestCreator.RegisterPrefix();
    PopSessionManager.RegisterWebRequestPrefix();
~
    PopSessionManager.ServerCertificateValidationCallback += delegate {
    PopSessionManager.CertificateValidationCallback += delegate {
 
      return true;
      return true;
 
    };
    };
 

        

        
94,13 94,11
 
の順でPOPコマンドを実行、レスポンスを取得できます。 以下でSmdn.Net.Pop3.WebClientsに固有な部分について解説します。
の順でPOPコマンドを実行、レスポンスを取得できます。 以下でSmdn.Net.Pop3.WebClientsに固有な部分について解説します。
 

        

        
 
**pop, popsスキームの登録
**pop, popsスキームの登録
~
Smdn.Net.Pop3.WebClients名前空間のクラスを使う場合には、WebRequestクラスがpopスキームおよびpopsスキームのURLを処理できるようにPopWebRequestCreator.RegisterPrefixメソッドを呼び出しておく必要があります。
Smdn.Net.Pop3.WebClients名前空間のクラスを使う場合には、WebRequestクラスがpopスキームおよびpopsスキームのURLを処理できるようにPopSessionManager.RegisterWebRequestPrefixメソッドを呼び出しておく必要があります。
 

        

        
~
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、popスキームおよびpopsスキームに対してPopWebRequestCreatorを関連付けます。
このメソッドはWebRequest.RegisterPrefixメソッドを呼び出し、popスキームおよびpopsスキームに対してPopSessionManagerを関連付けます。
 

        

        
 
**リクエストURLと接続時の動作
**リクエストURLと接続時の動作
+
接続時の動作は&urn2url(urn:ietf:rfc:2384);に記述されている内容に準じた動作となるようにしています。 (ただしpopsスキームを使用した場合にSSL/TLSでの接続を試みる動作は本ライブラリ固有の動作です)
+

          
 
***SSL/TLS・接続ポート
***SSL/TLS・接続ポート
 
リクエストURLのスキームがpopsの場合は、常にSSL/TLSでの接続を試みます。 スキームがpopの場合は、PopWebRequest.UseTlsIfAvailableプロパティがtrueで、かつサーバがSTLSに対応している場合、認証を開始する前にSSL/TLSを使用した接続にアップグレードします。 URLでポート番号を指定しない場合、デフォルトのポート(popは110、popsは995)に接続します。
リクエストURLのスキームがpopsの場合は、常にSSL/TLSでの接続を試みます。 スキームがpopの場合は、PopWebRequest.UseTlsIfAvailableプロパティがtrueで、かつサーバがSTLSに対応している場合、認証を開始する前にSSL/TLSを使用した接続にアップグレードします。 URLでポート番号を指定しない場合、デフォルトのポート(popは110、popsは995)に接続します。
 

        

        
123,11 121,11
 

        

        
 
|*リクエストURLの形式と認証動作の例
|*リクエストURLの形式と認証動作の例
 
|リクエストURLの形式|ユーザ名|使用する認証メカニズム|h
|リクエストURLの形式|ユーザ名|使用する認証メカニズム|h
~
|pop://user;AUTH=+APOP&#x40;pop.example.net/|user|APOP|
|pop://user;AUTH=+APOP@pop.example.net/|user|APOP|
~
|pop://user;AUTH=DIGEST-MD5&#x40;pop.example.net/|user|DIGEST-MD5|
|pop://user;AUTH=DIGEST-MD5@pop.example.net/|user|DIGEST-MD5|
~
|pop://;AUTH=DIGEST-MD5&#x40;pop.example.net/|WebRequest.Credentialsより取得|DIGEST-MD5|
|pop://;AUTH=DIGEST-MD5@pop.example.net/|WebRequest.Credentialsより取得|DIGEST-MD5|
~
|pop://user;AUTH=*&#x40;pop.example.net/&br;pop://user&#x40;pop.example.net/|user|サーバ・クライアントが対応しているものを順に試行|
|pop://user;AUTH=*@pop.example.net/&br;pop://user@pop.example.net/|user|サーバ・クライアントが対応しているものを順に試行|
~
|pop://;AUTH=ANONYMOUS&#x40;pop.example.net/|匿名ユーザ(anonymous)|ANONYMOUS|
|pop://;AUTH=ANONYMOUS@pop.example.net/|匿名ユーザ(anonymous)|ANONYMOUS|
 
|pop://pop.example.net/|匿名ユーザ(anonymous)|ANONYMOUSもしくはUSER/PASSコマンドを使用|
|pop://pop.example.net/|匿名ユーザ(anonymous)|ANONYMOUSもしくはUSER/PASSコマンドを使用|
 

        

        
 
試行する認証メカニズムを制御するには、後述するPopWebRequest.UsingSaslMechanismsプロパティの値を変更してください。
試行する認証メカニズムを制御するには、後述するPopWebRequest.UsingSaslMechanismsプロパティの値を変更してください。
175,8 173,8
 
PopWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
PopWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
 

        

        
 
|*PopWebRequestクラスのプロパティ
|*PopWebRequestクラスのプロパティ
~
|プロパティ|デフォルト|対象となるコマンド|解説|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
~
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます。|
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます|
 
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|
 
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
 
|DeleteAfterRetrieve|false|RETR|RETRコマンドでのメッセージの受信が成功した場合、同じメッセージに対して自動的にDELEコマンドを発行します。|
|DeleteAfterRetrieve|false|RETR|RETRコマンドでのメッセージの受信が成功した場合、同じメッセージに対して自動的にDELEコマンドを発行します。|
185,56 183,10
 
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
 

        

        
 
|*WebRequestクラスから継承されるプロパティ
|*WebRequestクラスから継承されるプロパティ
~
|プロパティ|デフォルト|対象となるコマンド|解説|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
 
|Timeout|-1|全て|リクエストを開始してからレスポンスを取得するまでのタイムアウト時間を指定します。|
|Timeout|-1|全て|リクエストを開始してからレスポンスを取得するまでのタイムアウト時間を指定します。|
 
|ReadWriteTimeout|300000|全て|ソケット送受信のタイムアウト時間を指定します。|
|ReadWriteTimeout|300000|全て|ソケット送受信のタイムアウト時間を指定します。|
 

        

        
+
***PopWebRequestクラスのデフォルト値の変更
+
PopWebRequestDefaultsクラスのプロパティの値を変更することにより、PopWebRequestクラスのプロパティに設定されるデフォルト値を一括して指定することができます。 全てのリクエストでデフォルトの値を変更したい場合は、PopWebRequestDefaultsクラスのプロパティの値を変更してください。
+

          
+
PopWebRequestDefaultsクラスにはPopWebRequestプロパティと同名のプロパティを用意してありますが、以下の一覧にあるプロパティはPopWebRequestでは設定できないプロパティです。
+

          
+
|*PopWebRequestDefaultsクラスのプロパティ
+
|プロパティ|デフォルト|解説|h
+
|AnonymousToken|"anonymous"|匿名ユーザでログインする場合に使用されるユーザ名を指定します。|
+

          
+
**アプリケーション構成ファイルでの設定
+
アプリケーション構成ファイルを記述することにより、pop, popsスキームの登録と、PopWebRequestDefaultsクラスのデフォルト値を変更することができます。 コード上での変更をしたくない場合、する必要がない場合などは、アプリケーション構成ファイルに設定を記述することができます。 以下はアプリケーション構成ファイルの記述例です。
+

          
+
#code(xml,アプリケーション構成ファイルの記述例){{
+
<?xml version="1.0" encoding="utf-8" ?>
+
<configuration>
+
  <configSections>
+
    <!-- smdn.net.pop3.client要素を処理するためのセクションハンドラクラスの設定 -->
+
    <sectionGroup name="smdn.net.pop3.client">
+
      <section name="webRequestDefaults" type="System.Configuration.DictionarySectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
+
    </sectionGroup>
+
  </configSections>
+
  <system.net>
+
    <!-- pop, popsスキームの登録 -->
+
    <webRequestModules>
+
      <add prefix="pop"   type="Smdn.Net.Pop3.WebClients.PopWebRequestCreator, Smdn.Net.Pop3.Client" />
+
      <add prefix="pops"  type="Smdn.Net.Pop3.WebClients.PopWebRequestCreator, Smdn.Net.Pop3.Client" />
+
    </webRequestModules>
+
  </system.net>
+
  <smdn.net.pop3.client>
+
    <!-- PopWebRequestDefaultsクラスのデフォルト値の変更 -->
+
    <webRequestDefaults>
+
      <add key="timeout" value="-1"/>
+
      <add key="readWriteTimeout" value="-1"/>
+
      <add key="useTlsIfAvailable" value="true"/>
+
      <add key="deleteAfterRetrieve" value="false"/>
+
      <add key="keepAlive" value="true"/>
+
      <add key="anonymousToken" value="anonymous"/>
+
      <add key="usingSaslMechanisms" value="DIGEST-MD5, CRAM-MD5, NTLM"/>
+
      <add key="expectedErrorResponseCodes" value="ALREADYEXISTS, NONEXISTENT"/>
+
    </webRequestDefaults>
+
  </smdn.net.pop3.client>
+
</configuration>
+
}}
+

          
+
記述内容については[[ネットワーク設定スキーマ:http://msdn.microsoft.com/ja-jp/library/dacty7ed%28VS.80%29.aspx]]および[[構成セクション スキーマ:http://msdn.microsoft.com/ja-jp/library/0hyxd0xc%28VS.80%29.aspx]]も合わせて参照してください。
+

          
 
*Smdn.Net.Pop3.Client.Session名前空間
*Smdn.Net.Pop3.Client.Session名前空間
 
Smdn.Net.Pop3.Client.Session名前空間のクラスの使い方。 このドキュメントは作成中です。 [[works/tools/junk/TundereBird]]およびSmdn.Net.Pop3.WebClientsの各クラスの実装を参照してください。
Smdn.Net.Pop3.Client.Session名前空間のクラスの使い方。 このドキュメントは作成中です。 [[works/tools/junk/TundereBird]]およびSmdn.Net.Pop3.WebClientsの各クラスの実装を参照してください。
 

        

        
253,7 205,7
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
 
  {
  {
~
    PopConnection.ServerCertificateValidationCallback += delegate {
    PopConnection.CertificateValidationCallback += delegate {
 
      return true;
      return true;
 
    };
    };
 

        

        

works/libs/Smdn.Net.Pop3/index.wiki.txt

current previous
9,33 9,26
 
--[[works/libs/Smdn.Security.Authentication.Sasl]]
--[[works/libs/Smdn.Security.Authentication.Sasl]]
 
--[[works/libs/Smdn.Formats.Mime]]
--[[works/libs/Smdn.Formats.Mime]]
 

        

        
~
*機能と特徴
*機能
~
**主な機能
すべての標準コマンドといくつかの拡張コマンドの送受信、SSL/TLS接続(POP over SSL, STLS)、SASL認証メカニズムなどに対応しています。
+
+すべての標準コマンドといくつかの拡張コマンドの送受信
+
+SSL/TLS接続(POP over SSL, STLS)
+
+APOP
+
+SASL認証メカニズム(DIGEST-MD5他)
 

        

        
~
その他、サポートしている機能の詳細は「実装済み機能一覧」の項をご覧ください。
使用可能なコマンド。
-
:認証系コマンド|USER, PASS, QUIT, APOP, AUTH(&urn2url(urn:ietf:rfc:5034,short);)
-
::SASL認証方式|DIGEST-MD5, CRAM-MD5, NTLM, PLAIN, LOGIN, ANONYMOUS
-
SASLの実装は[[works/libs/Smdn.Security.Authentication.Sasl]]に含まれています
-
:メッセージ操作系コマンド|STAT, LIST, RETR, DELE, TOP, UIDL, RSET
-
:その他のコマンド|NOOP, CAPA(&urn2url(urn:ietf:rfc:2449,short);), STLS(&urn2url(urn:ietf:rfc:2595,short);)
 

        

        
~
**クライアント実装
実装しているクライアントは次の二種類です。
+
クライアント実装として以下の2つのクラスを用意しています。
 
:PopSessionクラス|POPコマンドと1対1に対応するメソッドを持つクライアント
:PopSessionクラス|POPコマンドと1対1に対応するメソッドを持つクライアント
 
:PopWebRequest/PopWebResponseクラス|WebRequest/WebResponseクラスから派生し、POP URL(&urn2url(urn:ietf:rfc:2384,short);)での操作に対応したクライアント
:PopWebRequest/PopWebResponseクラス|WebRequest/WebResponseクラスから派生し、POP URL(&urn2url(urn:ietf:rfc:2384,short);)での操作に対応したクライアント
 

        

        
+
**その他の主な特徴
+
:メッセージ本文はStreamとして取得可能|メッセージの加工・解析は任意の手段を使用できるよう、Streamとして返します。 MIMEメッセージのデコード機能は含んでいません。
+
:StreamReader, Regexは不使用|送受信時の文字列処理はstringではなくbyte[]のまま処理しています。 byte[]⇄stringの変換に起因する不必要なメモリの消費と速度の低下はできる限り抑えてあります。 また、大きなメッセージを取得してもLarge Object Heapを消費しないよう実装しています。
+
:ログ出力にTraceSourceを使用|送受信内容・動作状況のログをTraceListenerで取得できます。 またログ出力のレベルを設定できます。 イベントハンドラによる送受信時のフックは無駄と考え用意していません。
+
:パース済みのレスポンスにアクセス可能|受信したレスポンスは必要な部分だけを拾い読みして結果を返すのではなく、全てパースしてから結果を返します。
+
:フリー・オープンソース|本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license]]を採用しています。
+

          
 
*ダウンロード
*ダウンロード
 
#googleadunit
#googleadunit
 

        

        
 
本ライブラリはMIT X11ライセンスでのリリースとなります。
本ライブラリはMIT X11ライセンスでのリリースとなります。
 

        

        
~
:最新版|${smdncms:distfilelink,Smdn.Net.Pop3.Client-0.25.tar.bz2}
:最新版|${smdncms:distfilelink,Smdn.Net.Pop3.Client-0.24.tar.bz2}
 
:開発版|[[anonsvn]]よりチェックアウトできます
:開発版|[[anonsvn]]よりチェックアウトできます
 

        

        
 
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
51,8 44,8
 
class GpopRetrieveExample {
class GpopRetrieveExample {
 
  public static void Main()
  public static void Main()
 
  {
  {
~
    PopWebRequestCreator.RegisterPrefix();
    PopSessionManager.RegisterWebRequestPrefix();
~
    PopSessionManager.ServerCertificateValidationCallback += delegate {
    PopSessionManager.CertificateValidationCallback += delegate {
 
      return true;
      return true;
 
    };
    };
 

        

        
113,8 106,7
 

        

        
 
*制限事項・特記事項
*制限事項・特記事項
 
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
~
-SASLの実装は、本体とは別ライブラリの[[works/libs/Smdn.Security.Authentication.Sasl]]に含まれています。
-実装にあたり、セキュリティ上の考慮はしていますが、保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
+
-実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。 SSL/TLS接続を使用するか、セキュリティが保証されたネットワーク内での使用を推奨します。
 

        

        
 
*参考文献
*参考文献
 
#amazon(4873110289,left,content)
#amazon(4873110289,left,content)

works/libs/Smdn.Security.Authentication.Sasl/index.wiki.txt

current previous
24,9 24,9
 
|&urn2url(urn:ietf:rfc:4505,anchor-text);|ANONYMOUS|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:4505,anchor-text);|ANONYMOUS|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:4752,anchor-text);|GSSAPI|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:4752,anchor-text);|GSSAPI|&color(gray){not implemented};||
 
|[[[MS-NLMP:http://msdn.microsoft.com/en-us/library/cc236621(PROT.13).aspx]]] NT LAN Manager{partially implemented};|サーバ側の実装によっては正しく動作しない可能性があります。|
|[[[MS-NLMP:http://msdn.microsoft.com/en-us/library/cc236621(PROT.13).aspx]]] NT LAN Manager{partially implemented};|サーバ側の実装によっては正しく動作しない可能性があります。|
~
|&urn2url(urn:ietf:id:ietf-sasl-scram-11,anchor-text);|SCRAM-*|&color(gray){not implemented};||
|&urn2url(urn:ietf:id:ietf-sasl-scram-10,anchor-text);|SCRAM-*|&color(gray){not implemented};||
~
|&urn2url(urn:ietf:id:ietf-sasl-scram-11,anchor-text);|SCRAM-SHA-1|&color(gray){not implemented};||
|&urn2url(urn:ietf:id:ietf-sasl-scram-10,anchor-text);|SCRAM-SHA-1|&color(gray){not implemented};||
~
|&urn2url(urn:ietf:id:ietf-sasl-scram-11,anchor-text);|SCRAM-SHA-1-PLUS|&color(gray){not implemented};||
|&urn2url(urn:ietf:id:ietf-sasl-scram-10,anchor-text);|SCRAM-SHA-1-PLUS|&color(gray){not implemented};||
 
|RFC|mechanism name|status|note|f
|RFC|mechanism name|status|note|f
 

        

        
 
使い方・認証処理の実装は[[works/libs/Smdn.Net.Imap4]]および[[works/libs/Smdn.Net.Pop3]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
使い方・認証処理の実装は[[works/libs/Smdn.Net.Imap4]]および[[works/libs/Smdn.Net.Pop3]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
38,7 38,6
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.25.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.24.tar.bz2}
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.24.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.23.tar.bz2}
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.23.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.22.tar.bz2}
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.22.tar.bz2}
47,10 46,6
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**0.25
+
-SaslClientMechanismを継承した任意のクラスを既知の認証メカニズムとして登録・使用できるようにした
+
-NetworkCredentialの各プロパティがnullを返すことを期待していた実装を修正、nullではなくstring.Emptyの場合に認証をキャンセルするようにした
+

          
 
**0.24
**0.24
 
-Mono.Security.dllがない環境でも動作するように、Mono.Security.Protocol.Ntlmの実装をインポート
-Mono.Security.dllがない環境でも動作するように、Mono.Security.Protocol.Ntlmの実装をインポート
 
-認証時に参照するNetworkCredentialのUserNameおよびPasswordプロパティがnullだった場合の動作を整理
-認証時に参照するNetworkCredentialのUserNameおよびPasswordプロパティがnullだった場合の動作を整理
66,7 61,7
 

        

        
 
*制限事項・特記事項
*制限事項・特記事項
 
-本ライブラリには、NTLM認証でのチャレンジレスポンスの実装として、Mono.Security.Protocol.Ntlmのクラスを含んでいます。
-本ライブラリには、NTLM認証でのチャレンジレスポンスの実装として、Mono.Security.Protocol.Ntlmのクラスを含んでいます。
~
-実装にあたり、セキュリティ上の考慮はしていますが、十分な検証は行っていないため保証はできません。
-実装にあたり、セキュリティ上の考慮はしていますが、保証はできません。
 

        

        
 
*関連するページ
*関連するページ
 
-[[programming/mono/Mono.Security.Protocol.Ntlm]]
-[[programming/mono/Mono.Security.Protocol.Ntlm]]