Smdn.Net.Imap4.Clientのリリースと変更履歴の一覧です。

§1 リリース一覧

以下のバージョンはすべてMIT X11ライセンスでのリリースとなります。

バージョン パッケージ
1.14 (2015-02-17) ソースコード
Smdn.Net.Imap4.Client-1.14.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.13 (2015-02-04) ソースコード
Smdn.Net.Imap4.Client-1.13.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.12 (2014-08-15) ソースコード
Smdn.Net.Imap4.Client-1.12.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.11 (2014-08-01) ソースコード
Smdn.Net.Imap4.Client-1.11.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.10 (2014-07-19) ソースコード
Smdn.Net.Imap4.Client-1.10.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.09 (2014-06-21) ソースコード
Smdn.Net.Imap4.Client-1.09.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.05 (2014-06-21) ソースコード
Smdn.Net.Imap4.Client-1.05.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.04 (2014-06-02) ソースコード
Smdn.Net.Imap4.Client-1.04.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.03 (2014-05-24) ソースコード
Smdn.Net.Imap4.Client-1.03.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.02 (2014-05-07) ソースコード
Smdn.Net.Imap4.Client-1.02.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.01 (2014-04-26) ソースコード
Smdn.Net.Imap4.Client-1.01.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
1.00 (2014-04-23) ソースコード
Smdn.Net.Imap4.Client-1.00.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5
0.91 (2014-03-16) ソースコード
Smdn.Net.Imap4.Client-0.91.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.90 (2013-07-17) ソースコード
Smdn.Net.Imap4.Client-0.90.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.85 (2013-02-07) ソースコード
Smdn.Net.Imap4.Client-0.85.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.84 (2012-10-08) ソースコード
Smdn.Net.Imap4.Client-0.84.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.83 (2012-10-01) ソースコード
Smdn.Net.Imap4.Client-0.83.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.82 (2012-09-24) ソースコード
Smdn.Net.Imap4.Client-0.82.tar.bz2
DLL
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4.5

.NET 4

.NET 3.5

.NET 2.1
0.81 (2012-09-08) ソースコード
Smdn.Net.Imap4.Client-0.81.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.80 (2011-02-18) ソースコード
Smdn.Net.Imap4.Client-0.80.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.36 (2011-02-03) ソースコード
Smdn.Net.Imap4.Client-0.36.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.35 (2011-01-08) ソースコード
Smdn.Net.Imap4.Client-0.35.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.34 (2010-12-11) ソースコード
Smdn.Net.Imap4.Client-0.34.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.33 (2010-05-15) ソースコード
Smdn.Net.Imap4.Client-0.33.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.32 (2010-04-25) ソースコード
Smdn.Net.Imap4.Client-0.32.tar.bz2
0.31 (2010-04-18) ソースコード
Smdn.Net.Imap4.Client-0.31.tar.bz2
0.30 (2010-04-04) ソースコード
Smdn.Net.Imap4.Client-0.30.tar.bz2
0.29 (2010-03-22) ソースコード
Smdn.Net.Imap4.Client-0.29.tar.bz2
0.28 (2010-03-15) ソースコード
Smdn.Net.Imap4.Client-0.28.tar.bz2
0.27 (2010-02-28) ソースコード
Smdn.Net.Imap4.Client-0.27.tar.bz2
0.26 (2010-02-22) ソースコード
Smdn.Net.Imap4.Client-0.26.tar.bz2
0.25 (2010-02-15) ソースコード
Smdn.Net.Imap4.Client-0.25.tar.bz2
0.24 (2010-02-06) ソースコード
Smdn.Net.Imap4.Client-0.24.tar.bz2
0.23 (2010-01-30) ソースコード
Smdn.Net.Imap4.Client-0.23.tar.bz2
0.22 (2010-01-23) ソースコード
Smdn.Net.Imap4.Client-0.22.tar.bz2
0.21 (2009-12-16) ソースコード
Smdn.Net.Imap4.Client-0.21.tar.bz2
バージョン パッケージ

以下0.20より前のバージョンについては特に使用条件を定めていません。

バージョン パッケージ
0.20 (2009-06-13)
Smdn.Protocols.Imap4-0.20.tar.bz2
0.13 (2008-04-27) TundereBirdに含まれているものを使ってください
0.12 (2008-04-07) TundereBirdに含まれているものを使ってください
0.11 (2008-03-10) TundereBirdに含まれているものを使ってください
0.10 (2008-03-06) TundereBirdに含まれているものを使ってください
バージョン パッケージ

§1.1 単一アセンブリ版

試用や配布がしやすいようにすべてのファイルを一つのアセンブリにまとめてビルドしたものです。 Smdn.Net.Pop3.ClientSmdn.Formats.Mimeと組み合わせて使用する場合は、型名が衝突するため通常版を使用してください。 詳しくはドキュメントのアセンブリ構成に関する解説を参照してください。

§1.2 ビルド設定等

コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。

§1.3 Smdn.Net.Imap4.WebClients

0.36までのバージョンでは、Smdn.Net.Imap4.ClientのパッケージにSmdn.Net.Imap4.WebClientsのソースコードを同梱しています。 0.20を除き、すべてMIT X11ライセンスでのリリースとなります。

0.80 (2011-02-18) ソースコード
Smdn.Net.Imap4.WebClients-0.80.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.36 (2011-02-03) ソースコード
Smdn.Net.Imap4.Client-0.36.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.35 (2011-01-08) ソースコード
Smdn.Net.Imap4.Client-0.35.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.34 (2010-12-11) ソースコード
Smdn.Net.Imap4.Client-0.34.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.33 (2010-05-15) ソースコード
Smdn.Net.Imap4.Client-0.33.tar.bz2
DLL
.NET 4

.NET 3.5

.NET 2.1
DLL
(単一アセンブリ版)
.NET 4

.NET 3.5

.NET 2.1
0.32 (2010-04-25) ソースコード
Smdn.Net.Imap4.Client-0.32.tar.bz2
0.31 (2010-04-18) ソースコード
Smdn.Net.Imap4.Client-0.31.tar.bz2
0.30 (2010-04-04) ソースコード
Smdn.Net.Imap4.Client-0.30.tar.bz2
0.29 (2010-03-22) ソースコード
Smdn.Net.Imap4.Client-0.29.tar.bz2
0.28 (2010-03-15) ソースコード
Smdn.Net.Imap4.Client-0.28.tar.bz2
0.27 (2010-02-28) ソースコード
Smdn.Net.Imap4.Client-0.27.tar.bz2
0.26 (2010-02-22) ソースコード
Smdn.Net.Imap4.Client-0.26.tar.bz2
0.25 (2010-02-15) ソースコード
Smdn.Net.Imap4.Client-0.25.tar.bz2
0.24 (2010-02-06) ソースコード
Smdn.Net.Imap4.Client-0.24.tar.bz2
0.23 (2010-01-30) ソースコード
Smdn.Net.Imap4.Client-0.23.tar.bz2
0.22 (2010-01-23) ソースコード
Smdn.Net.Imap4.Client-0.22.tar.bz2
0.21 (2009-12-16) ソースコード
Smdn.Net.Imap4.Client-0.21.tar.bz2
0.20 (2009-06-13) ソースコード
Smdn.Protocols.Imap4-0.20.tar.bz2

§2 変更履歴

§2.1 1.14 (2015-02-17)

  • 修正・改善
    • NAMESPACEレスポンスの階層区切り文字がNILだった場合にレスポンス解析エラーとなる不具合を修正
    • Yahoo!メールIMAPサーバーがRFCに反するSEARCHレスポンスを返送してくる問題に対するワークアラウンドを適用
    • v1.11にてobsoleteにしたメンバの実装を削除し、メンバを呼び出そうとする場合はコンパイルエラーとするようにした

§2.2 1.13 (2015-02-04)

  • 修正・改善
    • Yahoo!メールなどINBOXの名称が大文字小文字混在となるサーバーでSTATUSコマンドによるINBOXのステータスが取得出来ない不具合を修正

§2.3 1.12 (2014-08-15)

主に軽微な機能追加と動作変更。

  • 機能追加
    • ImapEnvelope.GetDecodedDate()を追加、DateTimeOffsetにデコードしたdateを取得できるようにした
    • ImapClient
      • ImapMessageFetchBodyOptions.OmitHeaderを追加、ImapMessageInfoクラスおよびImapMessageInfo.MessagePartプロパティでメッセージ本文の取得時にヘッダを除いたボディ部分のみを取得できるようにした
      • ImapMessagePartInfo.OpenText[Async], ReadAllLines[Async], ReadAllText[Async]などのメソッドにEncodingSelectionCallbackを指定できるオーバーロードを追加、BODYSTRUCTUREの文字セットが不正・非対応の場合・取得できなかった場合のフォールバックを指定できるようにした
      • ImapMessagePartInfo.GetHeader[Async](), GetRawHeader[Async]()を追加
      • ImapMessagePartInfo.ContentTypeCharsetを追加
      • ImapMessagePartInfo.IsEncapsulatedMessagePartを追加
      • ImapMessagePartInfo.NestLevelを追加
      • ImapOpenedMailboxInfo.GetMessageFirstUnseen[Async]()を追加
      • ImapClient.Connect()にCancellationTokenを指定できるバージョンを追加
  • 修正・改善
    • コマンド送信が完了した時点で、コマンド内容のバッファを削除するようにした
    • SASL認証の進行中にCancellationTokenによる中断要求があった場合は認証処理を中断するようにした
    • ImapEnvelope.GetDecodedSubject()について、subjectが空の文字列の場合はnullを返すように動作を変更
    • ImapClient
      • ImapMessageInfoクラスのメソッドでImapMessageFetchBodyOptions.DecodeContentを指定した場合はNotSupportedExceptionをスローするように動作を変更
      • ImapPartialMessageInfoクラスのメソッドでImapPartialRangeとImapMessageFetchBodyOptions.DecodeContentを同時に指定した場合はNotSupportedExceptionをスローするように動作を変更
      • ImapMessageInfo.EnvelopeDateについて、空白や改行・コメントを含む日時の場合でも正しいデコード結果を返すように改善
      • ImapMessageInfo.EnvelopeDateおよびEnvelopeSubjectについて、値をキャッシュせず呼び出しの都度デコードを行い、結果を返すようにした
      • ImapMessageInfo.OpenRead(), Save(), WriteTo()などのメソッドのオーバーロードのうち、string sectionを引数にとるバージョンを廃止、使用している場合はエラーとするようにした
      • ImapMessageInfo.OpenRead(), OpenText()で開いたStream/StreamReaderについて、Flushメソッドを呼び出してもNotSupportedExceptionをスローしないように修正

§2.4 1.11 (2014-08-01)

主にImapMessagePartInfoクラスの追加とIImapBodyStructureを使用するメンバの廃止。

  • 機能追加
    • IImapBodyStructure.HasEncapsulatedMessageを追加
    • ImapClient
      • メッセージの構造(BODYSTRUCTURE)およびメッセージパート情報を扱うクラスImapMessagePartInfoを追加
      • ImapMessageInfo.HasEncapsulatedMessageを追加
      • ImapMessageInfo.MessagePartを追加、メッセージの構造とメッセージパート情報をImapMessagePartInfoクラスで扱えるようにした
      • ImapMessageInfo.GetMessagePart(), FindMessagePart(), FindAllMessageParts()を追加、メッセージ内のメッセージパート情報をImapMessagePartInfoクラスで取得できるようにした
  • 修正・改善
    • ImapClient
      • 以下のメンバをobsoleteにした(動作に変更なし、今バージョンでは警告のみで引き続き使用可能、今後のバージョンでエラー化、後に削除予定)
        • ImapMessageInfo.BodyStructure
        • ImapMessageInfo.OpenRead, Save, WriteToなどのメソッドのオーバーロードのうち、string sectionおよびIImapBodyStructure sectionを引数にとるバージョン

§2.5 1.10 (2014-07-19)

主に非同期操作用のメソッドの追加。

  • 機能追加
    • ImapClient
      • (.NET 4.0以上のみ) ImapClient, ImapMailboxInfo, ImapMessageInfo, ImapMassageInfoList, ImapOpenedMailboxInfoの各クラスに非同期操作用のメソッドを追加
  • 修正・改善
    • 取得しようとするメッセージのサイズが10240の倍数の場合に不必要なコマンド送信が行われる不具合を修正
    • 以前のバージョンでobsoleteにしたメンバーを削除
    • ImapClient
      • ImapMailboxInfo.GetQuota()の戻り値について、遅延実行を行うIEnumerator<ImapQuota>を返す動作を変更し、読み取り専用のIList<ImapQuota>(.NET 4.5ではIReadOnlyList<ImapQuota>)を返すようにした

§2.6 1.09 (2014-06-21)

主に非同期操作用のメソッドを追加するための下準備。

  • 機能追加
    • ImapClient
      • ImapOpenedMailboxInfo.IsIdling, ImapClient.IsIdlingプロパティを追加、クライアントがImapOpenedMailboxInfo.Idle()メソッドなどを使ったIDLE処理中かどうかを判別できるようにした
      • ImapClient.SynchronizingObjectを追加、ImapClientに設定されたイベントハンドラを呼び出す際に指定された同期オブジェクトを使うようにした
  • 修正・改善
    • ImapClient
      • ImapMessageInfo.OpenRead()/OpenText()で取得したStream/StreamReaderをClose()しない限り、以降の操作を開始しようとした時点でInvalidOperationExceptionとなるように動作を変更
      • ImapOpenedMailboxInfo.Idle()で開始したIDLEをStopIdle()で停止した場合、Stop/StartIdle()を異なる組み合わせで呼び出した場合、Idle()を開始していない状態でStopIdle()を呼び出した場合にスローする例外の種類をImapProtocolViolationExceptionからInvalidOperationExceptionに変更
      • ImapOpenedMailboxInfo.Idle()等で開始したIDLE操作がNOOPによるフォールバックとなる場合でもIsBusyがtrueとなるように動作を改善
      • ImapClient.GetMailboxes(), ImapMailboxInfo.GetChildren()の戻り値について、遅延実行を行うIEnumerable<ImapMailboxInfo>を返す動作を変更し、読み取り専用のIList<ImapMailboxInfo>(.NET 4.5ではIReadOnlyList<ImapMailboxInfo>)を返すようにした
      • ImapMessageInfoList.GetEnumerator()の戻り値について、遅延実行を行うIEnumerator<ImapMessageInfo>を返す動作を変更し、GetEnumerator()を呼び出した時点ですべての結果を生成し、その結果を読み取るIEnumerator<ImapMessageInfo>を返すようにした
      • ImapClientの各イベントの発生タイミングを、レスポンス受信時ではなく操作終了時に変更
      • ImapClientではイベントハンドラで発生した例外を無視するようにした

§2.7 1.05 (2014-06-21)

  • 機能追加
    • ImapClient
      • ImapMessageInfoListクラスにToList(), ToArray()を追加
      • ImapOpenedMailboxInfoクラスにGetMessagesRecent(), GetMessagesUnseen(), GetMessagesNew()を追加
  • 修正・改善
    • アセンブリの製品名(AssemblyProductAttribute)およびバージョン情報(AssemblyInformationalVersionAttribute)にバージョン番号と対象フレームワークを含むパッケージ名の情報を埋め込むようにした
    • 65536回目に送信するコマンドのタグが意図しない値となっていたのを修正
    • ImapClient
      • IDLE中にメッセージ削除・メールボックスステータス変更のレスポンスを受信した場合、レスポンスを二重に処理して内部状態と実際の状態が不一致となる不具合を修正
      • ImapMessageInfo.OpenRead()などFETCHコマンドを発行するメソッドを呼び出した際において、動的属性が変更されていない場合でもMessageStatusChangedイベントが発生してしまう不具合を修正
      • 未取得のImapMessageInfoの動的属性が変更された場合にはMessageStatusChangedイベントを発生させないように動作を変更
      • ImapOpenedMailboxInfo.Idle()などIDLEを行うメソッドについて、一定間隔毎にIDLEしなおすことによりサーバー側からの自動切断を抑止するようにした
      • ImapMailboxInfo.GetMailboxes()をobsoleteにし、代わりにImapMailboxInfo.GetChildren()を追加

§2.8 1.04 (2014-06-02)

  • 機能追加
    • ImapClient
      • (.NET 4.0以降のみ) ImapClient.ConnectAsync()にCancellationTokenを指定できるバージョンを追加
  • 修正・改善
    • TraceSourceに出力する都度Flushするように修正
    • 接続を拒否されて例外をスローする場合などにおいて、接続が即座に切断されない不具合を修正
    • SaslClientMechanismを指定して接続を行う場合において、CAPABILITYが返送されてこなかった場合は追加でCAPABILITYコマンドを発行するように修正

§2.9 1.03 (2014-05-24)

  • 機能追加
    • ImapClient
      • (.NET 4.0以上のみ) ImapMessageInfoクラスにOpenReadAsync(), SaveAsync(), ReadAsAsync()など非同期バージョンのメッセージ取得メソッドを追加 (ドキュメント・サンプル §.非同期操作)
      • (.NET 4.0以上のみ) ImapMessageInfo.OpenReadにCancellationTokenおよびIProgressを指定できるバージョンを追加
      • ImapMessageInfo.Download()を追加、メッセージ本文をメモリ上にダウンロードしたStreamを取得できるようにした
  • 修正・改善
    • 適切な認証方式が見つからない場合にスローする例外をImapAuthenticationExceptionからImapNoAppropriateAuthMechanismExceptionに変更
    • ImapClient
      • ImapMessageInfo.Save(), WriteTo(Stream), WriteTo(BinaryWriter)の各メソッドについて、引数が不正な場合はコマンドを送信する前に例外をスローするように動作を変更
      • ImapMessageInfo.Save(), WriteTo(Stream), WriteTo(BinaryWriter)の各メソッドについて、可能な場合はバッファを介さず直接ストリームに書き込むように動作を変更
      • ImapMessageInfo.ReadAs()メソッドの型パラメータの名称をTOutputからTResultに変更
      • ImapMessageInfo.OpenRead(), Save()などのうちImapPartialRangeを指定するバージョンについて、取得するメッセージのサイズによってはArgumentOutOfRangeExceptionがスローされる場合がある不具合を修正
      • ImapMessageInfo.GetHeader(), GetRawHeader()メソッドでヘッダを取得する場合にRFC822.SIZEの取得を要求しないように修正

§2.10 1.02 (2014-05-07)

  • 機能追加
    • ImapClient
      • ImapOpenedMailboxInfo.GetThreadedMessages()を追加、スレッド化されたメッセージを取得できるようにした
      • ImapOpenedMailboxInfo.GetSortedMessages()にImapSearchCriteriaの指定を省略できるオーバーロードを追加、メールボックス内のすべてのメッセージをソート済みの状態で取得できるようにした
      • ImapOpenedMailboxInfo.GetMessages()にUIDのIEnumerable<long>を指定できるオーバーロードを追加
      • ImapMessageInfo.GetHeader(), GetRawHeader()にIEnumerable<string>を指定できるオーバーロードを追加
  • 修正・改善
    • 不正な形式のレスポンスを受信した際に、例外が正しくスローされない可能性があった不具合を修正
    • ImapFetchDataItemについて、CONDSTOREとBINARYの両方が必要となる場合でも、どちらか一方のみがサポートされていればImapIncapableExceptionがスローされずに処理が続行してしまう不具合を修正
    • T[]として公開していた以下のプロパティについて、.NET 4.0以前ではIsReadOnly=trueのIList<T>、.NET 4.5以降ではIReadOnlyList<T>として公開するように変更、また常に非nullの値を返すように変更
      • ImapEnvelope.From, Sender, ReplyTo, To, Cc, Bcc
      • IImapBodyStructureExtension.Languages, Extensions
      • ImapExtendedMessageRfc822BodyStructure.Languages, Extensions
      • ImapExtendedMultiPartBodyStructure.Languages, Extensions
      • ImapExtendedSinglePartBodyStructure.Languages, Extensions
      • ImapMultiPartBodyStructure.NestedStructures
      • ImapNamespace.PersonalNamespaces, OtherUsersNamespaces, SharedNamespaces
      • ImapQuta.Resources
      • ImapThreadList.Children
    • ImapClient
      • ImapOpenedMailboxInfo.GetSortedMessage()について、SORTレスポンスの順序ではなくFETCHレスポンスの順序で列挙されてしまう不具合を修正
      • ImapMessageInfo.OpenRead(), ReadAs(), Save(), GetStructureOf()およびImapBodyStructureUtils.FindSection()などのメソッドについて、セクションが文字列形式で指定された場合はその値を検証し、不正な場合はArgumentExceptionをスローするように変更
      • ImapOpenedMailboxInfo内部処理の一部を最適化

§2.11 1.01 (2014-04-26)

  • 機能追加
    • ImapEnvelope.GetDecodedSubject()を追加、デコード済みのsubjectを取得できるようにした
    • ImapAddress.GetDecodedName()を追加、デコード済みのdisplay-nameを取得できるようにした
    • ImapAddress.ToMailAddress(), ToMailAddressCollection()にオーバーロードを追加、フォールバック用Encodingを指定するためのコールバックデリゲートと、不正なフォーマットの場合に例外をスローするかどうかを指定できるようにした
    • ImapBodyStructureUtils.GetContentFileName()を追加、BODYSTRUCTUREのContent-Type nameパラメータもしくはContent-Disposition filenameパラメータからファイル名を取得し、デコードしたものを取得できるようにした
  • 修正・改善
    • ImapBodyDisposition.FilenameプロパティをFileNameに改名、動作上の変更点はなし
    • ImapClient
      • ImapClient.CopyMailbox(ImapMailboxInfo, ImapClient, string, ...)がMoveMailboxと同じ動作となっていた不具合を修正

§2.12 1.00 (2014-04-23)

  • 機能追加
    • ImapClient
      • 静的メソッドImapClient.CopyMailbox(), MoveMailbox()を追加、異なるセッション間でのメールボックスの移動・コピーが出来るようにした
      • ImapOpenedMailboxInfo.GetMessagesGmailSearch()を追加、X-GM-RAWによるGmail search syntaxを使ったメッセージの検索ができるようにした
      • ImapClient.CombineMailboxName()を追加、サーバーの階層区切り文字を取得してメールボックス名の結合を行えるようにした
      • ImapMailboxInfo.GetFullNameOf()にオーバーロードを追加、複数の階層からなるメールボックス名を結合出来るようにした
      • ImapMailboxInfo.SplitMailboxHierarchy()を追加、メールボックスの階層区切り文字を使ってメールボックス名を階層ごとに分割できるようにした
      • ImapClient.DisabledCapabilitiesプロパティを追加、サーバーが特定のIMAP拡張をサポートしていてもそれを使用しないようにできるようにした
      • ImapClient.IsBusyプロパティを追加、BeginConnect()/ConnectAsync()による非同期接続中、及びIDLE中にはtrueを返すようにした
      • ImapMailboxInfo.Refresh()にオーバーロードを追加し、メールボックスのフラグも再取得するか指定できるようにした
      • ImapSequenceSetクラスおよびImapMessageNotFoundException.SequenceOrUidSetがシリアライズできるようにした
  • 修正・改善
    • .NET Framework 2.0のサポートを廃止
    • Modified UTF-7のエンコード・デコード処理を最適化
    • ImapClient
      • ImapClient.OpenOrCreateMailbox()ではSTATUSを発行しないようにした
      • ImapMailboxInfo.GetParent()およびGetOrCreateParent()について、メールボックスが最上位の場合にはnullを返すのではなくImapProtocolViolationExceptionをスローするようにした
      • ImapOpenedMailboxInfo.GetMessages()等でサーバーがNO [BADCHARSET]を返した場合、Smdn.Formats.EncodingNotSupportedExceptionをスローするようにした
      • ImapOpenedMailboxInfo.WaitForMessageArrival()について、IDLEをサポートしていないサーバーに対してもNOOPを使って動作をエミュレートできるようにした
      • ImapMailboxInfo.GetFullNameOf(), CreateChild(), GetChild(), GetOrCreateChild()の各メソッドについて、CanHaveChildの場合にスローする例外をNotSupportedExceptionからImapProtocolViolationExceptionに変更
      • ImapClient.BeginConnect()の実装を簡略化

§2.13 0.91 (2014-03-16)

  • 修正・改善
    • 以前のバージョンでObsoleteにした型・メンバを削除
    • Windows環境でSSL接続時にIDLEを行った場合に、予期しないレスポンスを受信して正常にIDLEを継続できなくなる不具合を修正
    • ImapClient
      • ImapMessageInfoBase.ReplaceFlags(), ReplaceKeywords()をobsoleteにし、それぞれSetFlags(), SetKeywords()にリネーム

§2.14 0.90 (2013-07-15)

主に最近更新されたRFCへのキャッチアップと、利用不可能となったインスタンスの扱いに関する動作変更。

  • 機能追加
  • 修正・改善
    • draft-draft-ietf-morg-inthread-00関連の実装を削除
    • Gmail XLIST関連の実装を削除
    • IDictionary<,>として公開していたいくつかのメンバについて、.NET Framework 4.5以降においてはIReadOnlyDictionary<,>として公開するように変更
    • ファイルへの上書きを行う場合に以前の内容が残ったままとなる可能性があったのを修正
    • キャッシュされた長さ0の配列を使用するように修正
    • List<>およびDictionary<,>が確保する初期サイズが必要最低限となるように修正
    • その他内部実装のパフォーマンス改善
    • ImapClient
      • Smdn.Net.Imap4.Protocol.Client.ImapConnectionクラスのプロパティClientCertificates, ServerCertificateValidationCallback, ClientCertificateSelectionCallbackをSmdn.Net.Imap4.Client.ImapSslConnectionに移動
      • 閉じたImapOpenedMailboxInfo、移動・削除したImapMessageInfo・ImapMessageInfoListの扱いに関して、以下のように変更
        • ImapMessageVanishedExceptionを追加、ImapMessageInfoのメソッド・プロパティを呼び出した結果、他のクライアントにより該当するメッセージが削除されていること検出した場合にスローするようにした
        • ImapUnavailableExceptionを追加、既に削除・移動したメッセージや、取得元のメールボックスが既に閉じているメッセージに対して操作を行おうとした場合にスローするようにした
        • ImapMessageDeletedException・ImapMailboxClosedExceptionをObsoleteにし、状況によりImapUnavailableExceptionまたはImapMessageVanishedExceptionをスローするように変更
        • 同名のメールボックスを再度Open()してImapOpenedMailboxInfoを取得する場合、以前に開かれていたImapOpenedMailboxInfoは利用不可能となるようにした (例外ImapUnavailableExceptionをスローする)
        • 同名のメールボックスを再度Open()してImapOpenedMailboxInfoを取得する場合、以前に開かれていたImapOpenedMailboxInfoのIsOpenプロパティはfalseを返すように変更
        • ImapMailboxInfo.MoveTo()により現在開いているメールボックスを移動もしくは名前の変更をした場合、再度Openせず、該当するImapOpenedMailboxInfoは利用不可能となるようにした (例外ImapUnavailableExceptionをスローする)
      • 既に閉じられた状態でImapOpenedMailboxInfo.Close/Disposeメソッドを呼び出した場合、無関係のメールボックスが閉じられてしまう可能性があったのを修正
      • レスポンスの解析を二重に行なっていた箇所を修正
    • ImapSession
      • ESEARCHまたはESORTの送信後にキャパビリティのチェック処理が正しく動作しなくなる不具合を修正

§2.15 0.85 (2013-02-07)

  • 機能追加
    • Content-Typeがuuencodeのメールをデコード出来るようにした (ただし、本文中にuuencodeされたファイルが複数格納されている場合は、先頭のファイルのみを取得可能)

§2.16 0.84 (2012-10-08)

  • 修正・改善
    • Mono 2.6関連のワークアラウンドを削除
    • 上位ライブラリの不具合修正

§2.17 0.83 (2012-10-01)

  • 修正・改善
    • 上位ライブラリのインターフェイス変更にあわせて実装を修正

§2.18 0.82 (2012-09-24)

  • 機能追加
    • メッセージのヘッダ部分のみを取得するメソッドImapMessageInfo.GetHeader(), GetRawHeader()を追加
    • ImapClient.ConnectAsync()を追加
    • .NET 4.5用のcsprojファイルを追加

§2.19 0.81 (2012-09-08)

  • 修正・改善
    • 上位ライブラリのインターフェイス変更にあわせて実装を修正

§2.20 0.80 (2011-02-18)

主にIDLE関連の機能追加と実装の細かい修正等。

  • 機能追加
    • ImapClient
      • IDLE/NOOPを使って特定メールボックスでの待機を行うメソッドImapOpenedMailboxInfo.Idle(), StartIdle(), StopIdle()を追加
      • IDLEを使って特定メールボックスでの新着メッセージの待機を行うメソッドImapOpenedMailboxInfo.WaitForMessageArrival(), StartWaitForMessageArrival(), StopWaitForMessageArrival()を追加
  • 修正・改善
    • IDLE中にMono.Security.Protocol.Tls.TlsExceptionがスローされた場合、無視して処理を継続するように修正 (暫定処置)
    • コマンドの非同期実行開始時にヌル参照が発生する可能性があったのを修正
    • Mono 2.6.xでコマンドの非同期実行が不完全に停止する場合がある不具合に対する暫定対処を追加
    • ソケットエラーによりImapConnectionExceptionをスローする場合、例外メッセージに原因となったSocketErrorを含めるように修正
    • ImapClient
      • 既に切断された状態でImapOpenedMailboxInfo.IDisposable.Disposeを呼び出しても例外をスローしないように修正
      • コマンドを送信した結果BYEが返された場合、ImapErrorResponseExceptionではなくImapConnectionExceptionをスローするように変更
    • WebClients

§2.21 0.36 (2011-02-03)

主にメールボックス関連の機能の強化、その他実装の細かい修正等。

  • 機能追加
    • RFC 5957をサポート (差分なし)
    • 既存の実装をdraft-ietf-morg-list-specialuse-06に更新
    • ImapStringおよびいくつかの派生クラスにSerializableAttributeを設定
    • ImapMalformedDataException.CausedDataがシリアライズされるようにした
    • ImapErrorResponseException.Resultがシリアライズされるようにした
    • ImapIncapableException.RequiredCapabilitiesがシリアライズされるようにした
    • ImapClient
      • 名前にワイルドカード(%, *)を含むメールボックスの取得・作成・移動等をサポート
      • ImapClient.GetMailbox(ImapSpecialMailbox), ImapClient.OpenMailbox(ImapSpecialMailbox)を追加
      • ImapMailboxInfo.AppendMessage(ImapMessageInfo)を追加
      • サーバからのアラートを受信した場合に発生するイベントImapClient.AlertReceivedを追加
      • 以下のメソッドについて、指定された移動・コピー先のImapMailboxInfoが異なるクライアントで取得した場合や異なるサーバの場合でも正しく動作するようにした
        • ImapMessageInfoList.MoveTo/CopyTo
        • ImapMessageInfo.MoveTo/CopyTo
        • ImapOpenedMailboxInfo.MoveMessagesTo/CopyMessagesTo
  • 修正・改善
    • コマンド送信時に必要な場合のみメールボックス名をクオートするように変更
    • ImapString->stringの明示的な型変換を廃止し、代わりにValueプロパティを追加
    • ImapClient
      • メールボックス名の比較にカルチャ依存の比較を行っていた箇所があったのを修正
      • ImapClient.SendTimeout, ImapClient.ReceiveTimeoutにTimeout.Infinite(-1)を設定した場合、0ではなく-1を返すように修正
      • ImapMailboxInfo.WriteMessageをImapMailboxInfo.AppendMessageにリネーム
      • ImapMailboxInfo.GetFullNameOfに渡された引数がnullもしくは空の文字列だった場合に例外をスローするように変更
      • ImapMailboxInfo.Createについて、NO [ALREADYEXISTS]が返された場合は例外をスローしないように変更
      • ImapMailboxInfo.Deleteについて、NO [NONEXISTENT]が返された場合は例外をスローしないように変更
      • ImapMailboxInfo.AppendMessage/AppendMessagesについて、NO [TRYCREATE]が返された場合はImapMailboxNotFoundExceptionをスローするように変更
      • ImapMailboxInfo.AppendMessage/AppendMessagesについて、メールボックスが存在しない場合、もしくは選択できない場合、ImapProtocolViolationExceptionをスローするように変更
      • ImapOpenedMailboxInfo.GetMessages(ImapSearchCriteria)について、NO [NOTSAVED]が返された場合、例外をスローせず通常のSEARCHコマンドに切り替えて再送信するように変更
      • 以下のメソッドについて、指定された移動・コピー先のIsUnselectableがtrueの場合、ImapProtocolViolationExceptionをスローするように修正
        • ImapMessageInfoList.MoveTo/CopyTo
        • ImapMessageInfo.MoveTo/CopyTo
        • ImapOpenedMailboxInfo.MoveMessagesTo/CopyMessagesTo

§2.22 0.35 (2011-01-08)

主に機能追加と細かい修正等。

  • 機能追加
    • ImapClient
      • ImapOpenedMailboxInfo.CopyMessagesTo(), ImapOpenedMailboxInfo.MoveMessagesTo()を追加
      • ImapClient.OpenOrCreateMailbox()を追加
      • ImapClientProfileにISerializableを実装
  • 修正・改善
    • ImapCapabilityList等のクラスについて、ISetインターフェイス(.NET 2.0, 3.5ではISet相当のインターフェイス)を実装し、クラス名をImapCapabilitySet等に変更
    • 接続時のタイムアウトが有効になっていなかったのを修正
    • シンボルTRACEを無効にするとビルドエラーとなる箇所があったのを修正
    • その他内部実装の細かい修正と若干のパフォーマンス改善
    • ImapClient
      • ImapClient.OpenMailbox()で異なるクライアントで取得したImapMailboxInfoを開こうとした場合、ArgumentExceptionをスローするように修正
      • ImapMailboxInfo.MoveTo()、ImapMessageBase.CopyTo/MoveTo()に指定された移動・コピー先が異なるクライアントで取得したImapMailboxInfoだった場合、NotImplementedExceptionをスローするように修正 (今後のバージョンで実装予定)
      • ImapMessageInfoBase.MoveTo()の移動先が移動元と同じメールボックスだった場合、何もしないように修正

§2.23 0.34 (2010-12-11)

主にバグ修正。

  • 機能追加
    • ImapClient
      • ImapMessageInfo.ReadAs(Func)を追加 (Func<Stream, T, TResult>からFunc<Stream, T1, T2, T3, T4, TResult>までの4つ)
  • 修正・改善
    • ライブラリがスローするArgumentExceptionなどいくつかの例外メッセージをよりわかりやすい表記に統一
    • その他上位ライブラリのバグ等細かい修正
    • ImapClient
      • ImapMessageInfo.OpenRead等が返すStreamを閉じた場合、CanRead, CanWrite, CanSeek, CanTimeoutはObjectDisposedExceptionをスローせず常にfalseを返すように修正 (Streamの仕様に合わせた修正)

§2.24 0.33 (2010-05-15)

主に匿名・平文での認証に関する機能の強化、不具合と実装の細かい修正等。

  • 機能追加
    • TraceSourceへのプロトコルログの出力時に、フォーマット済みのstringではなく構造化された型(Smdn.Net.MessageAccessProtocols.Diagnostics)を使用するように修正
    • ImapConnection.TraceSourceプロパティを公開
    • ImapClient
      • セッションがSSL/TLSで保護されているかどうかを取得するImapClient.IsSecureSessionプロパティを追加
      • SSL/TLSで保護されていない接続で認証方式を自動的に選択する場合、平文による認証を許可するかどうかを設定するImapClientProfile.AllowInsecureLoginプロパティを追加 (デフォルトはfalse)
      • ImapAuthenticationExceptionを追加、認証に失敗した場合および適切な認証方式が見つからない場合にスローするようにした
    • WebClients
      • SSL/TLSで保護されていない接続で認証方式を自動的に選択する場合、平文による認証を許可するかどうかを設定するImapWebRequest.AllowInsecureLoginプロパティを追加 (デフォルトはfalse)
  • 修正・改善
    • 接続時のエラー原因をより把握しやすいように例外処理を修正、InnerExceptionを設定するようにした
    • ImapSecureConnectionExceptionをSmdn.Net.Imap4.Protocol名前空間に移動
    • URLのuserinfo部分にエスケープされていない':'が含まれている場合、':'以前の部分のみをユーザ名・認証方式として扱うように修正
    • ImapUriBuilder.Portに0を指定した場合、ToString()が返すURLにポート番号が含まれない不具合を修正
    • ImapStringからstringへの明示的な型変換で、nullからの変換でもArgumentNullExceptionをスローしないように修正
    • SocketExceptionがキャッチされず一般的な例外としてスローしてしまう場合があったのを修正
    • ImapClient
      • 既に接続済み、未接続、切断済みの状況で操作をしようとした場合にスローする例外をImapProtocolViolationExceptionからInvalidOperationExceptionに変更
      • ImapClientProfile.UsingSaslMechanismsに"ANONYMOUS"が含まれていてもANONYMOUS認証は試行せずに無視するように修正
      • ImapClientProfile.AnonymousCredentialを廃止、常にImapClientProfile.UserNameの値(指定されていない場合は'anonymous@')を使うように変更
      • ImapClientProfile.UsingSaslMechanismsにnullを設定した状態でClone()を呼ぶとNullReferenceExceptionがスローされる不具合を修正
      • ImapClient.BeginConnect()/EndConnect()
        • BeginConnect()が返す値をSystem.Runtime.Remoting.Messaging.AsyncResultからImapClient.ConnectAsyncResultに変更
        • BeginConnect()による接続が完了していても、EndConnect()を呼び出すまではIsConnectedをtrueにしないように修正
        • EndConnect()を呼び出す前にLogout(), Disconnect()を呼び出した場合、InvalidOperationExceptionをスローするように修正
        • EndConnect()を呼び出す前にImapClient.IDisposable.Dispose()を呼び出した場合、セッションが確立してもバックグラウンドで破棄し、EndConnect()が呼ばれてもIsConnectedをfalseのままとするように修正
        • 既に接続済みの場合、BeginConnect()を呼び出した時点でInvalidOperationExceptionをスローするように修正
    • WebClients
      • ImapWebRequest.UsingSaslMechanismsに"ANONYMOUS"が含まれていてもANONYMOUS認証は試行せずに無視するように修正
      • ImapWebRequestDefaults.AnonymousTokenを廃止、常にリクエストURIのユーザ名(指定されていない場合は'anonymous@')を使うように変更

§2.25 0.32 (2010-04-25)

.NET Frameworkの各バージョン向けビルドのサポート、不具合と実装の細かい修正等。

  • 機能追加
    • .NET Framework 2.0, 3.5, 4の各バージョン用のプロジェクトファイルを追加 (ただし2.x系は2.1以上にのみ対応)
    • ImapClient
      • ImapClientProfileにICloneableを実装
      • ImapClient.BeginConnect()/EndConnect()を追加
      • ImapMessageInfo.WriteTo(BinaryWriter)を追加
  • 修正・改善
    • ImapTransactionResultをSmdn.Net.Imap4.Protocol.Client.ImapCommandResultに移動・改名
    • internal classをsealedにした
    • コマンド送受信関連の内部処理を簡略化
    • ImapClient
      • 既に接続されている状態でImapClient.Connect()を呼ぶと新たにセッションが作成されてしまう不具合を修正、接続中の場合はImapProtocolViolationExceptionをスローするようにした
      • ImapMessageInfo.InternalDateをNullable<DateTimeOffset>からDateTimeOffsetに変更

§2.26 0.31 (2010-04-18)

主に若干のパフォーマンス改善、実装の細かい修正等。

  • 機能追加
    • ImapClient
      • ImapMessageInfo.WriteTo(Stream)を追加
      • コンストラクタでもSSL/TLSを用いた接続を使用するかどうか、およびタイムアウト時間を指定できるようにした
  • 修正・改善
    • 上位ライブラリのインターフェイス変更にあわせて実装を修正
    • StringComparerの指定があいまいだった部分で明示的に指定するようにした
    • ImapSession.ServerIDのComparerをStringComparer.OrdinalIgnoreCaseに変更
    • 例外を再スローしている箇所でスタックトレースを破棄しないように修正
    • 例外クラスのインターフェイスをカスタム例外のガイドラインに適合するように改善 (一部未完)
    • いくつかの冗長な内部処理をデバッグ時のみ有効になるように修正
    • .NET Framework 2.0 SP2以前などの環境でMissingMethodExceptionがスローされないようにメソッド呼び出しを修正
    • ImapClient
      • コンストラクタのauthTypeに指定した値が無視されていたのを修正
      • ImapMessageInfo.Save()がArgumentExceptionをスローする場合、空のファイルが作成されないようにした
      • 動的属性を取得していない状態でImapMessageInfo.ToggleFlags(), ToggleKeywords()を呼び出そうとするとNullReferenceExceptionがスローされる不具合を修正
    • WebClients
      • ImapWebRequestDefaults.ClientIDのComparerをStringComparer.OrdinalIgnoreCaseに変更
      • ImapWebResponse.ServerIDをIDictionaryに変更、常にread-onlyな同一インスタンスを返すようにした

§2.27 0.30 (2010-04-04)

主にImapClientの機能強化・テストケースの追加と細かい修正等。

  • 機能追加
    • IImapBodyStructure.Parentプロパティを追加
    • 例外クラスにSerializableAttributeを設定 (実装は不完全)
    • ImapClient
      • ImapClientにイベントExistMessageCountChanged, RecentMessageCountChanged, MessageDeleted, MessageStatusChangedを追加
      • ImapMessageInfoにプロパティMediaType, IsMultiPart, IsDeleted, IsAnswered, IsDraft, IsFlaggedを追加
      • ImapMessageInfo.GetStructureOf()を追加
      • 1つ以上のUIDを指定できるバージョンのImapOpenedMailboxInfo.GetMessages()を追加
      • EXPUNGEコマンド等の発行、もしくは他のクライアントによりメッセージが削除された場合、該当するメッセージのImapMessageInfo.Sequenceを減算するようにし、IsDeletedがtrueとなるようにした
      • STOREコマンド等の発行、もしくは他のクライアントによりメッセージの属性が変更された場合、該当するメッセージのImapMessageInfo.Flags等の値を更新するようにした
  • 修正・改善
    • ImapErrorResponseExceptionをSmdn.Net.Imap4名前空間に移動
    • ImapFormatExceptionをSmdn.Net.Imap4.Protocol名前空間に移動、基底クラスをSystem.FormatExceptionに変更
    • ImapDefaultPortクラスをImapDefaultPortsに改名
    • ソケットエラー等の場合、ImapExceptionではなくImapConnectionExceptionをスローするように変更
    • ArgumentOutOfRangeExceptionをスローする際に、ActualValueプロパティを設定するようにした
    • ArgumentExceptionのMessageとParamNameが逆になっていた箇所を修正
    • 拡張の必要がないクラスをsealedに変更
    • ImapClient
      • メールボックスを選択する際にNOMODSEQが提示された場合、MODSEQを取得しないように修正
      • メールボックスが閉じられるまでの間、ImapOpenedMailboxInfoからは同一UIDのメッセージに対して同一のインスタンスを返すようにした
      • ImapClient.NoOp()を廃止、代わりにImapClient.Refresh()を追加
      • ImapMessageInfo.Open*(), Read*()に渡すIImapBodyStructureが異なるImapMessageInfoのものだった場合、ArgumentExceptionをスローするようにした
      • ImapMessageInfo.ReadLines(), ImapMessageInfo.ReadAllLines()が常に例外をスローする不具合を修正
      • ImapMessageInfo.Refresh()では動的属性のみを更新するように動作を変更
      • ImapMessageInfo.OpenRead(ImapMessageFetchBodyOptions)が常にBODYSTRUCTUREを取得し不要なデコードを行ってしまう不具合を修正
      • ImapMessageFetchBodyOptions.Peekを削除、代わりにSetSeenを追加

§2.28 0.29 (2010-03-22)

主にImapClientの機能追加・不具合修正とSmdn.Net.Imap4.WebClientsのアセンブリ化

  • 機能追加
    • IImapBodyStructureからMediaTypeおよびPredicate<IImapBodyStructure>にマッチするセクションを取得するメソッドを追加
    • LOGIN/AUTHENTICATEを発行する際、CAPABILITYを更新するかどうか指定できるバージョンを追加
    • ImapThreadListにIEnumerable<ImapThreadList>を実装
    • ImapClient
      • ImapClient.GetOrCreateMailbox()を追加
      • ImapOpenedMailboxInfo.IsReadOnlyプロパティを追加
      • ImapMailboxInfo.Clientプロパティを公開
      • ImapMailboxInfo.IsOpen, IsInboxプロパティを追加
      • ImapMailboxInfo.GetOrCreateParent(), GetChild(), GetOrCreateChild(), WriteMessage(Action<Stream>)を追加
      • ImapMessageInfoBase.Clientプロパティを公開
      • ImapMessageInfoBase.MarkAsSeen()を追加
      • ImapMessageInfo.IsSeen, IsRecentプロパティを追加
      • ImapMessageInfo.Save()を追加
      • ImapMessageInfo.OpenText(), ReadAllBytes(), ReadAllText(), ReadLines(), ReadAllLines()を実装
      • ImapMessageInfo.OpenRead()でContent-Transfer-Encodingに基づいてデコード済みのストリームを取得するオプションを追加
    • WebClients
      • ImapThreadTreeにIEnumerable<ImapThreadTree>を実装
  • 修正・改善
    • StringComparison.Ordinal*の動作を期待していた箇所でInvariantCulture*を使用していたのを修正 (ご指摘ありがとうございました)
    • stringの操作を行っている箇所について、StringComparison.Ordinalを指定するようにした
    • 階層を持たないメールボックスのImapMailbox.LeafName, ImapMailbox.SuperiorNameが不正な値を返す不具合を修正
    • メールボックスをINBOXにRENAMEしようとした場合、ImapProtocolViolationExceptionをスローするようにした
    • \NonExistent属性の付いたメールボックスに対してSUBSCRIBEしようとした場合、ImapProtocolViolationExceptionをスローするようにした
    • 変更前と同じ名前にRENAMEしようとした場合、ArgumentExceptionをスローするようにした
    • ImapMailbox.Flags, ApplicableFlags, PermanentFlagsの各プロパティが未取得の場合、nullではなく空のインスタンスを返すようにした
    • ImapPartialRangeをstruct typeに変更
    • IMAP URL関連のパフォーマンスを若干改善
    • ImapClient
      • ImapMailboxInfo.MoveTo()でメールボックス名を変更する際、購読していない下位のメールボックスを購読状態にしてしまう不具合を修正
      • 接続時およびLOGIN/AUTHENTICATEの後、必要な場合はCAPABILITYを再取得するようにした
      • メールボックスを作成した後、メールボックスの属性を更新するようにした
      • ImapInvalidOperationExceptionおよびその派生クラスをSmdn.Net.Imap4名前空間に移動
      • 既に閉じられたメールボックスに対して操作を行おうとした場合にスローする例外をImapMailboxClosedExceptionに変更
      • ImapOpenedMailboxInfoのImapMessageInfoListを返す各メソッドについて、列挙が開始されるまでコマンドを発行しないようにした
      • ImapOpenedMailboxInfoのメソッドから返されたImapMessageInfoListが空となる場合、MoveTo(), CopyTo()を呼んでも例外をスローせずなにもしないようにした
      • ImapMailboxInfo.CanCreateChildプロパティをCanHaveChildに変更、デリミタが空の場合もfalseを返すようにした
      • ImapMailboxInfoのプロパティのうち、SELECT/EXAMINするまで値を取得できないものをImapOpenedMailboxInfoに移動
      • ImapMailboxInfo.GetQuota(string)およびGetQuotaUsage()をImapClientに移動
    • WebClients
      • 実装をアセンブリSmdn.Net.Imap4.WebClientsとして分離 (アプリケーション構成ファイルを使用している場合は、アセンブリ名の変更が必要)
      • 接続時およびLOGIN/AUTHENTICATEの後、必要な場合はCAPABILITYを再取得するようにした

0.28と0.29のパフォーマンスの比較。

テストケース テスト環境
Ubuntu 9.10 + Mono(r153937) Windows Vista + .NET Framework 3.5
4kBのメッセージを1500回ダウンロード
3回試行
[1]01.65sec -> 00.92sec
[2]01.67sec -> 00.90sec
[3]01.68src -> 00.94sec
[1]03.40sec -> 03.14sec
[2]03.38sec -> 03.10sec
[3]03.37src -> 03.09sec
  • SSL/TLS不使用
  • Ubuntuでは同一マシン上のサーバ、Windowsでは別マシン上のサーバを使用

§2.29 0.28 (2010-03-15)

主にImapClientの機能追加、AIM Mailで発覚した不具合の修正

  • 機能追加
    • 既存の実装をRFC 5819に更新
    • draft-ietf-morg-list-specialuse-01に対応
    • draft-ietf-morg-sortdisplay-03に対応
    • ImapClient
      • 該当するメールボックス・メッセージが無い場合、ImapMailboxNotFoundException, ImapMessageNotFoundExceptionをスローするようにした
      • \NoInferiorsフラグがセットされているメールボックスの下にメールボックスを作成しようとした場合、ImapProtocolViolationExceptionをスローするようにした
      • ImapOpenedMailboxInfo.GetMessages()で取得する属性を指定するオプションを指定できるバージョンを追加
      • ImapOpenedMailboxInfo.GetMessageBySequence()を追加
      • ImapOpenedMailboxInfo.GetSortedMessages()を追加
      • ImapOpenedMailboxInfo.Expunge()を追加
      • ImapClient.GetMailbox()/GetMailboxes()でメールボックスを列挙する際のオプションを指定できるバージョンを追加
      • ImapOpenedMailboxInfo.GetMessages()/GetSortedMessages()の戻り値を用いてMoveTo(), CopyTo()などの操作をできるようにした
      • サーバがCONDSTOREをサポートする場合は、STATUS発行時にHIGHESTMODSEQも取得するようにした
      • サーバがCONDSTOREをサポートする場合は、SELECT/EXAMINE発行時にCONDSTOREオプションを指定するようにした
      • 新着メッセージが来るまでメールボックスを監視するメソッドImapOpenedMailboxInfo.WaitForMessageArrival()を追加
      • 選択中のメールボックスに対してはSTATUSを送信しないようにした
      • 選択中のメールボックスに対してRENAME/DELETEしようとした場合、先にCLOSEするようにした
  • 修正・改善
    • 既にTLS/SSLでの接続が確立している状態でもSTARTTLSを発行してしまう不具合を修正
    • "(SP DIGIT)"の形式のdate-day-fixedを不正な書式とみなしていた不具合を修正
    • ImapSession.ListExtended()に非ASCII文字を含むメールボックス名を渡すと例外となる不具合を修正
    • ImapClient
      • エラーレスポンスの場合にImapExceptionをスローしていた箇所をImapErrorResponseExceptionをスローするように変更
      • InvalidOperationExceptionをスローしていた箇所をImapProtocolViolationExceptionをスローするように変更
      • ImapOpenedMailboxInfo.GetMessageByUidでSEARCHを発行しないように実装を修正

§2.30 0.27 (2010-02-28)

主に新しいクライアント実装ImapClientの追加、ImapMessageまわりのインターフェイスの整理、LIST-EXTENDEDとLIST-STATUS関連の実装の修正。

  • 機能追加
    • 新しいクライアント実装ImapClientをSmdn.Net.Imap4.Client名前空間に追加(ただしインターフェイスは未確定、実装は不完全)
    • ImapMessageまわりの実装・インターフェイスを変更、動的属性・静的属性・本文を別々のクラスで取り扱うようにした
  • 修正・改善
    • ImapMailboxFlagListの代わりにIImapMailboxFlagSetインターフェイスを公開するように変更
    • ImapMessageFlagListの代わりにIImapMessageFlagSetインターフェイスを公開するように変更
    • \NonExistentフラグがセットされている既知のメールボックスに対してRENAME/CREATEできなくなる不具合を修正
    • \NonExistentフラグがセットされている既知のメールボックスに対してSELECT/STATUSしようとした場合にImapProtocolViolationExceptionをスローするようにした
    • APPENDの引数をImapMessageからIImapAppendMessageに変更
    • STOREのoutパラメータをImapMessageからImapMessageAttributeに変更
    • body-fld-dspのbody-fld-paramがNILの場合にArgumentNullExceptionがスローされる不具合を修正
    • WebClients名前空間
      • ImapWebResponse.Messagesプロパティを廃止、代わりにImapWebResponse.MessageAttributesプロパティを追加
      • ResponseStreamからのReadの際に生じる内部バッファのコピー回数を減らした

0.26と0.27のパフォーマンスの比較。

テストケース テスト環境
Ubuntu 9.10 + Mono(r152382) Windows Vista + .NET Framework 3.5
4kBのメッセージを1500回ダウンロード
3回試行
[1]03.82sec -> 03.99sec
[2]03.70sec -> 03.91sec
[3]03.78src -> 03.76sec
[1]04.82sec -> 05.12sec
[2]04.69sec -> 04.91sec
[3]04.74src -> 05.46sec
17MBのメッセージを10回ダウンロード
3回試行
[1]33.50sec -> 31.37sec
[2]32.50sec -> 30.45sec
[3]32.62src -> 31.22sec
[1]42.58sec -> 39.39sec
[2]39.59sec -> 39.43sec
[3]40.06src -> 39.94sec

§2.31 0.26 (2010-02-22)

主にBODYSTRUCTURE関連の機能強化、下位ライブラリの実装改善、新しいクライアント実装を追加するための下準備。

  • 機能追加
    • BODYSTRUCTUREまわりの実装とインターフェイスを整理した
    • BODYSTRUCTUREを含むレスポンスからすべてのextension dataを取得できるようにした
    • すべてのIImapBodyStructureからSECTIONを取得できるようにした
    • FETCHでUIDも取得した場合に限り、すべてのIImapBodyStructureからSECTIONを含むURLを取得できるようにした
    • ImapMailboxに上位のメールボックス名、階層末尾の名前を取得するプロパティを追加
    • WebClients名前空間
      • ImapWebRequest.FetchDataItemを追加 (MethodがSEARCH/SORT/THREAD/FETCHの場合、取得する属性を指定するマクロを指定。 デフォルトはALL)
  • 修正・改善
    • ストリームのアップグレードに失敗した場合、ImapUpgradeConnectionExceptionをスローするようにした
    • SSL接続/STARTTLSに失敗した場合、ImapSecureConnectionExceptionをスローするようにした
    • IDコマンドで送信するIDをDictionary<string, string>ではなくIDictionary<string, string>で引き受けるように変更
    • ログ
      • POP/IMAPのプロトコルログを分けて収集できるように修正
      • プロトコルログのTraceSourceのnameを'IMAP'に変更
    • パフォーマンス関連
      • 下位ライブラリの実装の最適化、バッファアロケーションと動作速度を改善
    • WebClients名前空間
      • すべて小文字でなければimapsスキームとみなされない不具合を修正
      • LOGIN-REFERRAL, MAILBOX-REFERRALのサポートを削除

0.25と0.26のパフォーマンスの比較。

テストケース テスト環境
Ubuntu 9.10 + Mono(r151732) Windows Vista + .NET Framework 3.5
4kBのメッセージを1500回ダウンロード
3回試行
[1]04.50sec -> 04.47sec
[2]04.38sec -> 04.38sec
[3]04.58src -> 03.90sec
[1]05.03sec -> 04.89sec
[2]04.77sec -> 04.62sec
[3]04.98src -> 04.70sec
17MBのメッセージを10回ダウンロード
3回試行
[1]34.95sec -> 33.68sec
[2]33.87sec -> 34.79sec
[3]33.78src -> 34.62sec
[1]41.65sec -> 38.39sec
[2]39.92sec -> 39.02sec
[3]38.61src -> 38.14sec

§2.32 0.25 (2010-02-15)

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

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

0.24と0.25のパフォーマンスの比較。

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

§2.33 0.24 (2010-02-06)

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

  • 機能追加
    • ImapUriBuilderの実装を追加
    • WebClients名前空間
      • 検索クエリに非ASCII文字および同期リテラル・非同期リテラルを含むURLでのSEARCH/SORT/THREADをリクエストできるようにした (同期リテラルはリクエスト前に非同期リテラルに書き換え)
      • /;SECTION=および/;PARTIAL=を含むURLでのリクエストできるようにした
      • サーバがCOPYUIDレスポンスコードを返す場合、ImapWebResponse.ResponseUriに返されたUIDを含むURLを設定するようにした
      • ImapWebRequest.Subscriptionプロパティを追加 (trueの場合、作成・削除・リネームする際にメールボックスの購読・購読解除を同時に行う)
      • ImapWebResponse.SupportedCharsetsプロパティを追加 (BADCHASETレスポンスコードでサーバがサポートする文字コードを返してきた場合、Encoding型に変換して取得)
  • 修正・改善
    • IMAP URL関連
      • ImapStyleUriParserの実装を整理、IMAP URL Schemeに従った動作となるようにエスケープされた文字を含むURLの取扱いを修正
      • クエリのデリミタのみを含むURL(例 imap://localhost/INBOX/?)が検索クエリを含んでいないと判断される不具合を修正
      • ImapMailbox.Url, ImapMessage.Urlのメールボックス名がModified UTF7でエンコードされていたものを、UTF-8+URLエンコードでエンコードするように修正
      • ImapMailbox.Url, ImapMessage.Urlのメールボックス名を'/'で終端しないようにした
      • クエリ・UIDなどが含まれていてメールボックス名を含まないURL(例 imap://localhost/?...、imap://localhost/;uid=1)を不正なURLとして扱うようにした
      • Modified-UTF7エンコードされたメールボックス名が含まれているURLからメールボックス名を取得する場合、デコードせずModified-UTF7エンコードされたままの値を取得するようにした
      • URLのクエリに同期リテラルを含む場合、非同期リテラルに書き換えた上でSEARCHコマンドを開始するようにした
    • コマンド送受信関連
      • BADCHASETレスポンスコードに文字コードが含まれている場合、パースエラーとなる不具合を修正
      • 長さを指定せず開始オクテットのみの指定でpartial fetchできてしまう不具合を修正
      • 空のsequence-set, uid-setと結合した場合に、文字列中に不要な','が含まれる不具合を修正
      • ImapSession.EndAppendが呼ばれる前にImapSession.BeginAppendを呼んでも例外とならない場合がある不具合を修正
      • ImapSession.BeginAppendを呼び出した場合、処理が開始されるまではIAsyncResultを返さないようにした
      • saved result($)を含むImapMatchedSequenceSetのToArrayを呼んだ場合、NotSupportedExceptionをスローするようにした
      • 接続時に不正なレスポンスを受信した場合、タイムアウトまで待ち合わせず、即座にImapConnectionExceptionをスローするようにした
    • 認証処理関連
      • ImapSession.Credentialsプロパティを廃止し、ICredentialsByHostは認証系メソッドの引数で受け渡すように変更 (ICredentialsByHostのインスタンスを参照したままにしないための処置)
      • 認証時に参照するNetworkCredentialのUserNameおよびPasswordプロパティがnullだった場合の動作を整理、例外をスローせず認証をキャンセルするようにした
    • WebClients名前空間
      • ImapWebRequest.SearchCriteriaEncodingプロパティを削除 (検索クエリの文字コードはリクエストURL内で指定されているものとして処理するように実装を変更)
      • APPENDコマンドでのRequestStreamへの書き込み中に、書き込み遅延が起きていなくてもバッファーアンダーランが発生する不具合を修正
      • サーバがLITERAL+に対応していても、APPENDコマンドでは常に同期リテラルを使用するようにした
      • サーバがLITERAL+に対応していない場合で、URLのクエリ部分にリテラルを含む場合、ProtocolViolationExceptionをスローするようにした
      • FETCHコマンドでのメッセージの属性とメッセージ本文の取得を単一のコマンドで行うようにした
      • FETCHコマンドで取得するメッセージの属性を、ALLマクロ相当からFULLマクロ相当の値に変更

§2.34 0.23 (2010-01-30)

主に未サポートだった拡張の実装、メールボックス操作系コマンドの実装不備の修正。

  • 機能追加
    • SASL-IRに対応
    • COMPARATORに対応(実機での動作は未確認)
    • LANGUAGEに対応(実機での動作は未確認)
    • Gimap XLISTコマンドに対応
    • Extension to IMAP CREATE command to set special-use flagsに対応
    • draft-ietf-morg-status-in-list-01に対応
    • ImapMailbox.Url, ImapMessage.UrlにUIDVALIDTYを含めるようにした
    • コマンドを発行する際に引数のチェックを行い、ArgumentExceptionをスローするようにした(未完了につき不完全)
    • プロトコル上不正な以下の操作を行おうとした場合、ImapProtocolViolationException(SystemExceptionから派生)をスローするようにした
      • 選択済みメールボックスに対してSTATUSしようとした場合
      • \NoSelectフラグが設定されているメールボックスに対してSTATUSしようとした場合
      • \NoSelectフラグが設定されていて、下位のメールボックスを持つ既知のメールボックスをDELETEしようとした場合
      • 既知のメールボックス名にRENAMEしようとした場合
      • 既知のメールボックス名でCREATEしようとした場合
      • INBOXをCREATEしようとした場合
      • 上記以外でInvalidOperationExceptionをスローしていた箇所はImapProtocolViolationExceptionに変更
    • コマンド処理中にタイムアウト値を変更しようとした場合、InvalidOperationExceptionをスローするようにした
    • ImapSession.ServerID, ImapSession.ServerCapabilitiesに対してコレクションの変更を行おうとした場合、NotSupportedExceptionをスローするようにした
    • WebClients名前空間
      • XLISTコマンドを発行できるようにした
      • RENAMEに成功した後、変更前のメールボックスをUNSUBSCRIBEするようにした
      • RENAMEに成功した後、下位のメールボックスに対してSUBSCRIBE/UNSUBSCRIBEするようにした
      • DELETEに成功した後、削除したメールボックスをUNSUBSCRIBEするようにした
      • COPYで自動的にメールボックスを作成した後、作成したメールボックスをSUBSCRIBEするようにした
      • 単一のメッセージを表すURL形式でもCOPYできるようにした
      • サーバがサポートしない機能を使用しようとした場合、およびプロトコル上不正な操作を行おうとした場合、System.Net.ProtocolViolationExceptionをスローするようにした
  • 修正・改善
    • 受信したレスポンスをstringで保持する機能を削除
    • コマンド[LIST "" ""]を送信できない、レスポンスを受信できない不具合を修正
    • 同一メッセージのFETCHレスポンスが複数に分割して返された場合、複数のメッセージとして解釈してしまう不具合を修正
    • RLSUB/RLISTのレスポンスを正しく取得していない不具合を修正
    • ImapSession.HandlesIncapableAsExceptionがtrueの場合かつ、サーバがIMAP4rev1に対応していないかCAPABILITYコマンド未発行の場合、CAPABILITYコマンドが発行できない不具合を修正
    • RENAMEで下位のメールボックスをもつメールボックスの名前を変更した場合、内部で管理している下位のメールボックス名も変更するようにした
    • 切断状態になった時点でImapSession.SelectedMailboxをnullにするように修正
    • 選択済みメールボックスに対してRENAMEしても例外を送出しないように変更
    • 選択済みメールボックスに対してDELETEしても例外を送出しないように変更
    • ImapSession.BeginIdleメソッドでIDLEを開始した後、継続要求応答もしくはエラー応答が返されるまではIAsyncResultを返さないように変更
    • ImapSession.Idleメソッドでタイムアウト時間を指定してIDLEを開始した場合、エラー応答が返された場合は即座に結果を返すように変更
    • ImapSession.StatusChangedイベントを廃止し、ImapSession.Idleメソッドへコールバック用のデリゲートを指定できるように変更
    • ImapSession.(Begin)IdleメソッドでIDLEを開始した後TraceSourceにアイドル中であることを出力する間隔を、ImapSession.ReceiveTimeoutから30秒の固定値に変更

§2.35 0.22 (2010-01-23)

主に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プロパティを追加 (AUTH=*が指定された時に使用する認証メカニズムとその優先順位を指定)
      • ImapWebRequest.ReadWriteTimeoutプロパティを追加 (ソケットの送受信などのタイムアウト時間を指定、デフォルトは5分)
      • ImapWebRequest.FetchBlockSizeプロパティを追加 (メッセージを取得する際に一回のFETCHコマンドで取得するブロックのサイズを指定、デフォルトは10240)
      • WebClient.Download*Asyncメソッドから呼び出されても正しく動作するようにした
  • 修正・改善
    • LIST/LSUBを発行せずにRENAMEすると例外エラーとなる不具合を修正
    • ImapSession.ReceiveTimeoutを設定・取得しようとするとImapSession.SendTimeoutが設定・取得されてしまう不具合を修正
    • タイムアウト関連の実装を整理
    • タイムアウト・内部例外エラーが発生した場合、セッションを切断・破棄するように変更
    • WebClients名前空間
      • 名前空間をWebClientからWebClientsに変更
      • 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名前空間のテストケースを追加
    • 上記以外の細かい修正など

§2.36 0.21 (2009-12-16)

  • 機能追加
    • WebClient名前空間
      • ImapWebRequest.ReadOnlyプロパティを追加 (SELECTが指定されない限りEXPUNGEでメールボックスを選択する)
      • ImapWebRequest.AllowCreateMailboxプロパティを追加 (TRYCREATEレスポンスコードが返された場合、自動的にメールボックスを作成。 COPYのみで有効)
      • ImapWebRequest.ExpectedErrorResponseCodesプロパティを追加 (予期されるレスポンスコードが返された場合はWebExceptionをスローしない)
  • 修正・改善
    • DIGEST-MD5認証時にOverflowExceptionとなる不具合を修正(Windowsのみ)
    • COMPRESS=DEFLATEの実装を無効化 (呼び出した場合NotImplementedExceptionをスロー)
    • ImapUriクラスを廃止、IMAP URL関連の実装を修正
    • WebClient名前空間
      • 検索条件にマッチするメッセージが無い場合に例外エラーとなる不具合を修正
      • CREATE/RENAME後にLSUBでメールボックスの属性を更新するように改善
  • その他
    • アセンブリ名・名前空間をSmdn.Protocols.Imap4からSmdn.Net.Imap4に改名
    • アセンブリ構成を変更

§2.37 0.20 (2009-06-13)

  • 機能追加
  • 修正・改善
    • コマンド・リクエストの処理をセッションに共通スレッドからセッション毎のスレッドプールを使用するように変更
    • リクエストの処理速度を改善
  • その他
    • ライセンスをMIT X11に変更

§2.38 0.13 (2008-04-27)

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

§2.39 0.12 (2008-04-07)

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

§2.40 0.11 (2008-03-10)

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

§2.41 0.10 (2008-03-06)

  • 初版