2010-02-28T23:40:15の更新内容

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

current previous
8,10 8,6
 
-[[works/libs/Smdn.Formats.Mime]]
-[[works/libs/Smdn.Formats.Mime]]
 
-[[works/libs/Smdn.Formats.Ini]]
-[[works/libs/Smdn.Formats.Ini]]
 

        

        
+
以下の2つのサンプルアプリケーションを含んでいます。 機能はほぼ同等です。
+
:TundereBird|Smdn.Net.Imap4.WebClients名前空間およびSmdn.Net.Pop3.WebClients名前空間のクラスを使って実装したサンプル
+
:TungireBird|Smdn.Net.Imap4.Client名前空間およびSmdn.Net.Pop3.Client名前空間のクラスを使って実装したサンプル
+

          
 
*スクリーンショット
*スクリーンショット
 
//&ref(tunderebird.png);
//&ref(tunderebird.png);
 
&ref(tunderebird-win.png);
&ref(tunderebird-win.png);
21,13 17,6
 
-開発版
-開発版
 
--[[anonsvn]]よりチェックアウトできます
--[[anonsvn]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,TundereBird-0.27.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
----[[works/libs/Smdn.Net.Imap4]] 0.27
+
----[[works/libs/Smdn.Net.Pop3]] 0.27
+
----[[works/libs/Smdn.Security.Authentication.Sasl]] 0.25
+
----[[works/libs/Smdn.Formats.Mime]] 0.17
+
----[[works/libs/Smdn.Formats.Ini]] 0.16
 
--${smdncms:distfilelink,TundereBird-0.26.tar.bz2}
--${smdncms:distfilelink,TundereBird-0.26.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
----[[works/libs/Smdn.Net.Imap4]] 0.26
----[[works/libs/Smdn.Net.Imap4]] 0.26
100,18 89,13
 
----[[works/libs/Smdn.Formats.Ini]] 0.10
----[[works/libs/Smdn.Formats.Ini]] 0.10
 

        

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

        

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

        

        
 
*変更履歴
*変更履歴
+
**0.27
+
-機能追加
+
--ImapClient/PopClientを使用したサンプルTungireBirdを追加
+
--サーバ証明書の確認ダイアログを表示するかどうか設定する項目を追加
+

          
 
**0.26
**0.26
 
-機能追加
-機能追加
 
--メッセージのContent-TypeとUnique IDを表示するカラムを追加した
--メッセージのContent-TypeとUnique IDを表示するカラムを追加した

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

current previous
4,7 4,6
 

        

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

        

        
 
*変更履歴
*変更履歴
+
**0.27
+
主に新しいクライアント実装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回ダウンロード&br;3回試行|[1]03.82sec -> 03.99sec&br;[2]03.70sec -> 03.91sec&br;[3]03.78src -> 03.76sec|[1]04.82sec -> 05.12sec&br;[2]04.69sec -> 04.91sec&br;[3]04.74src -> 05.46sec|
+
|17MBのメッセージを10回ダウンロード&br;3回試行|[1]33.50sec -> 31.37sec&br;[2]32.50sec -> 30.45sec&br;[3]32.62src -> 31.22sec|[1]42.58sec -> 39.39sec&br;[2]39.59sec -> 39.43sec&br;[3]40.06src -> 39.94sec|
+

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

        

        

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

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

        

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

        

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

        

        
26,33 26,9
 
}
}
 
}}
}}
 

        

        
+
#code(cs,ImapClientクラスを使う場合){{
+
using System;
+
using System.IO;
+
using System.Net;
+

          
+
using Smdn.Net.Imap4;
+
using Smdn.Net.Imap4.Client;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    using {
+
      client.Connect("pass");
+

          
+
      using {
+
        var message = inbox.GetMessageByUid(1);
+

          
+
        File.WriteAllBytes("sample.eml", message.ReadAllBytes());
+
      }
+
    }
+
  }
+
}
+
}}
+

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

        

        
+
#code(cs,ImapClientクラスを使う場合){{
+
using System;
+
using System.IO;
+
using System.Net;
+

          
+
using Smdn.Net.Imap4;
+
using Smdn.Net.Imap4.Client;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    using {
+
      client.Connect("pass");
+

          
+
      using {
+
        using {
+
          inbox.AppendMessage(messageStream);
+
        }
+
      }
+
    }
+
  }
+
}
+
}}
+

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

        

        
115,7 67,7
 
    request.Credentials = new NetworkCredential("user", "pass");
    request.Credentials = new NetworkCredential("user", "pass");
 

        

        
 
    using {
    using {
~
      foreach {
      foreach {
 
        Console.WriteLine(message.Url);
        Console.WriteLine(message.Url);
 
      }
      }
 
    }
    }
123,45 75,14
 
}
}
 
}}
}}
 

        

        
+
#code(cs,ImapClientクラスを使う場合){{
+
using System;
+
using System.IO;
+
using System.Net;
+

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

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

          
+
    using {
+
      client.Connect("pass");
+

          
+
      using {
+
        foreach {
+
          Console.WriteLine("UID {0}: {1}", message.Uid, message.Envelope.Subject);
+
        }
+
      }
+
    }
+
  }
+
}
+
}}
+

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

        

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

        

        
 
:ImapSessionクラス|IMAPのコマンドとほぼ1対1で対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。
:ImapSessionクラス|IMAPのコマンドとほぼ1対1で対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。
~
切断する/されるまで選択済みメールボックス・メールボックス毎のフラグ・サーバの能力・名前空間等のセッションの状態を保持します。 このクラスは他の2種類のクライアント実装で使用しています。
切断する/されるまで選択済みメールボックス・メールボックス毎のフラグ・サーバの能力・名前空間等のセッションの状態を保持します。
~
:ImapClientクラス|IMAPの操作を抽象化したクラスです。 メールボックス/メッセージをSystem.IO.DirectoryInfo/FileInfoクラスに似たインターフェイスで操作できるようにしてあります。
: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コマンドをあまり意識せずに扱えます。 System.Net.WebRequest/System.Net.WebResponseを継承しているので、メッセージのダウンロード・アップロードにWebClientクラスのメソッドを使うこともできます。
 
FtpWebRequest等と同様、WebRequest.Methodプロパティで送信するコマンドを制御できます。
FtpWebRequest等と同様、WebRequest.Methodプロパティで送信するコマンドを制御できます。
 

        

        
 
以下でクライアント実装に共通する部分について解説します。 個々のクライアント実装の詳細については各項を参照してください。
以下でクライアント実装に共通する部分について解説します。 個々のクライアント実装の詳細については各項を参照してください。
268,7 189,7
 
リクエストURLがメールボックスを表す場合(imap://imap.example.net/mailboxの形式)のリクエストとレスポンスの動作は次のとおりです。
リクエストURLがメールボックスを表す場合(imap://imap.example.net/mailboxの形式)のリクエストとレスポンスの動作は次のとおりです。
 

        

        
 
|Methodプロパティ|リクエスト|解説|レスポンス|h
|Methodプロパティ|リクエスト|解説|レスポンス|h
~
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメールボックスにあるメッセージの一覧を取得します。|取得するのはメッセージの属性のみです。 メッセージ本文は取得しません。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。|取得したメッセージの一覧は、ImapWebResponse.MessageAttributesプロパティに設定されます。|
|ImapWebRequestMethods.Fetch, "FETCH"&br;(デフォルト)|FETCHコマンドを送信してメールボックスにあるメッセージの一覧を取得します。|取得するのはメッセージの属性のみです。 メッセージ本文は取得しません。 取得するメッセージ属性は、ImapWebRequest.FetchDataItemプロパティで指定します。|取得したメッセージの一覧は、ImapWebResponse.Messagesプロパティに設定されます。|
 
|ImapWebRequestMethods.Append, "APPEND"|APPENDコマンドを送信してメールボックスにメッセージをアップロードします。|アップロードするメッセージはWebRequest.GetRequestStreamメソッドが返すStreamに書き込みます。 現在の実装では、リクエスト開始時にContentLengthの値が指定されているか、GetRequestStreamメソッドが返すStreamを閉じるまでアップロードは保留されます。 メッセージはMIME形式であるべきですが、ライブラリ側ではアップロードする内容をチェックしません。|サーバがアップロードしたメッセージのUIDを返す場合は、アップロードしたメッセージのURLがWebResponse.ResponseUriに設定されます。|
|ImapWebRequestMethods.Append, "APPEND"|APPENDコマンドを送信してメールボックスにメッセージをアップロードします。|アップロードするメッセージはWebRequest.GetRequestStreamメソッドが返すStreamに書き込みます。 現在の実装では、リクエスト開始時にContentLengthの値が指定されているか、GetRequestStreamメソッドが返すStreamを閉じるまでアップロードは保留されます。 メッセージはMIME形式であるべきですが、ライブラリ側ではアップロードする内容をチェックしません。|サーバがアップロードしたメッセージのUIDを返す場合は、アップロードしたメッセージのURLがWebResponse.ResponseUriに設定されます。|
 
|ImapWebRequestMethods.Expunge, "EXPUNGE"|EXPUNGEコマンドを送信してメールボックスから\Deletedフラグの付いたメッセージを削除します。|-|-|
|ImapWebRequestMethods.Expunge, "EXPUNGE"|EXPUNGEコマンドを送信してメールボックスから\Deletedフラグの付いたメッセージを削除します。|-|-|
 
|ImapWebRequestMethods.Create, "CREATE"|CREATEコマンドを送信してURLで指定された名前でメールボックスを作成します。|ImapWebRequest.Subscriptionプロパティがtrueの場合、作成したメールボックスに対して自動的にSUBSCRIBEコマンドを送信します。|作成したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、作成したメールボックスのURLがWebResponse.ResponseUriに設定されます。|
|ImapWebRequestMethods.Create, "CREATE"|CREATEコマンドを送信してURLで指定された名前でメールボックスを作成します。|ImapWebRequest.Subscriptionプロパティがtrueの場合、作成したメールボックスに対して自動的にSUBSCRIBEコマンドを送信します。|作成したメールボックスは、ImapWebResponse.Mailboxesプロパティに設定されます。 また、作成したメールボックスのURLがWebResponse.ResponseUriに設定されます。|
286,12 207,12
 
リクエストURLがメールボックスに対する検索クエリを表す場合(imap://imap.example.net/mailbox?...の形式)のリクエストとレスポンスの動作は次のとおりです。
リクエストURLがメールボックスに対する検索クエリを表す場合(imap://imap.example.net/mailbox?...の形式)のリクエストとレスポンスの動作は次のとおりです。
 

        

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

        

        
 
***メールボックス内の特定のメッセージに対するリクエスト
***メールボックス内の特定のメッセージに対するリクエスト
537,9 458,6
 
}
}
 
}}
}}
 

        

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

          
 
*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.WebClientsの各クラスの実装を参照してください。
 

        

        

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

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

        

        
 
**クライアント実装
**クライアント実装
~
クライアント実装として以下の3つのクラスを用意しています。
クライアント実装として以下の2つのクラスを用意しています。
 
:ImapSessionクラス|IMAPコマンドと1対1に対応するメソッドを持つクライアント
:ImapSessionクラス|IMAPコマンドと1対1に対応するメソッドを持つクライアント
+
:ImapClientクラス|メールボックス/メッセージをSystem.IO.DirectoryInfo/FileInfoクラスに似たインターフェイスで操作できるようにIMAP操作を抽象化したクライアント
 
:ImapWebRequest/ImapWebResponseクラス|WebRequest/WebResponseクラスから派生し、IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)での操作に対応したクライアント
:ImapWebRequest/ImapWebResponseクラス|WebRequest/WebResponseクラスから派生し、IMAP URL(&urn2url(urn:ietf:rfc:5092,short);)での操作に対応したクライアント
 

        

        
 
**その他の主な特徴
**その他の主な特徴
39,7 38,7
 

        

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

        

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

        

        
 
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
78,7 77,6
 

        

        
 
-既知の不具合
-既知の不具合
 
--IDLEして5分程度経過すると、Mono.Security.Protocol.Tls.SslStreamBase.EndReadでMono.Security.Protocol.Tls.TlsExceptionがスローされる
--IDLEして5分程度経過すると、Mono.Security.Protocol.Tls.SslStreamBase.EndReadでMono.Security.Protocol.Tls.TlsExceptionがスローされる
+
--GMailにアップロードしたメッセージのBODYSTRUCTUREが正しくパースできない
 

        

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

        

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

        

        
 
ただし、Windows上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。
ただし、Windows上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。
 

        

        

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

current previous
4,7 4,6
 

        

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

        

        
 
*変更履歴
*変更履歴
+
**0.27
+
主に新しいクライアント実装PopClientの追加とそれに付随する変更。
+

          
+
-機能追加
+
--新しいクライアント実装PopClientをSmdn.Net.Pop3.Client名前空間に追加(ただしインターフェイスは未確定、実装は不完全)
+
--PopUriBuilderを追加
+

          
 
**0.26
**0.26
 
主にライブラリ本体と下位ライブラリの実装改善、新しいクライアント実装を追加するための下準備。
主にライブラリ本体と下位ライブラリの実装改善、新しいクライアント実装を追加するための下準備。
 

        

        

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

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

        

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

        

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

        

        
26,31 26,9
 
}
}
 
}}
}}
 

        

        
+
#code(cs,PopClientクラスを使う場合){{
+
using System;
+
using System.IO;
+
using System.Net;
+

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

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    using {
+
      client.Connect("pass");
+

          
+
      var message = client.GetMessage(1);
+

          
+
      File.WriteAllBytes("sample.eml", message.ReadAllBytes());
+
    }
+
  }
+
}
+
}}
+

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

        

        
+
#code(cs,PopClientクラスを使う場合){{
+
using System;
+
using System.Collections.Generic;
+
using System.IO;
+
using System.Net;
+
using System.Text;
+

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

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

          
+
    using {
+
      client.Connect("pass");
+

          
+
      var messages = new List<PopMessageInfo>(client.GetMessages());
+
      var recentMessage = messages[messages.Count - 1];
+

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

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

        

        
289,9 235,6
 

        

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

        

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

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

        

        

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

current previous
21,7 21,6
 
**クライアント実装
**クライアント実装
 
クライアント実装として以下の2つのクラスを用意しています。
クライアント実装として以下の2つのクラスを用意しています。
 
:PopSessionクラス|POPコマンドと1対1に対応するメソッドを持つクライアント
:PopSessionクラス|POPコマンドと1対1に対応するメソッドを持つクライアント
+
:PopClientクラス|メッセージをSystem.IO.FileInfoクラスに似たインターフェイスで操作できるようにPOP操作を抽象化したクライアント
 
:PopWebRequest/PopWebResponseクラス|WebRequest/WebResponseクラスから派生し、POP URL(&urn2url(urn:ietf:rfc:2384,short);)での操作に対応したクライアント
:PopWebRequest/PopWebResponseクラス|WebRequest/WebResponseクラスから派生し、POP URL(&urn2url(urn:ietf:rfc:2384,short);)での操作に対応したクライアント
 

        

        
 
**その他の主な特徴
**その他の主な特徴
36,7 35,7
 

        

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

        

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

        

        
 
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
デモ用アプリケーション[[works/tools/junk/TundereBird]]もあわせてご覧ください。
108,7 107,7
 

        

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

        

        
 
ただし、Windows上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。
ただし、Windows上での動作確認は不十分です。 テストはしていますが、予期しないバグがあるかもしれません。