2009-12-16T08:34:40の更新内容

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

current previous
10,14 10,7
 

        

        
 
*ダウンロード
*ダウンロード
 
#googleadunit
#googleadunit
+
-開発版
+
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,TundereBird-0.21.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.21
+
---[[works/libs/Smdn.Formats.Mime]] 0.15
+
---[[works/libs/Smdn.Formats.Ini]] 0.15
 
--${smdncms:distfilelink,TundereBird-0.20.tar.bz2}
--${smdncms:distfilelink,TundereBird-0.20.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.20
---[[Smdn.Protocols.Imap4>works/libs/Smdn.Net.Imap4]] 0.20
49,34 42,17
 
---[[works/libs/Smdn.Formats.Ini]] 0.10
---[[works/libs/Smdn.Formats.Ini]] 0.10
 

        

        
 
*使い方
*使い方
~
+tunderebird.iniを開いてアカウント情報を記入してから起動してください。
tunderebird.iniを開いてアカウント情報を記入してから起動してください。
+
+Visual Studioではログ出力により動作が遅くなる場合があります。 遅くなる場合は、tunderebird.exe.configを編集してログを出力しないようにしてください。
+

          
+
*不具合・要望・質問等
+
ライブラリに関する不具合・要望・質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
~
**0.21
**0.2x
~
-機能追加
:0.20|POP3のサポートを削除
~
--設定ファイルにメールボックスの選択時にSELECTとEXAMINEのどちらを使用するか指定するReadOnlyキーを追加
メッセージのアップロード・ダウンロード機能を追加
~
--メールボックス・メッセージに対する各種操作(作成・削除・フラグの設定など)を行えるようにした
IMAPサーバの情報を表示するタブを追加
~
-修正・改善

          
~
--メールボックス一覧取得時などのUI周りの動作を改善
**0.1x
~

          
:0.13|ライブラリのバージョンアップに伴うリリース
~
**0.20
:0.12|ライブラリのバージョンアップに伴うリリース
~
-POP3のサポートを削除
:0.11|POP3に対応
~
-メッセージのアップロード・ダウンロード機能を追加
:0.10|初版
+
-IMAPサーバの情報を表示するタブを追加
+

          
+
**0.13
+
-ライブラリのバージョンアップに伴うリリース
+

          
+
**0.12
+
-ライブラリのバージョンアップに伴うリリース
+

          
+
**0.11
+
-POP3に対応
+

          
+
**0.10
+
-初版
 

        

        

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

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

        

        
~
*使用例
*ライブラリの設計と実装の概要
~
個々のサンプルの詳細については、後述するSmdn.Net.Imap4.WebClient名前空間の説明を参照してください。
**クライアント
-
クライアントの実装は2種類あります。 一つはSmdn.Protocols.Imap4.Client.Session名前空間のImapSessionクラス、もう一つはSmdn.Protocols.Imap4.WebClient名前空間のImapWebRequest/ImapWebResponseクラスです。 Smdn.Protocols.Imap4.WebClient名前空間のクライアントは、System.Net.WebRequest/System.Net.WebResponseを継承したもので、内部でImapSessionクラスを使用しています。
-

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

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

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

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

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

          
-
|*証明書に関する型と該当するメンバ(いずれもクラス・プロパティ)
-
|~証明書に関する型|>|~該当するメンバ|
-
|~|~Smdn.Protocols.Imap4.Client.Connection名前空間|~Smdn.Protocols.Imap4.WebClient名前空間|
-
|X509Certificate2Collection|ImapConnection.CertCollection|ImapSessionManager.CertCollection|
-
|RemoteCertificateValidationCallback|ImapConnection.CertificateValidationCallback|ImapSessionManager.CertificateValidationCallback|
-
|LocalCertificateSelectionCallback|ImapConnection.CertificateSelectionCallback|ImapSessionManager.CertificateSelectionCallback|
-

          
-
**操作とデータ構造
-
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
 

        

        
~
**メッセージのダウンロード
**メールボックスのインスタンス
~
WebClientクラスを使って、localhostのINBOXメールボックスからUIDが1のメールをダウンロードし、sample.emlとして保存するサンプル。 ログインユーザ名にuser、パスワードにpassを使用し、認証方式にDIGEST-MD5を使用。
メールボックスの情報はImapMailboxクラスに保持されます。 このクラスのインスタンスは、LISTコマンド等により作成された後は、ログアウトするまでライブラリ側で管理されます。 同じメールボックスに対してSELECTしたりRENAMEした場合はインスタンスの値のみが更新され、常に同じインスタンスが返されます。
-

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

          
-
|*ログ出力に使用するTraceSourceの名前と出力内容
-
|TraceSource|出力内容|h
-
|Smdn.Protocols.Imap4|サーバとの送受信内容とセッション毎の動作ログを出力します。|
-
|Smdn.Protocols.Imap4#Connection|サーバとの送受信内容のみを出力します。|
-

          
-
*Smdn.Protocols.Imap4.WebClient名前空間
-
Smdn.Protocols.Imap4.WebClient名前空間のクラスの使い方。
-

          
-
**簡単なサンプル
-
WebClientクラスを使って、localhostのINBOXメールボックスからUIDが1のメールをダウンロードし、sample.emlとして保存するサンプル。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
26,14 66,13
 
}
}
 
}}
}}
 

        

        
+
**メッセージのアップロード
 
WebClientクラスを使って、localhostのINBOXメールボックスにsample.emlをアップロードするサンプル。
WebClientクラスを使って、localhostのINBOXメールボックスにsample.emlをアップロードするサンプル。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
 
using System.IO;
using System.IO;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
48,13 87,12
 
}
}
 
}}
}}
 

        

        
+
**メッセージの検索
 
WebRequestクラスを使って、Gmailアカウントのメールボックスからタイトルに[Mono-dev]を含むメールの一覧を取得する例。
WebRequestクラスを使って、Gmailアカウントのメールボックスからタイトルに[Mono-dev]を含むメールの一覧を取得する例。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

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

        

        
 
class Sample {
class Sample {
 
  public static void Main(string[] args)
  public static void Main(string[] args)
75,51 113,8
 
}
}
 
}}
}}
 

        

        
+
*ライブラリの設計と実装の概要
+
**クライアント
+
クライアントの実装は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で対応するような実装にしてあります。
+
切断する/されるまで選択済みメールボックス・メールボックス毎のフラグ・サーバの能力・名前空間等のセッションの状態を保持します。
+
:ImapWebRequest/ImapWebResponseクラス|IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)を用いたクライアントの実装です。 IMAP URLの形式でIMAPの操作を行うので、読み込みのみの操作に関しては送信されるIMAPコマンドを意識せずに扱えます。
+
ImapWebRequest.KeepAliveプロパティでリクエスト毎にセッションを切断するか、ログイン状態を維持するかどうか設定できます。 また、送信するコマンドはImapWebRequest.Methodプロパティで変更できます。
+

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

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

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

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

          
+
**操作とデータ構造
+
ImapSessionクラスには、IMAPコマンドと1対1に対応するメソッドが用意されています。 また、すべてのコマンドの引数とレスポンスのデータ構造は、それに対応する型が定義されています。 これらの型は出来る限り仕様と1対1で対応するように実装してあり、IMAPの詳細が分からなくても使えることを目的とするような抽象化はしていません。
+

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

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

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

          
+
*Smdn.Net.Imap4.WebClient名前空間
+
Smdn.Net.Imap4.WebClient名前空間のクラスの使い方。
+

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

        

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

        

        
181,136 176,24
 
|ImapWebRequestMethods.Thread|THREADコマンドを送信して検索クエリに該当するメッセージの一覧をスレッド形式で取得します。|スレッド形式のアルゴリズムはImapWebRequest.ThreadingAlgorithmプロパティで指定します。 また、取得したスレッド形式の一覧は、ImapWebResponse.ThreadTreeプロパティに設定されます。&br;''サーバがTHREAD=* extensionをサポートしない場合、WebExceptionをスローします。''|
|ImapWebRequestMethods.Thread|THREADコマンドを送信して検索クエリに該当するメッセージの一覧をスレッド形式で取得します。|スレッド形式のアルゴリズムはImapWebRequest.ThreadingAlgorithmプロパティで指定します。 また、取得したスレッド形式の一覧は、ImapWebResponse.ThreadTreeプロパティに設定されます。&br;''サーバがTHREAD=* extensionをサポートしない場合、WebExceptionをスローします。''|
 
|ImapWebRequestMethods.Sort|SORTコマンドを送信して検索クエリに該当するメッセージの一覧をソート済みの形式で取得します。|ソート方法はImapWebRequest.SortCriteriaプロパティで指定します。 また、取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。&br;''サーバがSORT=* extensionをサポートしない場合、WebExceptionをスローします。''|
|ImapWebRequestMethods.Sort|SORTコマンドを送信して検索クエリに該当するメッセージの一覧をソート済みの形式で取得します。|ソート方法はImapWebRequest.SortCriteriaプロパティで指定します。 また、取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。&br;''サーバがSORT=* extensionをサポートしない場合、WebExceptionをスローします。''|
 

        

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

        

        
~
**ImapWebRequestクラスのプロパティ
*Smdn.Protocols.Imap4.Client.Session名前空間
~
ImapWebRequestクラスにはコマンド送信時の動作を制御するためのプロパティを用意してあります。 プロパティの値によってリクエスト内容と動作が変わります。
Smdn.Protocols.Imap4.Client.Session名前空間のクラスの使い方。 このドキュメントは作成中です。 [[works/tools/junk/TundereBird]]およびSmdn.Protocols.Imap4.WebClientの各クラスの実装を参照してください。
+

          
+
|*ImapWebRequestクラスのプロパティ
+
|プロパティ|デフォルト|対象となるコマンド|リクエスト内容と動作|h
+
|KeepAlive|true|全て|リクエストが終了した後もログイン状態を維持するかどうかを指定します。|
+
|AllowLoginRedirect|true|全て(認証時)|認証時にサーバがレスポンスコードREFERRALを返した場合、レスポンスコードで指定されたURLで再度ログインを試みるかどうかを指定します。(この機能は未テストです。 期待する動作となるかどうかは分かりません)
+
|UseTlsIfAvailable|true|全て(認証時)|サーバがサポートしている場合、TLSを使用した接続に変更します。|
+
|UseDeflateIfAvailable|false|全て|サーバがサポートしている場合、DEFLATE圧縮アルゴリズムを使用した接続に変更します。 (この機能は現在動作しません。 trueにした場合、NotImplementedExceptionがスローされます)|
+
|ExpectedErrorResponseCodes|null|全て|サーバから返されることが予期されるエラーレスポンスコードの配列を指定します。 サーバからこれらのレスポンスコードが返された場合は、WebExceptionがスローされません。|
+
|ReadOnly|false|FETCH, SEARCH等|メールボックスを選択する際に、SELECTコマンドの代わりにEXAMINEコマンドを送信するかどうかを指定します。 メッセージに対する操作を行うコマンドを送信する場合に有効になります。 EXAMINEコマンドで選択したメールボックスのメッセージに対する操作の結果はサーバの実装によります。 ReadOnlyがtrueでもDELETEなどのコマンドには影響しません。|
+
|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コマンドで使用するソート方法を指定します。|
+
|ThreadingAlgorithm|null|THREAD|THREADコマンドで使用するスレッド形式のアルゴリズムを指定します。|
+

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

          
+
var request = WebRequest.Create("imap://user@localhost/INBOX/?ALL") as ImapWebRequest;
+

          
+
request.Credentials = new NetworkCredential("user", "pass");
+
request.Method = ImapWebRequestMethods.Copy;
+
request.AllowCreateMailbox = true;
+
request.DestinationUri = new Uri("imap://user@localhost/INBOX.backup/");
+

          
+
using {
+
  :
+
  :
+
}
+
}}
+

          
+
***メールボックスの削除
+
メールボックスINBOX.oldを削除する例。 ExpectedErrorResponseCodesプロパティにImapResponseCode.NonExistentを指定しておくことで、メールボックスが存在しない場合(サーバがレスポンスコードNONEXISTENTを返した場合)でもWebExceptionをスローしないようにします。
+

          
+
#code(cs){{
+
using System;
+
using System.Net;
+
using Smdn.Net.Imap4;
+
using Smdn.Net.Imap4.Protocol.Client;
+
using Smdn.Net.Imap4.WebClient;
+
  :
+

          
+
var request = WebRequest.Create("imap://user@localhost/INBOX.old/") as ImapWebRequest;
+

          
+
request.Credentials = new NetworkCredential("user", "pass");
+
request.Method = ImapWebRequestMethods.Delete;
+
request.ExpectedErrorResponseCodes = new[] {ImapResponseCode.NonExistent};
+

          
+
using {
+
  :
+
  :
+
}
+
}}
+

          
+
***メールボックスの作成
+
メールボックスINBOX.newを作成する例。 先の例と同様に、メールボックスがすでに存在する場合(サーバがレスポンスコードALREADYEXISTSを返した場合)でもWebExceptionをスローしないようにします。
+

          
+
#code(cs){{
+
using System;
+
using System.Net;
+
using Smdn.Net.Imap4;
+
using Smdn.Net.Imap4.Protocol.Client;
+
using Smdn.Net.Imap4.WebClient;
+
  :
+

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

          
+
request.Credentials = new NetworkCredential("user", "pass");
+
request.Method = ImapWebRequestMethods.Create;
+
request.ExpectedErrorResponseCodes = new[] {ImapResponseCode.AlreadyExists};
+

          
+
using {
+
  :
+
  :
+
}
+
}}
+

          
+
***メッセージへのフラグの設定
+
fromにspammer.example.comを含むメッセージをすべて既読にし、Thunderbirdの迷惑メールのマーク(Junk)を設定する例。 ImapStoreDataItem.ReplaceFlagsメソッドを使って新しく置き換える(設定する)フラグを作成し、StoreDataItemプロパティにしています。
+

          
+
#code(cs){{
+
using System;
+
using System.Net;
+
using System.Text;
+

          
+
using Smdn.Net.Imap4;
+
using Smdn.Net.Imap4.Protocol.Client;
+
using Smdn.Net.Imap4.WebClient;
+
  :
+

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

          
+
request.Credentials = new NetworkCredential("user", "pass");
+
request.Method = ImapWebRequestMethods.Store;
+
request.StoreDataItem = ImapStoreDataItem.ReplaceFlags(new[] {"Junk"}, ImapMessageFlag.Seen);
+

          
+
using {
+
  :
+
  :
+
}
+
}}
+

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

        

        
~
**サンプル
**簡単なサンプル
+
***ログインと各種コマンド送信の例
 
IDLEでメールボックス(INBOX)を監視し、新着メッセージが着たらサブジェクトを表示するサンプル。
IDLEでメールボックス(INBOX)を監視し、新着メッセージが着たらサブジェクトを表示するサンプル。
 

        

        
 
#code(cs){{
#code(cs){{
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

        
~
using Smdn.Net.Imap4;
using Smdn.Protocols.Imap4;
~
using Smdn.Net.Imap4.Client;
using Smdn.Protocols.Imap4.Client;
~
using Smdn.Net.Imap4.Client.Session;
using Smdn.Protocols.Imap4.Client.Protocol;
-
using Smdn.Protocols.Imap4.Client.Session;
 

        

        
 
class Sample {
class Sample {
 
  public static void Main()
  public static void Main()
348,7 231,7
 

        

        
 
      ImapMessage[] messages;
      ImapMessage[] messages;
 

        

        
~
      session.Fetch(matched, ImapFetchDataItem.All, out messages);
      session.UidFetch(matched, ImapFetchDataItem.All, out messages);
 

        

        
 
      foreach {
      foreach {
 
        Console.WriteLine(message.Envelope.Subject);
        Console.WriteLine(message.Envelope.Subject);
358,16 241,15
 
}
}
 
}}
}}
 

        

        
+
***Gmail
 
Gmailに接続し、スター付きのメールにThunderbirdのTo Doタグを付けるサンプル。
Gmailに接続し、スター付きのメールにThunderbirdのTo Doタグを付けるサンプル。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
 
using System.Net;
using System.Net;
 

        

        
~
using Smdn.Net.Imap4;
using Smdn.Protocols.Imap4;
~
using Smdn.Net.Imap4.Client;
using Smdn.Protocols.Imap4.Client;
~
using Smdn.Net.Imap4.Client.Session;
using Smdn.Protocols.Imap4.Client.Protocol;
~
using Smdn.Net.Imap4.Protocol.Client;
using Smdn.Protocols.Imap4.Client.Session;
 

        

        
 
class Sample {
class Sample {
 
  public static void Main()
  public static void Main()

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

current previous
3,97 3,64
 
C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
C#で書いた.NET Framework/Mono用IMAP4rev1クライアントライブラリです。 IMAPサーバからのメールボックスの管理(作成・削除・ステータスの取得など)、メッセージの検索・取得・アップロードなどが出来ます。
 

        

        
 
*機能概要
*機能概要
~
使用可能なコマンド
-使用可能なコマンド
~
:認証系コマンド|LOGIN, AUTHENTICATE, LOGOUT, STARTTLS
--認証系コマンド
~
::認証方式|DIGEST-MD5, CRAM-MD5, NTLM, PLAIN, LOGIN, ANONYMOUS
---AUTHENTICATE(DIGEST-MD5, CRAM-MD5, NTLM, PLAIN, LOGIN, ANONYMOUS), LOGIN, LOGOUT, STARTTLS
~
:メールボックス操作系コマンド|
--メールボックス操作系コマンド
~
::標準コマンド|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
~
:メッセージ操作系コマンド|
--メッセージ操作系コマンド
~
::標準コマンド|APPEND,SEARCH, EXPUNGE
---標準コマンド: APPEND,SEARCH, EXPUNGE
~
::拡張コマンド|(UID)SORT,, UID EXPUNGE
---拡張コマンド:, UID EXPUNGE
~
:その他のコマンド|
--その他のコマンド
~
::標準コマンド|NOOP, CHECK, CAPABILITY
---標準コマンド: NOOP, CHECK, CAPABILITY
~
::拡張コマンド|ENABLE, COMPRESS, IDLE, ID
---拡張コマンド: ENABLE, COMPRESS, IDLE, ID
~

          
-クライアント機能
~
実装しているクライアントは次の二種類です。
--IMAPコマンドと1対1に対応するメソッドを持つクライアント
~
:ImapSessionクラス|IMAPコマンドと1対1に対応するメソッドを持つクライアント
--WebRequest/WebResponseクラスから派生しIMAP URLでの操作に対応したクライアント
+
:ImapWebRequest/ImapWebResponseクラス|WebRequest/WebResponseクラスから派生し、IMAP URLでの操作に対応したクライアント
 

        

        
~
使い方・サンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]、機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
機能の詳細は[[works/libs/Smdn.Net.Imap4/feature]]、使い方・サンプルコードは[[works/libs/Smdn.Net.Imap4/doc]]をご覧ください。 またデモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
 

        

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

        

        
+
-開発版
+
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${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]]へどうぞ。
+

          
 
*変更履歴
*変更履歴
~
**0.21
**0.2x
~
-機能追加
:0.20|ライセンスをMIT X11に変更
~
--WebClient名前空間
コマンド・リクエストの処理をセッションに共通スレッドからセッション毎のスレッドプールを使用するように変更
~
---ImapWebRequest.ReadOnlyプロパティを追加
リクエストの処理速度を改善
~
---ImapWebRequest.AllowCreateMailboxプロパティを追加
&urn2url(urn:ietf:rfc:4315){UIDPLUS};、&urn2url(urn:ietf:rfc:4731){ESEARCH};、&urn2url(urn:ietf:rfc:5182){SEARCHRES};などの拡張に対応
~
---ImapWebRequest.ExpectedErrorResponseCodesプロパティを追加
DIGEST-MD5およびNTLM認証に対応
~
-修正・改善

          
~
--DIGEST-MD5認証時にOverflowExceptionとなる不具合を修正(Windowsのみ)
**0.1x
~
--&urn2url(urn:ietf:rfc:4978){COMPRESS=DEFLATE};の実装を無効化
:0.13|STARTTLSコマンドによるTLSへのアップグレードに対応
~
--ImapUriクラスを廃止、IMAP URL関連の実装を修正
不正な形式のModified UTF-7文字列のデコードで例外となる場合の対処を追加
~
--WebClient名前空間
PREAUTH応答のグリーティングメッセージからのcapability dataの取得に失敗する不具合を修正
~
---検索条件にマッチするメッセージが無い場合に例外エラーとなる不具合を修正
FETCHリクエストを10240オクテット毎にpartial fetchするように改善
~
---CREATE/RENAME後にLSUBでメールボックスの属性を更新するように改善
未知の種類のBODYSTRUCTUREの場合でも解析を継続するように改善
~
-その他
:0.12|Modified UTF-7(日本語等非ASCII文字を含むメールボックス名)に対応
~
--アセンブリ名・名前空間をSmdn.Protocols.Imap4からSmdn.Net.Imap4に改名
レスポンス解析処理のバグを修正
~
--アセンブリ構成を変更
IDLE後のレスポンス処理が即座に行われない不具合を修正
~

          
HMACMD5アルゴリズムの実装を独自の実装からライブラリ標準のクラスを用いたものに変更
~
**0.20
:0.11|グリーティングメッセージからのcapability dataの取得に失敗する不具合を修正
~
-機能追加
セッションのステートチェック処理の誤りを修正
~
--DIGEST-MD5およびNTLM認証に対応
AUTHENTICATEで使用できる認証方法がない場合の動作を変更
~
--&urn2url(urn:ietf:rfc:4315){UIDPLUS};、&urn2url(urn:ietf:rfc:4731){ESEARCH};、&urn2url(urn:ietf:rfc:5182){SEARCHRES};などの拡張に対応
:0.10|初版
+
-修正・改善
+
--コマンド・リクエストの処理をセッションに共通スレッドからセッション毎のスレッドプールを使用するように変更
+
--リクエストの処理速度を改善
+
-その他
+
--ライセンスをMIT X11に変更
+

          
+
**0.13
+
-STARTTLSコマンドによるTLSへのアップグレードに対応
+
-不正な形式のModified UTF-7文字列のデコードで例外となる場合の対処を追加
+
-PREAUTH応答のグリーティングメッセージからのcapability dataの取得に失敗する不具合を修正
+
-FETCHリクエストを10240オクテット毎にpartial fetchするように改善
+
-未知の種類のBODYSTRUCTUREの場合でも解析を継続するように改善
+

          
+
**0.12
+
-Modified UTF-7(日本語等非ASCII文字を含むメールボックス名)に対応
+
-レスポンス解析処理のバグを修正
+
-IDLE後のレスポンス処理が即座に行われない不具合を修正
+
-HMACMD5アルゴリズムの実装を独自の実装からライブラリ標準のクラスを用いたものに変更
+

          
+
**0.11
+
-グリーティングメッセージからのcapability dataの取得に失敗する不具合を修正
+
-セッションのステートチェック処理の誤りを修正
+
-AUTHENTICATEで使用できる認証方法がない場合の動作を変更
+

          
+
**0.10
+
-初版
 

        

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

        

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

        

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

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

current previous
37,7 37,7
 
|&urn2url(urn:ietf:rfc:4551,anchor-text);|CONDSTORE|&color(orange){partially implemented};||
|&urn2url(urn:ietf:rfc:4551,anchor-text);|CONDSTORE|&color(orange){partially implemented};||
 
|&urn2url(urn:ietf:rfc:4731,anchor-text);|ESEARCH|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:4731,anchor-text);|ESEARCH|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:4959,anchor-text);|SASL-IR|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:4959,anchor-text);|SASL-IR|&color(gray){not implemented};||
~
|&urn2url(urn:ietf:rfc:4978,anchor-text);|COMPRESS=DEFLATE|&color(gray){not implemented};||
|&urn2url(urn:ietf:rfc:4978,anchor-text);|COMPRESS=DEFLATE|&color(red){not tested};||
 
|&urn2url(urn:ietf:rfc:5032,anchor-text);|WITHIN|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:5032,anchor-text);|WITHIN|&color(green){implemented};||
 
|&urn2url(urn:ietf:rfc:5092,anchor-text);|-|&color(orange){partially implemented};|URLAUTHは未実装です。 URLにUIDVALIDITYが指定されていてもUIDの検証は行いません。 [独自拡張]URLのスキームがimapsの場合、デフォルトポートとして993を使用し、SSLによる接続を試みます。|
|&urn2url(urn:ietf:rfc:5092,anchor-text);|-|&color(orange){partially implemented};|URLAUTHは未実装です。 URLにUIDVALIDITYが指定されていてもUIDの検証は行いません。 [独自拡張]URLのスキームがimapsの場合、デフォルトポートとして993を使用し、SSLによる接続を試みます。|
 
|&urn2url(urn:ietf:rfc:5161,anchor-text);|ENABLE|&color(green){implemented};||
|&urn2url(urn:ietf:rfc:5161,anchor-text);|ENABLE|&color(green){implemented};||
144,7 144,7
 
|EXAMINE with CONDSTORE parameter|&urn2url(urn:ietf:rfc:4551,#3.7,short);|&color(green){implemented};||
|EXAMINE with CONDSTORE parameter|&urn2url(urn:ietf:rfc:4551,#3.7,short);|&color(green){implemented};||
 
|SEARCH with RETURN result specifier|&urn2url(urn:ietf:rfc:4731,#3.1,short); &urn2url(urn:ietf:rfc:5182,#2.1,short); &urn2url(urn:ietf:id:ietf-morg-inthread-00,#3.5,short);|&color(green){implemented};||
|SEARCH with RETURN result specifier|&urn2url(urn:ietf:rfc:4731,#3.1,short); &urn2url(urn:ietf:rfc:5182,#2.1,short); &urn2url(urn:ietf:id:ietf-morg-inthread-00,#3.5,short);|&color(green){implemented};||
 
|SORT with RETURN result specifier|&urn2url(urn:ietf:rfc:4731,#3.1,short); &urn2url(urn:ietf:rfc:5182,#2.1,short); &urn2url(urn:ietf:id:ietf-morg-inthread-00,#3.5,short);|&color(green){implemented};||
|SORT with RETURN result specifier|&urn2url(urn:ietf:rfc:4731,#3.1,short); &urn2url(urn:ietf:rfc:5182,#2.1,short); &urn2url(urn:ietf:id:ietf-morg-inthread-00,#3.5,short);|&color(green){implemented};||
~
|COMPRESS|&urn2url(urn:ietf:rfc:4978,#3,short);|&color(gray){not implemented};||
|COMPRESS|&urn2url(urn:ietf:rfc:4978,#3,short);|&color(red){not tested};||
 
|ENABLE|&urn2url(urn:ietf:rfc:5161,#3.1,short);|&color(green){implemented};||
|ENABLE|&urn2url(urn:ietf:rfc:5161,#3.1,short);|&color(green){implemented};||
 
|LANGUAGE|&urn2url(urn:ietf:rfc:5255,#3.2,short);|&color(gray){not implemented};||
|LANGUAGE|&urn2url(urn:ietf:rfc:5255,#3.2,short);|&color(gray){not implemented};||
 
|COMPARATOR|&urn2url(urn:ietf:rfc:5255,#4.7,short);|&color(gray){not implemented};||
|COMPARATOR|&urn2url(urn:ietf:rfc:5255,#4.7,short);|&color(gray){not implemented};||

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

current previous
15,99 15,70
 
#googleadunit
#googleadunit
 
0.14以降はMIT X11ライセンスでのリリースとなります。 0.14より前のバージョンについては特に使用条件を定めていません。
0.14以降はMIT X11ライセンスでのリリースとなります。 0.14より前のバージョンについては特に使用条件を定めていません。
 

        

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

          
+
*不具合・要望・質問等
+
不具合・要望・使い方の質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*サンプル
*サンプル
 
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
 
#code(cs){{
#code(cs){{
 
using System;
using System;
-
using System.IO;
 
using Smdn.Formats.Mime;
using Smdn.Formats.Mime;
 

        

        
 
public class ReadMail {
public class ReadMail {
 
  public static void Main(string[] args) {
  public static void Main(string[] args) {
~
    var message = MimeMessage.Load("/home/smdn/Desktop/sample.eml");
    using {
~

          
      var message = MimeMessage.Create(reader);
~
    Dump(message, 0);
      Dump(message);
-
    }
 
  }
  }
 

        

        
~
  private static void Dump(MimeMessage message, int nest)
  private static void Dump(MimeMessage message)
 
  {
  {
~
    var indent = new string(' ', nest * 4);
    DumpHeaders(message);
+

          
+
    DumpHeaders(message, indent);
+

          
+
    Console.Write(indent);
 

        

        
~
    if
    Console.WriteLine(message.Body);
+
      Console.WriteLine(message.ReadContentAsText());
+
    else
+
      Console.WriteLine(message.MimeType);
 

        

        
 
    foreach {
    foreach {
~
      Console.WriteLine();
      Dump(part);
+

          
+
      Dump(part, nest + 1);
 
    }
    }
 
  }
  }
 

        

        
~
  private static void DumpHeaders(MimeMessage message, string indent)
  private static void DumpHeaders(MimeMessage message)
 
  {
  {
 
    foreach {
    foreach {
~
      Console.WriteLine("{0}{1}: {2}", indent, header.Name, header.Value);
      Console.Write("{0}: ", header.Key);
-
      foreach {
-
        Console.WriteLine(val);
-
      }
 
    }
    }
 
  }
  }
 
}
}
 
}}
}}
 

        

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

        

        
 
*変更履歴
*変更履歴
~

          
**0.1x
~
**0.15
:0.14|ライセンスをMIT X11に変更
~
-機能追加
拡張子およびファイル内容からのMIMEタイプの判定処理を追加
~
--添付ファイル・代替メッセージの作成機能、メッセージのエンコード・フォーマット機能を追加(ただしインターフェイスは未確定)
Content-Transfer-Encodingヘッダの値が;で終端する場合にデコードできない不具合を修正
~
-修正・改善
:0.13|コメントを含む場合等にMIME-Versionヘッダの値を正しく認識できない不具合を修正
~
--エンコーディングにutf8, shift-jisなど正式な名称とは異なる値が指定されている場合に解析に失敗する不具合を修正
改行・空白を含まずに連続するencoded-wordsを正しくデコードできない不具合を修正
~
--インターフェイスを修正
ヘッダを含まないmultipartメッセージ等で解析に失敗する不具合を修正
~
-その他
:0.12|元のメッセージの改行文字を保持するように修正
~
--アセンブリ構成を変更
Q-Encodeされた文字列を正しくデコードしない不具合を修正
~

          
Q-EncodeおよびB-Encodeされた文字列を正しく認識できない場合がある不具合を修正
~
**0.14
メッセージの解析時に入力ストリームの8ビット目が損失する不具合を修正
~
-ライセンスをMIT X11に変更
Quoted-Printableのデコード処理の不具合を修正
~
-拡張子およびファイル内容からのMIMEタイプの判定処理を追加
:0.11|stringからインスタンスをコンストラクトできるようにした
~
-Content-Transfer-Encodingヘッダの値が;で終端する場合にデコードできない不具合を修正
:0.10|初版
+

          
+
**0.13
+
-コメントを含む場合等にMIME-Versionヘッダの値を正しく認識できない不具合を修正
+
-改行・空白を含まずに連続するencoded-wordsを正しくデコードできない不具合を修正
+
-ヘッダを含まないmultipartメッセージ等で解析に失敗する不具合を修正
+

          
+
**0.12
+
-元のメッセージの改行文字を保持するように修正
+
-Q-Encodeされた文字列を正しくデコードしない不具合を修正
+
-Q-EncodeおよびB-Encodeされた文字列を正しく認識できない場合がある不具合を修正
+
-メッセージの解析時に入力ストリームの8ビット目が損失する不具合を修正
+
-Quoted-Printableのデコード処理の不具合を修正
+

          
+
**0.11
+
-stringからインスタンスをコンストラクトできるようにした
+

          
+
**0.10
+
-初版
 

        

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

        

        
 
version 0.13の時点では、手元にある計9,189通のメール(スパム、メーリングリスト・メールマガジンから、携帯から、添付ファイル付きなどを含む)を解析した結果、ほぼ正常に解析できています。 ただし解析した結果が「読める」かどうかまでは検証していません。 またMono 1.9ではJISからのデコードが出来ない場合があるようです。
version 0.13の時点では、手元にある計9,189通のメール(スパム、メーリングリスト・メールマガジンから、携帯から、添付ファイル付きなどを含む)を解析した結果、ほぼ正常に解析できています。 ただし解析した結果が「読める」かどうかまでは検証していません。 またMono 1.9ではJISからのデコードが出来ない場合があるようです。
 

        

        

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

current previous
5,171 5,33
 
*機能
*機能
 
現在対応している機能の一覧です。 部分的に対応しているものも含みます。
現在対応している機能の一覧です。 部分的に対応しているものも含みます。
 
-セクションが指定されていないキー=値のペアの読み込み
-セクションが指定されていないキー=値のペアの読み込み
~
-;および#で記述されるコメント行の読み込み
-;および#で記述されるコメント行
+
-セクション名・キー名の前後に空白が含まれている形式の読み込み
+
-セクション名・キー名の比較に任意のIEqualityComparer<string>を指定可能
+
-任意のConverter<string, TOutput>を指定することで任意の型に変換した上でキーの値を取得可能
+
-非Windows環境でも使用可(GetPrivateProfile*系のWin32 APIは使用していません)
 

        

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

        

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

          
+
*不具合・要望・質問等
+
不具合・要望・使い方の質問は[[掲示板>misc/forum/libs]]へどうぞ。
 

        

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

          
+
**読み込み
+
Sambaの設定ファイルと同様の形式のテキストを読み込み、値を表示する例。
+
#code(cs){{
+
using System;
+
using System.IO;
+

          
+
using Smdn.Formats.Ini;
+

          
+
class IniSample {
+
  public static void Main(string[] args)
+
  {
+
    var ini = @"
+
[global]
+
# Change this to the workgroup/NT-domain name your Samba server will part of
+
   workgroup = WORKGROUP
+

          
+
# This will prevent nmbd to search for NetBIOS names through DNS.
+
   dns proxy = no
+

          
+
# The specific set of interfaces / networks to bind to
+
# This can be either the interface name or an IP address/netmask;
+
# interface names are normally preferred
+
;   interfaces = 127.0.0.0/8 eth0
+

          
+
[printers]
+
   comment = All Printers
+
   browseable = no
+
   path = /var/spool/samba
+
   printable = yes
+
   guest ok = no
+
   read only = yes
+
   create mask = 0700
+
";
+

          
+
    var config = IniDocument.Load(new StringReader(ini));
+

          
+
    Console.WriteLine("[global]");
+
    // キーの値をstringで取得
+
    Console.WriteLine("workgroup: {0}", config["global"]["workgroup"]);
+
    // yesならtrue、それ以外はfalseとして値を取得
+
    Console.WriteLine("dns proxy: {0}", config["global"].Get("dns proxy",;
+
    // キーが存在しない場合のデフォルトを指定して取得
+
    Console.WriteLine("interfaces: {0}", config["global"].Get("interfaces", "(default interface)"));
+
    // 同じくデフォルトを指定してbool型の値として取得
+
    Console.WriteLine("wins support: {0}", config["global"].Get("wins support", false,;
+

          
+
    // 条件にマッチするセクションを取得(config["printers"]と同じ)
+
    var printers = config.Find((section) => section.Name == "printers");
+

          
+
    Console.WriteLine("[printers]");
+

          
+
    // デフォルトでは大文字小文字を無視してキー名を比較する
+
    //
+
    Console.WriteLine("read only: {0}", printers.Get("READ Only",;
+
    Console.WriteLine("guest ok: {0}", printers.Get("guest ok",;
+
    Console.WriteLine("path: {0}", printers.Get("path",;
+
    Console.WriteLine("create mask: 0b{0}", Convert.ToString(printers.Get("create mask",;
+
  }
+
}
+
}}
+

          
+
#prompt(実行結果){{
+
[global]
+
workgroup: WORKGROUP
+
dns proxy: False
+
interfaces:
+
wins support: False
+
[printers]
+
read only: True
+
guest ok: False
+
path: /var/spool/samba
+
create mask: 0b111000000
+
}}
+

          
+
**書き込み
+
desktop.iniを作成、ファイルとコンソールに出力する例。
+
#code(cs){{
+
using System;
+

          
+
using Smdn.Formats.Ini;
+

          
+
class IniSample {
+
  public static void Main(string[] args)
+
  {
+
    var desktopIni = new IniDocument();
+

          
+
    // .ShellClassInfoセクションを作成・取得
+
    var shellClassInfo = desktopIni[".ShellClassInfo"];
+

          
+
    // それぞれのキーと値を設定
+
    shellClassInfo["InfoTip"] = "hoge";
+
    shellClassInfo["IconFile"] = @"%SystemRoot%\system32\mydocs.dll";
+
    shellClassInfo["IconIndex"] = "-101";
+

          
+
    desktopIni.Save(@"D:\test\desktop.ini");
+
    desktopIni.Save(Console.Out);
+
  }
+
}
+
}}
+

          
+
#prompt(コンソールおよびD:\test\desktop.iniの出力結果){{
+

          
+
[.ShellClassInfo]
+
InfoTip=hoge
+
IconFile=%SystemRoot%\system32\mydocs.dll
+
IconIndex=-101
+

          
+
}}
 

        

        
 
*変更履歴
*変更履歴
~
**0.15
**0.1x
~
-機能追加
:0.14|ライセンスをMIT X11に変更
~
--任意の型変換用デリゲート(Converter<string, TOutput>)を指定して値を取得できるようにした
:0.13|[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
~
--セクション名・キー名の比較に任意のIEqualityComparer<string>を指定できるようにした
:0.12|[[works/tools/junk/TundereBird]]バージョンアップに伴うリリース
~
--セクションを削除できるようにした
:0.11|行頭に空白およびタブを含むセクション・エントリを読み込めるようにした
~
-修正・改善
:0.10|初版
+
--ファイルの上書き時に以前の内容が残る場合がある不具合を修正
+
--個々のセクションの間に改行を入れて保存するように修正
+
--クラス名を変更
+

          
+
**0.14
+
-ライセンスをMIT X11に変更
+

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

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

          
+
**0.11
+
-行頭に空白およびタブを含むセクション・エントリを読み込めるようにした
+

          
+
**0.10
+
-初版
 

        

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

        

        
 
*対応予定
*対応予定
 
今後対応する予定の機能です。
今後対応する予定の機能です。
 
-元のフォーマット・コメントを維持した保存機能
-元のフォーマット・コメントを維持した保存機能
~
-インデント・改行などのフォーマットを指定した保存機能
-大文字小文字を無視した読み込み機能