2010-01-23T23:37:01の更新内容

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

current previous
1,9 1,7
 
${smdncms:title,TundereBird}
${smdncms:title,TundereBird}
 
*概要
*概要
~
IMAP4・POP3対応のメールクライアントです。 実用を目的としたものではなく、下記ライブラリのサンプル兼デモ用アプリケーションです。
IMAP4対応のメールクライアントです。 実用を目的としたものではなく、下記ライブラリのサンプル兼デモ用アプリケーションです。
 
-[[works/libs/Smdn.Net.Imap4]]
-[[works/libs/Smdn.Net.Imap4]]
+
-[[works/libs/Smdn.Net.Pop3]]
+
-[[works/libs/Smdn.Security.Authentication.Sasl]]
 
-[[works/libs/Smdn.Formats.Mime]]
-[[works/libs/Smdn.Formats.Mime]]
 
-[[works/libs/Smdn.Formats.Ini]]
-[[works/libs/Smdn.Formats.Ini]]
 

        

        
15,17 13,9
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,TundereBird-0.22.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
---[[works/libs/Smdn.Net.Imap4]] 0.22
+
---[[works/libs/Smdn.Net.Pop3]] 0.22
+
---[[works/libs/Smdn.Security.Authentication.Sasl]] 0.22
+
---[[works/libs/Smdn.Formats.Mime]] 0.16
+
---[[works/libs/Smdn.Formats.Ini]] 0.16
 
--${smdncms:distfilelink,TundereBird-0.21.tar.bz2}
--${smdncms:distfilelink,TundereBird-0.21.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
~
---[[works/libs/Smdn.Net.Imap4]] 0.21
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.21
+
---[[works/libs/Smdn.Security.Authentication.Sasl]] 0.21
 
---[[works/libs/Smdn.Formats.Mime]] 0.15
---[[works/libs/Smdn.Formats.Mime]] 0.15
 
---[[works/libs/Smdn.Formats.Ini]] 0.15
---[[works/libs/Smdn.Formats.Ini]] 0.15
 
--${smdncms:distfilelink,TundereBird-0.20.tar.bz2}
--${smdncms:distfilelink,TundereBird-0.20.tar.bz2}
37,19 27,19
 
--${smdncms:distfilelink,TundereBird-0.13.zip}
--${smdncms:distfilelink,TundereBird-0.13.zip}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.13
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.13
~
---[[Smdn.Protocols.Pop3>works/libs/Smdn.Net.Pop3]] 0.13
---[[works/libs/Smdn.Protocols.Pop3]] 0.13
 
---[[works/libs/Smdn.Formats.Mime]] 0.13
---[[works/libs/Smdn.Formats.Mime]] 0.13
 
---[[works/libs/Smdn.Formats.Ini]] 0.13
---[[works/libs/Smdn.Formats.Ini]] 0.13
 
--${smdncms:distfilelink,TundereBird-0.12.zip}
--${smdncms:distfilelink,TundereBird-0.12.zip}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.12
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.12
~
---[[Smdn.Protocols.Pop3>works/libs/Smdn.Net.Pop3]] 0.12
---[[works/libs/Smdn.Protocols.Pop3]] 0.12
 
---[[works/libs/Smdn.Formats.Mime]] 0.12
---[[works/libs/Smdn.Formats.Mime]] 0.12
 
---[[works/libs/Smdn.Formats.Ini]] 0.12
---[[works/libs/Smdn.Formats.Ini]] 0.12
 
--${smdncms:distfilelink,TundereBird-0.11.zip}
--${smdncms:distfilelink,TundereBird-0.11.zip}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.11
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.11
~
---[[Smdn.Protocols.Pop3>works/libs/Smdn.Net.Pop3]] 0.11
---[[works/libs/Smdn.Protocols.Pop3]] 0.11
 
---[[works/libs/Smdn.Formats.Mime]] 0.11
---[[works/libs/Smdn.Formats.Mime]] 0.11
 
---[[works/libs/Smdn.Formats.Ini]] 0.11
---[[works/libs/Smdn.Formats.Ini]] 0.11
 
--${smdncms:distfilelink,TundereBird-0.10.zip}
--${smdncms:distfilelink,TundereBird-0.10.zip}
63,14 53,9
 
+Visual Studioではログ出力により動作が遅くなる場合があります。 遅くなる場合は、tunderebird.exe.configを編集してログを出力しないようにしてください。
+Visual Studioではログ出力により動作が遅くなる場合があります。 遅くなる場合は、tunderebird.exe.configを編集してログを出力しないようにしてください。
 

        

        
 
*不具合・要望・質問等
*不具合・要望・質問等
~
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
ライブラリに関する不具合・要望・質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**0.22
+
-機能追加
+
--POP3のサポートを再追加
+
--設定ファイルにタイムアウト時間を指定するTimeoutキーを追加
+

          
 
**0.21
**0.21
 
-機能追加
-機能追加
 
--設定ファイルにメールボックスの選択時にSELECTとEXAMINEのどちらを使用するか指定するReadOnlyキーを追加
--設定ファイルにメールボックスの選択時にSELECTとEXAMINEのどちらを使用するか指定するReadOnlyキーを追加

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

current previous
3,7 3,7
 
[[works/libs/Smdn.Net.Imap4]]のドキュメントとサンプルです。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
[[works/libs/Smdn.Net.Imap4]]のドキュメントとサンプルです。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
 

        

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

        

        
 
**メッセージのダウンロード
**メッセージのダウンロード
 
WebClientクラスを使って、localhostのINBOXメールボックスからUIDが1のメールをダウンロードし、sample.emlとして保存するサンプル。 ログインユーザ名にuser、パスワードにpassを使用し、認証方式にDIGEST-MD5を使用。
WebClientクラスを使って、localhostのINBOXメールボックスからUIDが1のメールをダウンロードし、sample.emlとして保存するサンプル。 ログインユーザ名にuser、パスワードにpassを使用し、認証方式にDIGEST-MD5を使用。
11,7 11,7
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
33,7 33,7
 
using System.IO;
using System.IO;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
54,7 54,7
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
76,28 76,27
 
}}
}}
 

        

        
 
*ライブラリの設計と実装の概要
*ライブラリの設計と実装の概要
~
クライアントの実装は2種類あります。 一つはSmdn.Net.Imap4.Client.Session名前空間のImapSessionクラス、もう一つはSmdn.Net.Imap4.WebClients名前空間のImapWebRequest/ImapWebResponseクラスです。 Smdn.Net.Imap4.WebClients名前空間のクライアントは、System.Net.WebRequest/System.Net.WebResponseを継承したもので、内部でImapSessionクラスを使用しています。
**クライアント
-
クライアントの実装は2種類あります。 一つはSmdn.Net.Imap4.Client.Session名前空間のImapSessionクラス、もう一つはSmdn.Net.Imap4.WebClient名前空間のImapWebRequest/ImapWebResponseクラスです。 Smdn.Net.Imap4.WebClient名前空間のクライアントは、System.Net.WebRequest/System.Net.WebResponseを継承したもので、内部でImapSessionクラスを使用しています。
 

        

        
 
二つのクライアントのモデルと概要は次の通りです。
二つのクライアントのモデルと概要は次の通りです。
 

        

        
 
:ImapSessionクラス|IMAPのコマンドとほぼ1対1で対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。
:ImapSessionクラス|IMAPのコマンドとほぼ1対1で対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。
 
切断する/されるまで選択済みメールボックス・メールボックス毎のフラグ・サーバの能力・名前空間等のセッションの状態を保持します。
切断する/されるまで選択済みメールボックス・メールボックス毎のフラグ・サーバの能力・名前空間等のセッションの状態を保持します。
~
:ImapWebRequest/ImapWebResponseクラス|IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)を用いたクライアントの実装です。 IMAP URLの形式でIMAPの操作を行うので、送信されるIMAPコマンドをあまり意識せずに扱えます。 メッセージのダウンロード・アップロードにWebClientクラスのメソッドを使うこともできます。
:ImapWebRequest/ImapWebResponseクラス|IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)を用いたクライアントの実装です。 IMAP URLの形式でIMAPの操作を行うので、読み込みのみの操作に関しては送信されるIMAPコマンドを意識せずに扱えます。
~
FtpWebRequest等と同様、WebRequest.Methodプロパティで送信するコマンドを制御できます。
ImapWebRequest.KeepAliveプロパティでリクエスト毎にセッションを切断するか、ログイン状態を維持するかどうか設定できます。 また、送信するコマンドはImapWebRequest.Methodプロパティで変更できます。
 

        

        
~
以下でクライアント実装に共通する部分について解説します。 個々のクライアント実装の詳細については各項を参照してください。
**認証
+

          
+
**資格情報
 
認証時に必要なユーザ名・パスワードはSystem.Net.ICredentialsByHostインターフェイスを通して取得します。 ICredentialsインターフェイスではなく、ICredentialsByHostインターフェイスを実装していて、GetCredentialメソッドが適切なSystem.Net.NetworkCredentialを返すクラスなら何でも設定できます。
認証時に必要なユーザ名・パスワードはSystem.Net.ICredentialsByHostインターフェイスを通して取得します。 ICredentialsインターフェイスではなく、ICredentialsByHostインターフェイスを実装していて、GetCredentialメソッドが適切なSystem.Net.NetworkCredentialを返すクラスなら何でも設定できます。
 

        

        
~
ImapWebRequest.CredentialsプロパティはWebRequestから継承しているためICredentialsインターフェイスを実装していることを要求しますが、設定されるインスタンスはICredentialsByHostも実装している必要があります。
ImapWebRequest.Credentialsプロパティは、WebRequestから継承しているためICredentialsインターフェイスを実装していることを要求しますが、同時にICredentialsByHostを実装していない場合は例外をスローします。
 

        

        
 
**証明書の選択と検証
**証明書の選択と検証
~
SSL/TLS接続時に使用する証明書はX509Certificate2Collectionで設定できます。 また、証明書の選択と検証にはRemoteCertificateValidationCallbackデリゲートとLocalCertificateSelectionCallbackデリゲートを使用できます。
認証時に使用する証明書はX509Certificate2Collectionで設定できます。 また、証明書の選択と検証にはRemoteCertificateValidationCallbackデリゲートとLocalCertificateSelectionCallbackデリゲートを使用できます。
 

        

        
 
|*証明書に関する型と該当するメンバ(いずれもクラス・プロパティ)
|*証明書に関する型と該当するメンバ(いずれもクラス・プロパティ)
~
|~証明書に関する型|>|~該当するメンバ|h
|~証明書に関する型|>|~該当するメンバ|
~
|~|~Smdn.Net.Imap4.Protocol.Client名前空間|~Smdn.Net.Imap4.WebClients名前空間|
|~|~Smdn.Net.Imap4.Protocol.Client名前空間|~Smdn.Net.Imap4.WebClient名前空間|
 
|X509Certificate2Collection|ImapConnection.CertCollection|ImapSessionManager.CertCollection|
|X509Certificate2Collection|ImapConnection.CertCollection|ImapSessionManager.CertCollection|
 
|RemoteCertificateValidationCallback|ImapConnection.CertificateValidationCallback|ImapSessionManager.CertificateValidationCallback|
|RemoteCertificateValidationCallback|ImapConnection.CertificateValidationCallback|ImapSessionManager.CertificateValidationCallback|
 
|LocalCertificateSelectionCallback|ImapConnection.CertificateSelectionCallback|ImapSessionManager.CertificateSelectionCallback|
|LocalCertificateSelectionCallback|ImapConnection.CertificateSelectionCallback|ImapSessionManager.CertificateSelectionCallback|
106,162 105,104
 
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
 

        

        
 
**メールボックスのインスタンス
**メールボックスのインスタンス
~
メールボックスの情報はImapMailboxクラスに保持されます。 このクラスのインスタンスは、LIST/SELECT/CREATEコマンド等により作成された後は、ログアウトするまでライブラリ側で管理されます。 同じメールボックスに対してSELECTしたりRENAMEした場合はインスタンスの値のみが更新され、常に同じインスタンスが返されます。
メールボックスの情報はImapMailboxクラスに保持されます。 このクラスのインスタンスは、LISTコマンド等により作成された後は、ログアウトするまでライブラリ側で管理されます。 同じメールボックスに対してSELECTしたりRENAMEした場合はインスタンスの値のみが更新され、常に同じインスタンスが返されます。
 

        

        
 
**ログ
**ログ
~
シンボルTRACEを有効にしてビルドした場合、トレースにログを出力します。 ログにはパスワードを含む内容を平文で出力します。 ログの出力が不要な場合はTrace.csを削除するか、TRACEを無効にしてリビルドしてください。
シンボルTRACEを有効にしてビルドした場合、トレースにログを出力します。 ログにはパスワードを含む送受信内容を解読可能な状態で出力します。 ログの出力が不要な場合はTrace.csを削除するか、TRACEを無効にしてリビルドしてください。
 

        

        
 
|*ログ出力に使用するTraceSourceの名前と出力内容
|*ログ出力に使用するTraceSourceの名前と出力内容
~
|TraceSourceの名前|出力内容|h
|TraceSource|出力内容|h
~
|Smdn.Net.Imap4.Client|コマンドの送受信結果とセッション毎の動作ログを出力します。|
|Smdn.Net.Imap4.Client|サーバとの送受信内容とセッション毎の動作ログを出力します。|
~
|Smdn.Net.MessageAccessProtocols|送信するコマンドと受信したレスポンスの内容を出力します。|
|Smdn.Net.Imap4.Client#Connection|サーバとの送受信内容のみを出力します。|
+

          
+
*Smdn.Net.Imap4.WebClients名前空間
+
ここではSmdn.Net.Imap4.WebClients名前空間のクラスの詳細と使い方を紹介します。 基本的にはHttpWebRequest/ResponseやFtpWebRequest/Responseと同様で、
+
+URLを指定してWebRequest.CreateでWebRequestのインスタンスを作成
+
+Method、Credentialsなどのプロパティを指定
+
+WebRequest.GetResponseでリクエストを実行、レスポンスを取得
+
+取得したWebResponseインスタンスを参照、必要に応じてWebResponse.GetResponseStreamメソッドを呼び出す
 

        

        
~
の順でIMAPコマンドを実行、レスポンスを取得できます。 以下でSmdn.Net.Imap4.WebClientsに固有な部分について解説します。
*Smdn.Net.Imap4.WebClient名前空間
-
Smdn.Net.Imap4.WebClient名前空間のクラスの使い方。
 

        

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

        

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

        

        
~
**リクエストURLと接続時の動作
**ログインと認証
~
***SSL/TLS・接続ポート
認証に用いるユーザ名は、URLから取得します。 URLにユーザ名が指定されていない場合は、ANONYMOUS認証を行います。 パスワードはImapWebRequest.Credentialsを参照し、接続しようとしているホスト名とポート番号から適切なものを取得します。 使用する認証メカニズムもユーザ名同様にURLから取得しますが、省略した場合、"AUTH=*"が指定されている場合は対応している認証方法を順に試行します。
+
リクエストURLのスキームがimapsの場合は、常にSSL/TLSでの接続を試みます。 スキームがimapの場合は、ImapWebRequest.UseTlsIfAvailableプロパティがtrueで、かつサーバがSTARTTLSに対応している場合、認証を開始する前にSSL/TLSを使用した接続にアップグレードします。 URLでポート番号を指定しない場合、デフォルトのポート(imapは143、imapsは993)に接続します。
+

          
+
|*リクエストURLの形式と接続動作の例
+
|リクエストURLの形式|接続ポート|SSL/TLS|h
+
|imap://imap.example.net/|143|可能ならSSL/TLSへのアップグレードを試行|
+
|imap://imap.example.net:993/|993|可能ならSSL/TLSへのアップグレードを試行|
+
|imaps://imap.example.net/|993|常にSSL/TLSで接続|
+
|imaps://imap.example.net:10143/|10143|常にSSL/TLSで接続|
+

          
+
***認証
+
認証に用いるユーザ名は、リクエストURLから取得します。 パスワードはWebRequest.Credentialsプロパティを参照し、接続しようとしているホスト名・ポート番号および指定された認証メカニズムをもとに適切なものを取得します。 IMAP URLではFTPやHTTPのURLとは異なり、URLに平文パスワードを含めることが許可されていないので、リクエストURLからはパスワードを取得しません(指定されていても無視します)。
+

          
+
使用する認証メカニズムもユーザ名同様にURLから取得します。 省略した場合、もしくは"AUTH=*"が指定されている場合は次の順で認証を試行します。
+
+AUTHENTICATEコマンド
+
+LOGINコマンド
+

          
+
リクエストURLにユーザ名・認証メカニズムの両方とも指定されていない場合は、ANONYMOUS認証を行います。
+

          
+
|*リクエストURLの形式と認証動作の例
+
|リクエストURLの形式|ユーザ名|使用する認証メカニズム|h
+
|imap://user;AUTH=DIGEST-MD5@imap.example.net/|user|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://;AUTH=ANONYMOUS@imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUS|
+
|imap://imap.example.net/|匿名ユーザ(anonymous)|ANONYMOUSもしくはLOGINコマンドを使用|
+

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

          
+
**リクエストURLとリクエスト・レスポンスの動作
+
HTTPと異なり、IMAP URLではリクエストURLの形式によりリクエストの対象が変わります。
+
|*リクエストURLの形式とリクエストの対象
+
|リクエストURLの形式|リクエストの対象|h
+
|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プロパティに設定する値によって変わります。 以下でリクエストURLの形式とMethodプロパティに指定可能な値、リクエストとレスポンスについて解説します。 ImapWebRequestクラスのプロパティのうち、リクエストに影響するその他のプロパティについては別項で説明します。
+

          
+
***サーバ・アカウントに対するリクエスト
+
リクエストURLがサーバ・アカウントを表す場合(imap://imap.example.net/の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|ImapWebRequestMethods.Lsub, "LSUB"&br;(デフォルト)|LSUBコマンドを送信して購読中のメールボックスの一覧を取得します。|-|取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。|
+
|ImapWebRequestMethods.List, "LIST"|LISTコマンドを送信して全てのメールボックスの一覧を取得します。|-|取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***メールボックスに対するリクエスト
+
リクエストURLがメールボックスを表す場合(imap://imap.example.net/mailbox/の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメールボックスにあるメッセージの一覧を取得します。|取得するのはメッセージの属性のみ(ALLマクロで取得されるフラグ、サイズ、internal date、エンベロープ)です。 メッセージ本文は取得しません。|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。|
+
|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で指定された名前でメールボックスを作成します。|作成できた場合、作成したメールボックスに対して自動的にSUBSCRIBEコマンドを送信します。|作成したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、作成したメールボックスのURLがWebResponse.ResponseUriに設定されます。|
+
|ImapWebRequestMethods.Delete, "DELETE"|DELETEコマンドを送信してメールボックスを削除します。|削除しようとするメールボックスに対してUNSUBSCRIBEコマンドを送信してから削除します。&br;削除しようとするメールボックスにメッセージがある場合は削除に失敗するので、STOREやEXPUNGEでメッセージを削除してからメールボックスを削除する必要があります。|-|
+
|ImapWebRequestMethods.Rename, "RENAME"|RENAMEコマンドを送信してメールボックスの名前を変更します。|変更後のメールボックス名はImapWebRequest.DestinationUriプロパティで指定します。|名前を変更した後のメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、名前を変更した後のメールボックスのURLがWebResponse.ResponseUriに設定されます。|
+
|ImapWebRequestMethods.Check, "CHECK"|CHECKコマンドを送信します。|このコマンドは何もしません。 CHECKコマンドの動作、レスポンスの内容はサーバの実装によります。|-|
+
|ImapWebRequestMethods.Select, "SELECT"|SELECTコマンドを送信してメールボックスを選択します。|このコマンドは選択するだけで何もしません。 メールボックスの状態を取得する場合などに使います。|選択したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。|
+
|ImapWebRequestMethods.Examine, "EXAMINE"|EXAMINEコマンドを送信して読み取り専用でメールボックスを選択します。|このコマンドは選択するだけで何もしません。 メールボックスの状態を取得する場合などに使います。|選択したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。|
+
|ImapWebRequestMethods.Subscribe, "SUBSCRIBE"|SUBSCRIBEコマンドを送信してメールボックスの購読を開始します。|-|-|
+
|ImapWebRequestMethods.Unsubscribe, "UNSUBSCRIBE"|UNSUBSCRIBEコマンドを送信してメールボックスの購読を解除します。|-|-|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***メールボックスに対する検索クエリを含むリクエスト
+
リクエストURLがメールボックスに対する検索クエリを表す場合(imap://imap.example.net/mailbox/?...の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|ImapWebRequestMethods.Search, "SEARCH"&br;(デフォルト)|SEARCHコマンドを送信して検索クエリに該当するメッセージの一覧を取得します。|取得するのはメッセージの属性のみ(ALLマクロで取得されるフラグ、サイズ、internal date、エンベロープ)です。 メッセージ本文は取得しません。|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。|
+
|ImapWebRequestMethods.Copy, "COPY"|COPYコマンドを送信して検索クエリに該当するメッセージを別のメールボックスにコピーします。|コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。|コピー先のメールボックスを自動的に作成した場合、作成したメールボックスはImapWebResponse.Mailboxesプロパティに設定されます。|
+
|ImapWebRequestMethods.Expunge, "EXPUNGE"|STOREコマンドを送信して検索クエリに該当するメッセージに\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、検索クエリに該当したメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|-|
+
|ImapWebRequestMethods.Store, "STORE"|STOREコマンドを送信して検索クエリに該当するメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|-|
+
|ImapWebRequestMethods.Sort, "SORT"|SORTコマンドを送信して検索クエリに該当するメッセージの一覧をソート済みの形式で取得します。|ソート方法はImapWebRequest.SortCriteriaプロパティで指定します。&br;''サーバがSORT=* extensionをサポートしない場合、WebExceptionをスローします。''|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。|
+
|ImapWebRequestMethods.Thread, "THREAD"|THREADコマンドを送信して検索クエリに該当するメッセージの一覧をスレッド形式で取得します。|スレッド形式のアルゴリズムはImapWebRequest.ThreadingAlgorithmプロパティで指定します。&br;''サーバがTHREAD=* extensionをサポートしない場合、WebExceptionをスローします。''|取得したスレッド形式の一覧は、ImapWebResponse.ThreadTreeプロパティに設定されます。|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***メールボックス内の特定のメッセージに対するリクエスト
+
リクエストURLが特定のメッセージを表す場合(imap://imap.example.net/mailbox/;UID=1の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメッセージの本文を取得します。|該当するUIDのメッセージがない場合、WebExceptionStatus.SuccessのWebExceptionをスローします。|メッセージ本文はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 取得するメッセージのサイズはWebResponse.ContentLength、Content-TypeはWebResponse.ContentTypeプロパティに設定されます。|
+
|ImapWebRequestMethods.Expunge, "EXPUNGE"|STOREコマンドを送信して\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、URLで指定されたメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|-|
+
|ImapWebRequestMethods.Store, "STORE"|STOREコマンドを送信してメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|-|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***リクエスト対象に制限されないリクエスト
+
リクエストURLの形式によらず使用可能なコマンドのリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティに指定可能な値|リクエスト|解説|レスポンス|h
+
|ImapWebRequestMethods.NoOp, "NOOP"|NOOPコマンドを送信します。|このコマンドは何もしません。 自動ログアウトタイマの更新、セッションの接続性確認、新着メッセージの確認などに使います。|-|
+
|Methodプロパティに指定可能な値|リクエスト|解説|レスポンス|f
 

        

        
~
***ImapWebRequestクラスのプロパティ
URLのスキームがimapの場合で、ポート番号を省略した場合はデフォルトでポート143に接続します。 imapsの場合でポート番号が指定されていない場合はデフォルトでポート993に接続します。 また、imapsの場合は、SSLでの接続を試みます。
+
ImapWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
 

        

        
~
|*ImapWebRequestクラスのプロパティ
|*URLの形式と認証動作の例
~
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
|URLの形式|認証動作|h
~
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます|
|imap://user;AUTH=DIGEST-MD5@localhost/|ユーザ名'user'でDIGEST-MD5を使ってlocalhostのポート143に接続|
~
|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、エラーレスポンスでもWebExceptionがスローされません。|
|imaps://user@localhost:10993/|ユーザ名'user'でlocalhostのポート10993にSSLで接続|
~
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|

          
~
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
ImapWebRequest.KeepAliveプロパティにtrueを指定した場合は、リクエストが終了してもセッションは維持し、逆にfalseを指定した場合はリクエストが終了するとセッションを閉じます。 ImapWebRequest.KeepAliveプロパティのデフォルトはtrueです。
~
|ReadOnly|false|FETCH, SEARCH等|メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。|

          
~
|AllowCreateMailbox|true|COPY|COPYコマンドを送信した際にサーバがレスポンスコードTRYCREATEを返した場合、自動的にメールボックスを作成するかどうかを指定します。 現在の実装では、APPENDコマンドでTRYCREATEが返された場合でもメールボックスは作成せず、常にエラーとなります。|
**URLの形式とリクエストの種類
~
|DestinationUri|null|COPY, RENAME|COPYの場合はメッセージのコピー先メールボックス名、RENAMEの場合は変更後のメールボックス名を含むURLを指定します。 URLはコピー元・変更前(WebRequest.RequestUri)と同一サーバ、同一ユーザである必要があります。 それ以外の場合、ArgumentExceptionをスローします。|
HTTPと異なり、IMAP URLの形式によりリクエストする内容が変わります。
~
|StoreDataItem|null|STORE|STOREコマンドでメッセージに追加・削除・設定するフラグを指定します。|
|*URLの形式とデフォルトのリクエスト内容
~
|FetchBlockSize|10240|FETCH|FETCHコマンドでメッセージ本文を取得する際に、1回のFETCHコマンドで取得するブロックのサイズをバイト単位で指定します。|
|URLの形式|リクエスト内容|h
-
|サーバを表す場合&br;(例: imap://example.com/)|サーバにあるメールボックスの一覧を取得します。|
-
|メールボックスを表す場合&br;(例: imap://example.com/INBOX/)|メールボックスにあるメッセージの一覧を取得します。|
-
|メールボックス内の単一のメッセージを表す場合&br;(例: imap://example.com/INBOX/;UID=1)|該当するUIDを持つメッセージの属性と本文を取得します。|
-
|メールボックスに対する検索クエリを含む場合&br;(例: imap://example.com/INBOX/?RECENT)|メールボックスにあるメッセージのうち、検索クエリに該当するものの一覧を取得します。|
-

          
-
リクエスト内容はImapWebRequest.Methodプロパティに設定する値によっても変わります。 URLがサーバを表す場合のリクエスト内容と動作・レスポンスは次の通りです。
-
|*サーバを表すURLでのリクエスト
-
|Methodプロパティの値|リクエスト内容|動作とレスポンス|h
-
|null, String.Empty&br;またはImapWebRequestMethods.Lsub|Methodを指定しない場合のデフォルトの動作です。&br;LSUBコマンドを送信してメールボックスの一覧を取得します。|取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。|
-
|ImapWebRequestMethods.List|LISTコマンドを送信してメールボックスの一覧を取得します。|取得したメールボックスの一覧は、ImapWebResponse.Mailboxesプロパティに設定されます。|
-
|ImapWebRequestMethods.Noop|NOOPコマンドを送信します。|このコマンドは何もしません。 自動ログアウトタイマの更新、セッションの接続性確認などに使います。|
-

          
-
URLがメールボックスを表す場合のリクエスト内容と動作・レスポンスは次の通りです。
-
|*メールボックスを表すURLでのリクエスト
-
|Methodプロパティの値|リクエスト内容|動作とレスポンス|h
-
|null, String.Empty&br;またはImapWebRequestMethods.Fetch|Methodを指定しない場合のデフォルトの動作です。&br;FETCHコマンドを送信してメールボックスにあるメッセージの一覧を取得します。|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。&br;取得するのはメッセージの属性のみ(ALLマクロで取得されるフラグ、サイズ、internal date、エンベロープ)です。 メッセージ本文は取得しません。|
-
|ImapWebRequestMethods.Append|APPENDコマンドを送信してメールボックスにメッセージをアップロードします。|アップロードするメッセージはImapWebRequest.GetRequestStreamメソッドで取得したStreamに書き込みます。 メッセージはMIME形式であるべきですが、ライブラリ側ではアップロードする内容をチェックしません。|
-
|ImapWebRequestMethods.Create|CREATEコマンドを送信してURLで指定された名前でメールボックスを作成します。|作成できた場合、作成したメールボックスに対して自動的にSUBSCRIBEコマンドを送信します。|
-
|ImapWebRequestMethods.Delete|DELETEコマンドを送信してメールボックスを削除します。|削除しようとするメールボックスに対してUNSUBSCRIBEコマンドを送信してから削除します。&br;削除しようとするメールボックスにメッセージがある場合は削除に失敗するので、STOREやEXPUNGEでメッセージを削除してからメールボックスを削除する必要があります。|
-
|ImapWebRequestMethods.Expunge|EXPUNGEコマンドを送信してメールボックスから\Deletedフラグの付いたメッセージを削除します。||
-
|ImapWebRequestMethods.Examine|EXAMINEコマンドを送信して読み取り専用でメッセージボックスを選択します。|このコマンドは選択するだけで何もしません。 メールボックスの状態を取得する場合などに使います。|
-
|ImapWebRequestMethods.Rename|RENAMEコマンドを送信してメールボックスの名前を変更します。|変更後のメールボックス名はImapWebRequest.DestinationUriプロパティで指定します。|
-
|ImapWebRequestMethods.Subscribe|SUBSCRIBEコマンドを送信してメールボックスの購読を開始します。||
-
|ImapWebRequestMethods.Unsubscribe|UNSUBSCRIBEコマンドを送信してメールボックスの購読を解除します。||
-

          
-
URLが単一のメッセージを表す場合のリクエスト内容と動作・レスポンスは次の通りです。
-
|*単一のメッセージを表すURLでのリクエスト
-
|Methodプロパティの値|リクエスト内容|動作とレスポンス|h
-
|null, String.Empty&br;またはImapWebRequestMethods.Fetch|Methodを指定しない場合のデフォルトの動作です。&br;FETCHコマンドを送信してメッセージの本文を取得します。|メッセージ本文はImapWebResponse.GetResponseStreamメソッドで取得したStreamから読み込めます。|
-
|ImapWebRequestMethods.Expunge|STOREコマンドを送信して\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、URLで指定されたメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|
-
|ImapWebRequestMethods.Store|STOREコマンドを送信してメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|
-

          
-
URLが検索クエリを含む場合のリクエスト内容と動作・レスポンスは次の通りです。
-
|*検索クエリを含むURLでのリクエスト
-
|Methodプロパティの値|リクエスト内容|動作とレスポンス|h
-
|null, String.Empty&br;またはImapWebRequestMethods.Search|Methodを指定しない場合のデフォルトの動作です。&br;SEARCHコマンドを送信して検索クエリに該当するメッセージの一覧を取得します。|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。&br;取得するのはメッセージの属性のみ(ALLマクロで取得されるフラグ、サイズ、internal date、エンベロープ)です。 メッセージ本文は取得しません。|
-
|ImapWebRequestMethods.Copy|COPYコマンドを送信して検索クエリに該当するメッセージを別のメールボックスにコピーします。|コピー先のメールボックスはImapWebRequest.DestinationUriプロパティで指定します。|
-
|ImapWebRequestMethods.Expunge|STOREコマンドを送信して検索クエリに該当するメッセージに\Deletedフラグを追加した後、EXPUNGEコマンドを送信してメッセージを削除します。|サーバが&urn2url(urn:ietf:rfc:4315,#2.1){UID EXPUNGE};に対応していない場合、検索クエリに該当したメッセージだけでなく''既に\Deletedフラグが設定されている他のメッセージも同時に削除されます''。|
-
|ImapWebRequestMethods.Store|STOREコマンドを送信して検索クエリに該当するメッセージにフラグを追加・削除・設定します。|追加・削除・設定するフラグはImapWebRequest.StoreDataItemプロパティで指定します。|
-
|ImapWebRequestMethods.Thread|THREADコマンドを送信して検索クエリに該当するメッセージの一覧をスレッド形式で取得します。|スレッド形式のアルゴリズムはImapWebRequest.ThreadingAlgorithmプロパティで指定します。 また、取得したスレッド形式の一覧は、ImapWebResponse.ThreadTreeプロパティに設定されます。&br;''サーバがTHREAD=* extensionをサポートしない場合、WebExceptionをスローします。''|
-
|ImapWebRequestMethods.Sort|SORTコマンドを送信して検索クエリに該当するメッセージの一覧をソート済みの形式で取得します。|ソート方法はImapWebRequest.SortCriteriaプロパティで指定します。 また、取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。&br;''サーバがSORT=* extensionをサポートしない場合、WebExceptionをスローします。''|
 

        

        
~
WebRequestクラスから継承されるプロパティのうち、以下のプロパティは使用することができます。
***IMAP URLに関する注意事項など
-
-現時点では検索クエリに日本語等非ASCII文字を含めることはできません。 URLエンコードした文字列を検索クエリに含めた場合でも、エンコードした結果に非ASCII文字が含まれるような場合はリクエスト時にWebExceptionをスローします。
-
-UIDVALIDITYを含むIMAP URLも扱えますが、無視します。 現時点ではUIDVALIDITYが指定されていない場合と同様に扱います。
 

        

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

        

        
+
以下のプロパティは、未テスト・不完全な実装に関連するプロパティです。 使用はできますが、今後廃止する可能性もあるので、現時点では使用を推奨できません。
 
|*ImapWebRequestクラスのプロパティ
|*ImapWebRequestクラスのプロパティ
 
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
-
|KeepAlive|true|全て|リクエストが終了した後もログイン状態を維持するかどうかを指定します。|
-
|AllowLoginRedirect|true|全て(認証時)|認証時にサーバがレスポンスコードREFERRALを返した場合、レスポンスコードで指定されたURLで再度ログインを試みるかどうかを指定します。(この機能は未テストです。 期待する動作となるかどうかは分かりません)
-
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、TLSを使用した接続に変更します。|
 
|UseDeflateIfAvailable|false|全て|サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます)|
|UseDeflateIfAvailable|false|全て|サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます)|
~
|AllowLoginRedirect|true|全て(認証時)|認証時にサーバがレスポンスコードREFERRALを返した場合、レスポンスコードで指定されたURLで再度ログインを試みるかどうかを指定します。(この機能は未テストです。 期待する動作となるかどうかは分かりません)
|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、WebExceptionがスローされません。|
-
|ReadOnly|false|FETCH, SEARCH等|メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。|
 
|SearchCriteriaEncoding|Encoding.UTF8|SEARCH等|検索クエリのエンコードに使用する文字コードを指定します。 サーバがサポートしていない文字コードを指定した場合はエラーとなります。 (この機能は現在動作しません。 将来のバージョンで検索クエリにASCII文字以外も含められるようにした時点で機能します。)|
|SearchCriteriaEncoding|Encoding.UTF8|SEARCH等|検索クエリのエンコードに使用する文字コードを指定します。 サーバがサポートしていない文字コードを指定した場合はエラーとなります。 (この機能は現在動作しません。 将来のバージョンで検索クエリにASCII文字以外も含められるようにした時点で機能します。)|
-
|AllowCreateMailbox|true|COPY|COPYコマンドを送信した際にサーバがレスポンスコードTRYCREATEを返した場合、自動的にメールボックスを作成するかどうかを指定します。|
-
|DestinationUri|null|COPY, RENAME|COPYの場合はメッセージのコピー先、RENAMEの場合は変更後のメールボックス名を含むURLを指定します。 URLはコピー元・変更前と同一サーバ、同一ユーザである必要があります。 それ以外の場合、InvalidOperationExceptionをスローします。|
-
|StoreDataItem|null|STORE|STOREコマンドでメッセージに追加・削除・設定するフラグを指定します。|
 
|SortCriteria|null|SORT|SORTコマンドで使用するソート方法を指定します。|
|SortCriteria|null|SORT|SORTコマンドで使用するソート方法を指定します。|
 
|ThreadingAlgorithm|null|THREAD|THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。|
|ThreadingAlgorithm|null|THREAD|THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。|
 

        

        
+
***リクエストとIMAP URLに関するその他の留意事項
+
-現時点では検索クエリに日本語等非ASCII文字を含めることはできません。 URLエンコードした文字列を検索クエリに含めた場合でも、エンコードした結果に非ASCII文字が含まれるような場合はリクエスト時にWebExceptionをスローします。
+
-UIDVALIDITYを含むIMAP URLも扱えますが、無視します。 現時点ではUIDVALIDITYが指定されていない場合と同様に扱います。
+

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

        

        
 
var request = WebRequest.Create("imap://user@localhost/INBOX/?ALL") as ImapWebRequest;
var request = WebRequest.Create("imap://user@localhost/INBOX/?ALL") as ImapWebRequest;
293,7 234,7
 
using System.Net;
using System.Net;
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
 
using Smdn.Net.Imap4.Protocol.Client;
using Smdn.Net.Imap4.Protocol.Client;
~
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClient;
 
  :
  :
 

        

        
 
var request = WebRequest.Create("imap://user@localhost/INBOX.old/") as ImapWebRequest;
var request = WebRequest.Create("imap://user@localhost/INBOX.old/") as ImapWebRequest;
316,7 257,7
 
using System.Net;
using System.Net;
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
 
using Smdn.Net.Imap4.Protocol.Client;
using Smdn.Net.Imap4.Protocol.Client;
~
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClient;
 
  :
  :
 

        

        
 
var request = WebRequest.Create("imap://user@localhost/INBOX.new/") as ImapWebRequest;
var request = WebRequest.Create("imap://user@localhost/INBOX.new/") as ImapWebRequest;
341,7 282,7
 

        

        
 
using Smdn.Net.Imap4;
using Smdn.Net.Imap4;
 
using Smdn.Net.Imap4.Protocol.Client;
using Smdn.Net.Imap4.Protocol.Client;
~
using Smdn.Net.Imap4.WebClients;
using Smdn.Net.Imap4.WebClient;
 
  :
  :
 

        

        
 
var request = WebRequest.Create("imap://user@localhost/INBOX/?from spammer.example.com") as ImapWebRequest;
var request = WebRequest.Create("imap://user@localhost/INBOX/?from spammer.example.com") as ImapWebRequest;
357,7 298,7
 
}}
}}
 

        

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

        

        
 
**サンプル
**サンプル
 
***ログインと各種コマンド送信の例
***ログインと各種コマンド送信の例

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

current previous
1,19 1,11
 
${smdncms:title,Smdn.Net.Imap4}
${smdncms:title,Smdn.Net.Imap4}
+
${smdncms:header_title,Smdn.Net.Imap4}
 
${smdncms:keywords,Smdn.Net.Imap4,IMAP,IMAP4,IMAP4rev1,C#,.NET,Mono,mail,クライアント,ライブラリ}
${smdncms:keywords,Smdn.Net.Imap4,IMAP,IMAP4,IMAP4rev1,C#,.NET,Mono,mail,クライアント,ライブラリ}
 
C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
 

        

        
+
-姉妹品
+
--[[works/libs/Smdn.Net.Pop3]]
+
-関連ライブラリ
+
--[[works/libs/Smdn.Security.Authentication.Sasl]]
+
--[[works/libs/Smdn.Formats.Mime]]
+

          
 
*機能概要
*機能概要
 
使用可能なコマンド
使用可能なコマンド
 
:認証系コマンド|LOGIN, AUTHENTICATE, LOGOUT, STARTTLS
:認証系コマンド|LOGIN, AUTHENTICATE, LOGOUT, STARTTLS
~
::SASL認証方式|DIGEST-MD5, CRAM-MD5, NTLM, PLAIN, LOGIN, ANONYMOUS
::認証方式|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
::標準コマンド|CREATE, RENAME, DELETE, CLOSE, SELECT, EXAMINE, LIST, LSUB, STATUS, SUBSCRIBE, UNSUBSCRIBE
 
::拡張コマンド|RLIST, RLSUB, UNSELECT, NAMESPACE
::拡張コマンド|RLIST, RLSUB, UNSELECT, NAMESPACE
26,35 18,9
 

        

        
 
実装しているクライアントは次の二種類です。
実装しているクライアントは次の二種類です。
 
: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での操作に対応したクライアント
+

          
+
その他、サポートしている機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]をご覧ください。
 

        

        
~
*使い方・サンプルコード
使い方・サンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]、機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
+
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとIMAP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。
+
#code(cs){{
+
using System;
+
using System.Net;
+

          
+
using Smdn.Net.Imap4.WebClients;
+

          
+
class GimapFetchExample {
+
  public static void Main()
+
  {
+
    ImapSessionManager.RegisterWebRequestPrefix();
+
    ImapSessionManager.CertificateValidationCallback += delegate {
+
      return true;
+
    };
+

          
+
    using {
+
      client.Credentials = new NetworkCredential("username", "password");
+
      client.DownloadFile("imaps://username@imap.gmail.com/INBOX/;UID=1", "message.eml");
+
    }
+
  }
+
}
+
}}
+

          
+
詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]およびデモ用アプリケーション[[works/tools/junk/TundereBird]]をご覧ください。
 

        

        
 
*ダウンロード
*ダウンロード
 
#googleadunit
#googleadunit
63,53 29,15
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.22.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.21.tar.bz2}
--${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.21.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Protocols.Imap4-0.20.tar.bz2}
--${smdncms:distfilelink,Smdn.Protocols.Imap4-0.20.tar.bz2}
 
-0.1x
-0.1x
 
--[[works/tools/junk/TundereBird]]に含まれているものを使ってください
--[[works/tools/junk/TundereBird]]に含まれているものを使ってください
 

        

        
 
*不具合・要望・質問等
*不具合・要望・質問等
~
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合・要望・使い方の質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**0.22
+
主にWebClients名前空間のクラスの改善。
+

          
+
-機能追加
+
--INBOXをDELETEしようとした場合、InvalidOperationExceptionをスローするようにした
+
--コマンド実行中にタイムアウトが発生した場合、TimeoutExceptionをスローするようにした
+
--コマンドを発行する際に引数のチェックを行い、ArgumentExceptionをスローするようにした(未完了につき不完全)
+
--WebClients名前空間
+
---任意の形式のIMAP URLでNOOPコマンドを発行できるようにした
+
---CHECKコマンド、SELECTコマンドを発行できるようにした
+
---リクエスト実行中にImapWebRequestの各プロパティを設定しようとした場合、InvalidOperationExceptionをスローするようにした
+
---ImapWebRequest.MethodプロパティおよびImapWebRequest.DestinationUriプロパティの値のチェックを、リクエスト実行時ではなく値の設定時に行うようにした
+
---ImapWebRequest.MethodプロパティがFETCHの場合、取得するメッセージのContent-TypeをWebResponse.ContentTypeプロパティに設定するようにした
+
---ImapWebRequest.UsingSaslMechanismsプロパティを追加
+
---ImapWebRequest.ReadWriteTimeoutプロパティを追加
+
---ImapWebRequest.FetchBlockSizeプロパティを追加
+
---WebClient.Download*Asyncメソッドから呼び出されても正しく動作するようにした
+
-修正・改善
+
--LIST/LSUBを発行せずにRENAMEすると例外エラーとなる不具合を修正
+
--ImapSession.ReceiveTimeoutを設定・取得しようとするとImapSession.SendTimeoutが設定・取得されてしまう不具合を修正
+
--タイムアウト関連の実装を整理
+
--タイムアウト・内部例外エラーが発生した場合、セッションを切断・破棄するように変更
+
--WebClients名前空間
+
---名前空間をWebClientからWebClient''s''に変更
+
---Imap*Exceptionなど内部で発生した例外をWebExceptionにラップしてスローするように修正
+
---STARTTLSを発行した後でも、レスポンス・メールボックス等のURLのスキーム部分をimapのままにするように修正
+
---AUTH=*の場合、LOGINDISABLEDが指示されていてもLOGINコマンドを発行してしまう不具合を修正
+
---ImapWebRequest.BeginGetResponseメソッドにコールバックメソッドを指定しても呼び出されない不具合を修正
+
---ImapWebRequest.KeepAliveプロパティがtrueの場合、異なるメールボックスを選択する際にUNSELECTコマンドを使用しないよう変更
+
---ImapWebRequest.MethodプロパティがNOOPの場合、NOOPコマンドが2回発行されてしまう不具合を修正
+
---ImapWebRequest.MethodプロパティがFETCHの場合、該当するメッセージが無い場合にWebExceptionStatus.SuccessのWebExceptionをスローするようにした
+
---ImapWebRequest.MethodプロパティがCOPYの場合、AllowCreateMailboxプロパティに指定されている値と逆の動作になる不具合を修正
+
---その他、HttpWebRequest・FtpWebRequest等と同じような動作となるように改善
+
-その他
+
--WebClients名前空間のテストケースを追加
+
--上記以外の細かい修正など
+

          
 
**0.21
**0.21
 
-機能追加
-機能追加
 
--WebClient名前空間
--WebClient名前空間
165,7 93,7
 

        

        
 
以下の環境で動作することを確認済みです。
以下の環境で動作することを確認済みです。
 
-.NET Framework 3.5
-.NET Framework 3.5
~
-Mono 2.7
-Mono 2.7
 

        

        
 
*制限事項
*制限事項
 
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。

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

current previous
65,6 65,28
 
|&urn2url(urn:ietf:id:ietf-morg-inthread-00,anchor-text);|THREAD=REFS|&color(green){implemented};||
|&urn2url(urn:ietf:id:ietf-morg-inthread-00,anchor-text);|THREAD=REFS|&color(green){implemented};||
 
|RFC|capability name|status|note|f
|RFC|capability name|status|note|f
 

        

        
-
**SASL mechanisms
-
サポートするSASL認証メカニズムの一覧です。
-
|RFC|mechanism name|status|note|h
-
|&urn2url(urn:ietf:rfc:1731,anchor-text);|KERBEROS_V4|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:2195,anchor-text);|CRAM-MD5|&color(green){implemented};||
-
|&urn2url(urn:ietf:rfc:2444,anchor-text);|OTP|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:2444,anchor-text);|SKEY|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:2595,anchor-text);|PLAIN|&color(green){implemented};||
-
|&urn2url(urn:ietf:rfc:2808,anchor-text);|SECURID|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:2831,anchor-text);|DIGEST-MD5|&color(orange){partially implemented};|realmには対応していません。 また、サーバ側の実装によっては正しく動作しない可能性があります。|
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-RSA-SHA1-ENC|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-RSA-SHA1-ENC|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-DSA-SHA1|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-DSA-SHA1|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-ECDSA-SHA1|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-ECDSA-SHA1|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:4422,anchor-text);|EXTERNAL|&color(gray){not implemented};||
-
|&urn2url(urn:ietf:rfc:4505,anchor-text);|ANONYMOUS|&color(green){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};|Mono.Security.dllを使用します。 Mono.Security.dllを動的にロードできない環境では使用できません。 また、サーバ側の実装によっては正しく動作しない可能性があります。|
-
|RFC|mechanism name|status|note|f
-

          
 
**commands
**commands
 
サポートするコマンドの一覧です。
サポートするコマンドの一覧です。
 
|command|RFC|status|note|h
|command|RFC|status|note|h
204,6 226,7
 
-[[IANA — Protocol Registries:http://www.iana.org/protocols/]]
-[[IANA — Protocol Registries:http://www.iana.org/protocols/]]
 
--[[Internet Message Access Protocol 4 Capabilities Registry:http://www.iana.org/assignments/imap4-capabilities]]
--[[Internet Message Access Protocol 4 Capabilities Registry:http://www.iana.org/assignments/imap4-capabilities]]
 
--[[IMAP Response Codes:http://www.iana.org/assignments/imap-response-codes/imap-response-codes.xhtml]]
--[[IMAP Response Codes:http://www.iana.org/assignments/imap-response-codes/imap-response-codes.xhtml]]
-
--[[SIMPLE AUTHENTICATION AND SECURITY LAYER MECHANISMS:http://www.iana.org/assignments/sasl-mechanisms]]
 
-[[The IMAP Connection -- IMAP Documents: RFCs and Drafts:http://www.imap.org/biblio.html]]
-[[The IMAP Connection -- IMAP Documents: RFCs and Drafts:http://www.imap.org/biblio.html]]
 
-[[IMAP Server implementations:http://www.melnikov.ca/mel/devel/ServerReference.html]]
-[[IMAP Server implementations:http://www.melnikov.ca/mel/devel/ServerReference.html]]
 

        

        

works/libs/Smdn.Formats.Mime/index.wiki.txt

current previous
1,5 1,4
 
${smdncms:title,Smdn.Formats.Mime}
${smdncms:title,Smdn.Formats.Mime}
+
${smdncms:header_title,Smdn.Formats.Mime}
 
${smdncms:keywords,C#,.NET,Mono,MIME,ライブラリ}
${smdncms:keywords,C#,.NET,Mono,MIME,ライブラリ}
 
C#で書いた.NET Framework/Mono用MIMEメッセージライブラリです。 MIME形式のメッセージの読み込み、デコードが出来ます。
C#で書いた.NET Framework/Mono用MIMEメッセージライブラリです。 MIME形式のメッセージの読み込み、デコードが出来ます。
 

        

        
19,14 18,13
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.1x
-0.1x
+
--${smdncms:distfilelink,Smdn.Formats.Mime-0.16.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Mime-0.15.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Mime-0.15.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Mime-0.14.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Mime-0.14.tar.bz2}
 
--上記以前のバージョン
--上記以前のバージョン
 
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
 

        

        
 
*不具合・要望・質問等
*不具合・要望・質問等
~
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合・要望・使い方の質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*サンプル
*サンプル
 
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
74,9 72,6
 

        

        
 
*変更履歴
*変更履歴
 

        

        
+
**0.16
+
-[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
+

          
 
**0.15
**0.15
 
-機能追加
-機能追加
 
--添付ファイル・代替メッセージの作成機能、メッセージのエンコード・フォーマット機能を追加(ただしインターフェイスは未確定)
--添付ファイル・代替メッセージの作成機能、メッセージのエンコード・フォーマット機能を追加(ただしインターフェイスは未確定)

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

current previous
1,234 0,0
+
${smdncms:title,ドキュメント・サンプル}
+
${smdncms:keywords,}
+
[[works/libs/Smdn.Net.Pop3]]のドキュメントとサンプルです。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
+

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

          
+
**メッセージのダウンロード
+
WebClientクラスを使って、localhostのメールボックスから1番目のメッセージをダウンロードし、sample.emlとして保存するサンプル。 ログインユーザ名にuser、パスワードにpassを使用し、認証方式にDIGEST-MD5を使用。
+
#code(cs){{
+
using System;
+
using System.Net;
+

          
+
using Smdn.Net.Imap4.WebClients;
+

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

          
+
    using {
+
      client.Credentials = new NetworkCredential("user", "pass");
+
      client.DownloadFile("pop://user;AUTH=DIGEST-MD5@localhost/;MSG=1", "sample.eml");
+
    }
+
  }
+
}
+
}}
+

          
+
**メッセージ一覧の取得
+
WebRequestクラスを使って、Gmailアカウントのメールボックスからメールの一覧を取得し、もっとも最近のメールをダウンロード・表示する例。
+
#code(cs){{
+
using System;
+
using System.IO;
+
using System.Text;
+
using System.Net;
+

          
+
using Smdn.Net.Pop3;
+
using Smdn.Net.Pop3.WebClients;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    PopSessionManager.RegisterWebRequestPrefix();
+
    PopSessionManager.CertificateValidationCallback += delegate {
+
      return true;
+
    };
+

          
+
    var baseUrl = new Uri("pops://user@pop.gmail.com/");
+
    var credential = new NetworkCredential("user", "pass");
+

          
+
    var request = WebRequest.Create(baseUrl) as PopWebRequest;
+

          
+
    request.Credentials = credential;
+
    request.Method = "LIST";
+
    request.KeepAlive = true;
+

          
+
    PopScanListing[] scanLists;
+

          
+
    using {
+
      scanLists = response.ScanLists;
+
    }
+

          
+
    var recentMessageUrl = string.Format("./;MSG={0}", scanLists[scanLists.Length - 1].MessageNumber);
+

          
+
    request = WebRequest.Create(new Uri(baseUrl, recentMessageUrl)) as PopWebRequest;
+

          
+
    request.Credentials = credential;
+
    request.Method = "RETR";
+
    request.KeepAlive = false;
+

          
+
    using {
+
      using {
+
        var reader = new StreamReader(stream, Encoding.GetEncoding("iso-2022-jp"));
+

          
+
        Console.WriteLine(reader.ReadToEnd());
+
      }
+
    }
+
  }
+
}
+
}}
+

          
+
*ライブラリの設計と実装の概要
+
このドキュメントは作成中です。
+

          
+
[[works/libs/Smdn.Net.Imap4]]の[[works/libs/Smdn.Net.Imap4/doc]]を参照してください。 プロトコルに固有な部分をのぞき、設計・実装は[[works/libs/Smdn.Net.Imap4]]と同様です。
+

          
+
*Smdn.Net.Pop3.WebClients名前空間
+
ここではSmdn.Net.Pop3.WebClients名前空間のクラスの詳細と使い方を紹介します。 基本的にはHttpWebRequest/ResponseやFtpWebRequest/Responseと同様で、
+
+URLを指定してWebRequest.CreateでWebRequestのインスタンスを作成
+
+Method、Credentialsなどのプロパティを指定
+
+WebRequest.GetResponseでリクエストを実行、レスポンスを取得
+
+取得したWebResponseインスタンスを参照、必要に応じてWebResponse.GetResponseStreamメソッドを呼び出す
+

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

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

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

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

          
+
|*リクエストURLの形式と接続動作の例
+
|リクエストURLの形式|接続ポート|SSL/TLS|h
+
|pop://pop.example.net/|110|可能ならSSL/TLSへのアップグレードを試行|
+
|pop://pop.example.net:995/|995|可能ならSSL/TLSへのアップグレードを試行|
+
|pops://pop.example.net/|995|常にSSL/TLSで接続|
+
|pops://pop.example.net:10110/|10143|常にSSL/TLSで接続|
+

          
+
***認証
+
認証に用いるユーザ名は、リクエストURLから取得します。 パスワードはWebRequest.Credentialsプロパティを参照し、接続しようとしているホスト名・ポート番号および指定された認証メカニズムをもとに適切なものを取得します。 POP URLではFTPやHTTPのURLとは異なり、URLに平文パスワードを含めることが許可されていないので、リクエストURLからはパスワードを取得しません(指定されていても無視します)。
+

          
+
使用する認証メカニズムもユーザ名同様にURLから取得します。 APOPを使用する場合は、"AUTH=+APOP"を指定してください。 認証メカニズムを省略した場合、もしくは"AUTH=*"が指定されている場合は次の順で認証を試行します。
+
+AUTHコマンド
+
+APOPコマンド
+
+USER/PASSコマンド
+

          
+
リクエストURLにユーザ名・認証メカニズムの両方とも指定されていない場合は、ANONYMOUS認証を行います。
+

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

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

          
+
**リクエストURLとリクエスト・レスポンスの動作
+
POP URL(&urn2url(urn:ietf:rfc:2384,short);)ではPOPサーバ(メールボックス)を表す形式しか規定されていませんが、本ライブラリでは独自の拡張としてメッセージ番号を指定してリクエストできるようにしてあります。 リクエストURLにメッセージ番号(;MSG=x)が含まれているかどうかでリクエストの対象が変わります。
+
|*リクエストURLの形式とリクエストの対象
+
|リクエストURLの形式|リクエストの対象|h
+
|pop://pop.example.net/|URLで指定されたメールボックス|
+
|pop://pop.example.net/;MSG=1|URLで指定されたメールボックスにあるメッセージのうち、メッセージ番号に該当する特定のメッセージ|
+

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

          
+
PopWebRequest.GetResponseの動作は、リクエストURLで表されるリクエストの対象と、WebRequest.Methodプロパティに設定する値によって変わります。 以下でリクエストURLの形式とMethodプロパティに指定可能な値、リクエストとレスポンスについて解説します。 PopWebRequestクラスのプロパティのうち、リクエストに影響するその他のプロパティについては別項で説明します。
+

          
+
***メールボックスに対するリクエスト
+
リクエストURLがメールボックスを表す場合(pop://pop.example.net/の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|PopWebRequestMethods.List, "LIST"&br;(デフォルト)|LISTコマンドを送信してメールボックスにあるメッセージの一覧を取得します。|-|取得したメッセージの一覧は、PopWebResponse.ScanListsプロパティに設定されます。|
+
|PopWebRequestMethods.Rset, "RSET"|RSETコマンドを送信してDELEコマンドの操作をキャンセルします。|-||
+
|PopWebRequestMethods.Stat, "STAT"|STATコマンドを送信してメールボックスにあるメッセージの数と総サイズを取得します。|-|取得したメッセージ数と総サイズは、PopWebResponse.DropListプロパティに設定されます。|
+
|PopWebRequestMethods.Uidl, "UIDL"|UIDLコマンドを送信してメールボックスにあるメッセージのIDの一覧を取得します。|-|取得したIDの一覧は、PopWebResponse.UniqueIdListsプロパティに設定されます。|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***特定のメッセージに対するリクエスト
+
リクエストURLが特定のメッセージを表す場合(pop://pop.example.net/;MSG=1の形式)のリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティ|リクエスト|解説|レスポンス|h
+
|PopWebRequestMethods.Retr, "RETR"&br;(デフォルト)|RETRコマンドを送信してメッセージの本文を取得します。|-|メッセージ本文はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 取得したメッセージのサイズはWebResponse.ContentLengthプロパティに設定されます。|
+
|PopWebRequestMethods.Dele, "DELE"|DELEコマンドを送信してメッセージを削除します。|-|-|
+
|PopWebRequestMethods.List, "LIST"|LISTコマンドを送信してメッセージの番号とサイズを取得します。|-|取得したメッセージ番号とサイズは、PopWebResponse.ScanListsプロパティに設定されます。|
+
|PopWebRequestMethods.Top, "TOP"|TOPコマンドを送信してメッセージをヘッダ部分を取得します。|現時点ではTOPで取得するボディ部分の行数は指定できません(常に0を指定します)。|メッセージのヘッダ部分はWebResponse.GetResponseStreamメソッドが返すStreamから読み込めます。 取得したヘッダ部分のサイズはWebResponse.ContentLengthプロパティに設定されます。|
+
|PopWebRequestMethods.Uidl, "UIDL"|UIDLコマンドを送信してメッセージの番号とIDを取得します。|-|取得したメッセージ番号とIDは、PopWebResponse.UniqueIdListsプロパティに設定されます。|
+
|Methodプロパティ|リクエスト|解説|レスポンス|f
+

          
+
***リクエスト対象に制限されないリクエスト
+
リクエストURLの形式によらず使用可能なコマンドのリクエストとレスポンスの動作は次のとおりです。
+

          
+
|Methodプロパティに指定可能な値|リクエスト|解説|レスポンス|h
+
|PopWebRequestMethods.NoOp, "NOOP"|NOOPコマンドを送信します。|このコマンドは何もしません。 自動ログアウトタイマの更新、セッションの接続性確認などに使います。|-|
+
|Methodプロパティに指定可能な値|リクエスト|解説|レスポンス|f
+

          
+
***PopWebRequestクラスのプロパティ
+
PopWebRequestクラスにはMethodプロパティ以外にもコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
+

          
+
|*PopWebRequestクラスのプロパティ
+
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
+
|KeepAlive|true|全て|リクエストが終了した後もセッションを維持するかどうかを指定します。 trueの場合はリクエストが終了してもセッションは維持し、falseの場合はリクエストの度にセッションを開きリクエスト終了と同時にセッションを閉じます|
+
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、認証を行う前にTLSを使用した接続にアップグレードします。|
+
|UsingSaslMechanisms|{"DIGEST-MD5", "CRAM-MD5", "NTLM"}|全て(認証時)|認証メカニズムが指定されていない場合に、試行する認証メカニズムとその順番を配列で指定します。 サーバ・クライアントの両方がサポートするメカニズム以外が指定されている場合は無視します。|
+
//|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、エラーレスポンスでもWebExceptionがスローされません。|
+

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

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

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

          
+
**Gmail
+
Gmailに接続し、メッセージの一覧を取得した後、一番最後のメッセージを取得し、表示するサンプル。
+
#code(cs){{
+
using System;
+
using System.IO;
+
using System.Text;
+
using System.Net;
+

          
+
using Smdn.Net.Pop3;
+
using Smdn.Net.Pop3.Client.Session;
+
using Smdn.Net.Pop3.Protocol.Client;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    PopConnection.CertificateValidationCallback += delegate {
+
      return true;
+
    };
+

          
+
    using {
+
      session.Credentials = new NetworkCredential("user", "pass");
+

          
+
      if {
+
        Console.Error.WriteLine("authentication failed");
+
        return;
+
      }
+

          
+
      PopScanListing[] scanLists;
+

          
+
      session.List(out scanLists);
+

          
+
      PopMessage message;
+

          
+
      session.Retr(scanLists[scanLists.Length - 1].MessageNumber, out message);
+

          
+
      var reader = new StreamReader(message.Body, Encoding.GetEncoding("iso-2022-jp"));
+

          
+
      Console.WriteLine(reader.ReadToEnd());
+
    }
+
  }
+
}
+
}}
+

          

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

current previous
1,96 1,92
 
${smdncms:title,Smdn.Net.Pop3}
${smdncms:title,Smdn.Net.Pop3}
+
${smdncms:header_title,Smdn.Net.Pop3}
 
${smdncms:keywords,C#,.NET,Mono,POP,POP3}
${smdncms:keywords,C#,.NET,Mono,POP,POP3}
 
C#で書いた.NET Framework/Mono用POP3クライアントライブラリです。 POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。
C#で書いた.NET Framework/Mono用POP3クライアントライブラリです。 POPサーバからのメールボックスのステータス取得、メッセージのダウンロード・削除が出来ます。
 

        

        
~
-姉妹品
*機能
~
--[[works/libs/Smdn.Net.Imap4]]
現在対応している機能の一覧です。 部分的に対応しているものも含みます。
~
-関連ライブラリ
-認証
~
--[[works/libs/Smdn.Security.Authentication.Sasl]]
--APOP
~
--[[works/libs/Smdn.Formats.Mime]]
--AUTH
-
--USER/PASS
-
--STLS
-
-コマンド
-
--STAT, LIST, RETR, DELE, NOOP, RSET, TOP, UIDL, QUIT
-
--CAPA
-
-その他
-
--RFC 2384 POP URL Scheme
-

          
-
RFC 1939で規定されているコマンドは概ね実装が完了しています。
 

        

        
~
*機能
*ダウンロード
~
使用可能なコマンド
#googleadunit
~
:認証系コマンド|USER, PASS, QUIT, APOP, AUTH(&urn2url(urn:ietf:rfc:5034,short);)
[[works/tools/junk/TundereBird]]に含まれているものを使ってください。
+
::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);)
+

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

        

        
~
*使い方・サンプルコード
*サンプル
~
もっとも簡単なサンプルコードとして、System.Net.WebClientクラスとPOP URLを使ったメッセージのダウンロード方法を例示します。 Gmailアカウントにアクセスし、メッセージをダウンロードしてファイルに保存するサンプルです。
本ライブラリを使用して、GMail POPサーバからメールをダウンロードして本文を表示したあと、サーバ上のメールを削除する例です。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
~
using System.Net;
using Smdn.Protocols.Pop3;
-
using Smdn.Protocols.Pop3.Client;
 

        

        
~
using Smdn.Net.Pop3.WebClients;
public class GmailRetrieveSample {
-
  public static void Main(string[] args) {
-
    using {
-
      agent.Initialize();
-
      agent.ServerCertificateValidationCallback = delegate {
-
        return true;
-
      };
 

        

        
~
class GpopRetrieveExample {
      var client = agent.CreateClient();
+
  public static void Main()
+
  {
+
    PopSessionManager.RegisterWebRequestPrefix();
+
    PopSessionManager.CertificateValidationCallback += delegate {
+
      return true;
+
    };
+

          
+
    using {
+
      client.Credentials = new NetworkCredential("username", "password");
+
      client.DownloadFile("pops://username@pop.gmail.com/;MSG=1", "message.eml");
+
    }
+
  }
+
}
+
}}
 

        

        
~
この例で使用している修飾子(;MSG=1)はPOP URLに対する独自の拡張です。 詳細・その他のサンプルコードは[[works/libs/Smdn.Net.Pop3/doc]]およびデモ用アプリケーション[[works/tools/junk/TundereBird]]をご覧ください。
      client.HostUri = new PopUri("pop://username;AUTH=*@pop.gmail.com:995/");
-
      client.Password = "password";
-
      client.UseSsl = true;
 

        

        
~
*ダウンロード
      client.Login();
+
#googleadunit
+
0.20以降はMIT X11ライセンスでのリリースとなります。 0.20より前のバージョンについては特に使用条件を定めていません。
 

        

        
~
-開発版
      foreach {
~
--[[anonsvn]]よりチェックアウトできます
        client.Retrieve(message);
+
-0.2x
+
--${smdncms:distfilelink,Smdn.Net.Pop3.Client-0.22.tar.bz2}
+
-0.1x
+
--[[works/tools/junk/TundereBird]]に含まれているものを使ってください
 

        

        
~
*不具合・要望・質問等
        Console.WriteLine(message.Body);
+
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
~
*変更履歴
        client.Delete(message);
~
**0.22
      }
+
-[[works/libs/Smdn.Net.Imap4]]をベースに再実装
+
-PopWebRequest/PopWebResponseクラスの実装を追加
+
-アセンブリ名・名前空間をSmdn.Protocols.Pop3からSmdn.Net.Pop3に改名
+

          
+
**0.13
+
-STLSコマンドによるTLSへのアップグレードに対応
+
-取得したメッセージの改行文字が環境によって変わってしまう不具合を修正
 

        

        
~
**0.12
      client.Logout();
~
-HMACMD5アルゴリズムの実装を独自の実装からライブラリ標準のクラスを用いたものに変更
    }
-
  }
-
}
-
}}
 

        

        
~
**0.11
本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/TundereBird]]もご覧ください。
+
-[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
 

        

        
~
**0.10
*変更履歴
~
-初版
:0.13|STLSコマンドによるTLSへのアップグレードに対応
-
取得したメッセージの改行文字が環境によって変わってしまう不具合を修正
-
:0.12|HMACMD5アルゴリズムの実装を独自の実装からライブラリ標準のクラスを用いたものに変更
-
:0.11|[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
-
:0.10|初版
 

        

        
 
*動作状況
*動作状況
~
以下のPOPサーバに対して概ね問題なく動作することを確認済みです。
以下のPOPサーバに対して動作することを確認済みです。
~
-GMail
-Gpop(GMail)
~
-Dovecot
-Dovecot
-
--1.0.rc17
 

        

        
 
以下の環境で動作することを確認済みです。
以下の環境で動作することを確認済みです。
~
-.NET Framework 3.5
-.NET Framework 2.0.50727
~
-Mono 2.7
-Mono 1.2.6
-
-Mono 1.9
-

          
-
*対応予定
-
今後対応する予定の機能です。
-
-RFC 3206 The SYS and AUTH POP Response Codes
-
-[[works/libs/Smdn.Net.Imap4]]と統合したバージョンの作成
 

        

        
~
*制限事項
*注意
 
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
-MIMEメッセージのデコード機能は含んでいません。 デコード機能が必要な場合は他のライブラリか、[[works/libs/Smdn.Formats.Mime]]を使ってください。
-
-本ライブラリはトレースにログを出力します。 ログにはパスワードを含む送受信内容を解読可能な状態で書き出します。 不要な場合はTrace.csを削除するか、TRACEオプションおよびDUMPオプションを外してリビルドしてください。
-
-タイムアウト処理を実装してありますが、タイムアウトさせると内部状態がおかしくなるので使わない方がいいです。
 

        

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

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

current previous
1,59 0,0
+
${smdncms:title,Smdn.Security.Authentication.Sasl}
+
${smdncms:header_title,Smdn.Security.Authentication.Sasl}
+
${smdncms:keywords,Smdn.Security.Authentication.Sasl,SASL,DIGEST-MD5,CRAM-MD5,C#,.NET,ライブラリ}
+
C#で書いた.NET Framework/Mono用SASLクライアントライブラリです。 IMAP4クライアントライブラリ[[works/libs/Smdn.Net.Imap4]]およびPOP3クライアントライブラリ[[works/libs/Smdn.Net.Pop3]]にてSASLによる認証処理で使用しています。
+

          
+
*機能概要
+
サポートするSASLメカニズムの一覧です。
+

          
+
|RFC|mechanism name|status|note|h
+
|&urn2url(urn:ietf:rfc:1731,anchor-text);|KERBEROS_V4|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:2195,anchor-text);|CRAM-MD5|&color(green){implemented};||
+
|&urn2url(urn:ietf:rfc:2444,anchor-text);|OTP|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:2444,anchor-text);|SKEY|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:2595,anchor-text);|PLAIN|&color(green){implemented};||
+
|&urn2url(urn:ietf:rfc:2808,anchor-text);|SECURID|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:2831,anchor-text);|DIGEST-MD5|&color(orange){partially implemented};|realmには対応していません。 また、サーバ側の実装によっては正しく動作しない可能性があります。|
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-RSA-SHA1-ENC|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-RSA-SHA1-ENC|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-DSA-SHA1|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-DSA-SHA1|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-U-ECDSA-SHA1|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:3163,anchor-text);|9798-M-ECDSA-SHA1|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:4422,anchor-text);|EXTERNAL|&color(gray){not implemented};||
+
|&urn2url(urn:ietf:rfc:4505,anchor-text);|ANONYMOUS|&color(green){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};|Mono.Security.dllを使用します。 Mono.Security.dllを動的にロードできない環境では使用できません。 また、サーバ側の実装によっては正しく動作しない可能性があります。|
+
|&urn2url(urn:ietf:id:ietf-sasl-scram-10,anchor-text);|SCRAM-*|&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-10,anchor-text);|SCRAM-SHA-1-PLUS|&color(gray){not implemented};||
+
|RFC|mechanism name|status|note|f
+

          
+
使い方・実装は[[works/libs/Smdn.Net.Imap4]]および[[works/libs/Smdn.Net.Pop3]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
+

          
+
*ダウンロード
+
#googleadunit
+
すべてMIT X11ライセンスでのリリースとなります。
+

          
+
-開発版
+
--[[anonsvn]]よりチェックアウトできます
+
-0.2x
+
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.22.tar.bz2}
+

          
+
*不具合・要望・質問等
+
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
+

          
+
**0.22
+
-[[works/libs/Smdn.Net.Imap4]], [[works/libs/Smdn.Net.Pop3]]バージョンアップに伴うリリース
+

          
+
**0.21
+
-[[works/libs/Smdn.Net.Imap4]]より分離
+

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

          
+
**関連リンク
+
-[[IANA — Protocol Registries:http://www.iana.org/protocols/]]
+
--[[SIMPLE AUTHENTICATION AND SECURITY LAYER MECHANISMS:http://www.iana.org/assignments/sasl-mechanisms]]
+

          

works/libs/Smdn.Formats.Ini/index.wiki.txt

current previous
1,5 1,4
 
${smdncms:title,Smdn.Formats.Ini}
${smdncms:title,Smdn.Formats.Ini}
+
${smdncms:header_title,Smdn.Formats.Ini}
 
${smdncms:keywords,C#,.NET,Mono,Ini,ライブラリ}
${smdncms:keywords,C#,.NET,Mono,Ini,ライブラリ}
 
C#で書いた.NET Framework/Mono用INIファイル読み込み/保存ライブラリです。
C#で書いた.NET Framework/Mono用INIファイル読み込み/保存ライブラリです。
 

        

        
19,14 18,13
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.1x
-0.1x
+
--${smdncms:distfilelink,Smdn.Formats.Ini-0.16.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Ini-0.15.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Ini-0.15.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Ini-0.14.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Ini-0.14.tar.bz2}
 
--上記以前のバージョン
--上記以前のバージョン
 
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
 

        

        
 
*不具合・要望・質問等
*不具合・要望・質問等
~
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合・要望・使い方の質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*サンプル
*サンプル
 
本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
141,9 139,6
 
}}
}}
 

        

        
 
*変更履歴
*変更履歴
+
**0.16
+
-[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
+

          
 
**0.15
**0.15
 
-機能追加
-機能追加
 
--任意の型変換用デリゲート(Converter<string, TOutput>)を指定して値を取得できるようにした
--任意の型変換用デリゲート(Converter<string, TOutput>)を指定して値を取得できるようにした