2014-04-23T06:42:39の更新内容

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

current previous
7,19 7,6
 
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
 
|~バージョン|>|~パッケージ|h
|~バージョン|>|~パッケージ|h
+
|~[[0.36 (2014-04-23)>#changes_v0.36]]|~ソースコード|{{
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36.tar.bz2}
+
}}|
+
|~|~DLL|{{
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx4.5.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx4.0.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx3.5.zip,.NET 3.5}
+
}}|
+
|~|~DLL&br;([[単一アセンブリ版>#releases_combined]])|{{
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx4.5-combined.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx4.0-combined.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.36-netfx3.5-combined.zip,.NET 3.5}
+
}}|
 
|~[[0.35 (2013-07-15)>#changes_v0.35]]|~ソースコード|{{
|~[[0.35 (2013-07-15)>#changes_v0.35]]|~ソースコード|{{
 
${smdncms:distfilelink,../Smdn.Formats.Mime-0.35.tar.bz2}
${smdncms:distfilelink,../Smdn.Formats.Mime-0.35.tar.bz2}
 
}}|
}}|
162,12 149,6
 
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
 

        

        
 
*変更履歴 [#changes]
*変更履歴 [#changes]
+
**0.36 (2014-04-23) [#changes_v0.36]
+
-修正・改善
+
--&color(red){.NET Framework 2.0のサポートを廃止};
+
--上位ライブラリを更新
+
--その他機能上の変更はなし
+

          
 
**0.35 (2013-07-15) [#changes_v0.35]
**0.35 (2013-07-15) [#changes_v0.35]
 
-修正・改善
-修正・改善
 
--ファイルへの上書きを行う場合に以前の内容が残ったままとなる可能性があったのを修正
--ファイルへの上書きを行う場合に以前の内容が残ったままとなる可能性があったのを修正

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

current previous
8,7 8,7
 
*ダウンロード
*ダウンロード
 
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
~
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Formats.Mime-0.36.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Formats.Mime-0.35.tar.bz2}
 
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Formats.Mime/releases]]をご覧ください
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Formats.Mime/releases]]をご覧ください
 

        

        
86,7 86,6
 
-.NET Framework 4.5
-.NET Framework 4.5
 
-.NET Framework 4
-.NET Framework 4
 
-.NET Framework 3.5 SP 1
-.NET Framework 3.5 SP 1
+
-Mono 3.4.0
 
-Mono 3.0.12
-Mono 3.0.12
 
-Mono 2.11.3
-Mono 2.11.3
 
-Mono 2.10.8
-Mono 2.10.8

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

current previous
2,9 2,9
 
${smdncms:keywords,}
${smdncms:keywords,}
 
${smdncms:document_versions,codelang=cs,codelang=vb}
${smdncms:document_versions,codelang=cs,codelang=vb}
 
${pragma,parser-options,non-limited-list}
${pragma,parser-options,non-limited-list}
~
[[works/libs/Smdn.Formats.Mime]]のドキュメントとサンプルです。 ここに記載されているものは[[version 0.36>works/libs/Smdn.Formats.Mime/releases#changes_v0.36]]時点のものです。
[[works/libs/Smdn.Formats.Mime]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.33時点のもので、記載不備などがあるかもしれません。
 

        

        
~
このドキュメントは完全ではないため、ライブラリの使用方法に関する疑問やここに記載されていない事項については[[掲示板>misc/forum/libs]]へどうぞ。
ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
43,7 43,7
 
|UUDecoderクラス|uuencodeされたデータを含むストリームからファイルをデコードして抽出するクラス。|Smdn.Core.Standards.dll|
|UUDecoderクラス|uuencodeされたデータを含むストリームからファイルをデコードして抽出するクラス。|Smdn.Core.Standards.dll|
 

        

        
 

        

        
~
version 0.36時点ではSmdn.Formats.Mime.Formatting名前空間のクラスは実装・動作検証が不十分です。 また、今後のバージョンで大きな変更を行う可能性もあります。
version 0.33時点ではSmdn.Formats.Mime.Formatting名前空間のクラスは実装・動作検証が不十分です。 また、今後のバージョンで大きな変更を行う可能性もあります。
 

        

        
 

        

        
 

        

        

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

current previous
13,7 13,7
 
*ダウンロード
*ダウンロード
 
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
~
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Pop3.Client-1.20.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Pop3.Client-1.16.tar.bz2}
 
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Net.Pop3.Client/releases]]をご覧ください
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Net.Pop3.Client/releases]]をご覧ください
 

        

        
178,7 178,6
 
-.NET Framework 4.5
-.NET Framework 4.5
 
-.NET Framework 4
-.NET Framework 4
 
-.NET Framework 3.5 SP 1
-.NET Framework 3.5 SP 1
+
-Mono 3.4.0
 
-Mono 3.2.8
-Mono 3.2.8
 
-Mono 3.0.12
-Mono 3.0.12
 
-Mono 2.11.3
-Mono 2.11.3

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

current previous
2,11 2,9
 
${smdncms:keywords,}
${smdncms:keywords,}
 
${smdncms:document_versions,codelang=cs,codelang=vb}
${smdncms:document_versions,codelang=cs,codelang=vb}
 
${pragma,parser-options,non-limited-list}
${pragma,parser-options,non-limited-list}
~
[[works/libs/Smdn.Net.Pop3.Client]]のドキュメントとサンプルです。 ここに記載されているものは[[version 1.20>works/libs/Smdn.Net.Pop3.Client/releases#changes_v1.20]]時点のものです。
[[works/libs/Smdn.Net.Pop3.Client]]のドキュメントとサンプルです。 ここに記載されているものは[[version 1.15>works/libs/Smdn.Net.Pop3.Client/releases#changes_v1.15]]時点のもので、記載不備などがあるかもしれません。
 

        

        
~
サンプルコードは[[このページの最後>#samples]]にあります。
サンプルコードは[[このページの最後>#samples]]にあります。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
+

          
+
このドキュメントは完全ではないため、ライブラリの使用方法に関する疑問やここに記載されていない事項については[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
32,6 30,7
 
|Smdn.Core.Standards.dll|MIMEエンコード/デコード、URLエンコード/デコード等の標準に関するクラス群|
|Smdn.Core.Standards.dll|MIMEエンコード/デコード、URLエンコード/デコード等の標準に関するクラス群|
 
|Smdn.Net.MessageAccessProtocols.dll|[[works/libs/Smdn.Net.Pop3.Client]]および[[works/libs/Smdn.Net.Imap4.Client]]で共通して使用されるクラス群|
|Smdn.Net.MessageAccessProtocols.dll|[[works/libs/Smdn.Net.Pop3.Client]]および[[works/libs/Smdn.Net.Imap4.Client]]で共通して使用されるクラス群|
 
|Smdn.Security.Authentication.Sasl.dll|[[works/libs/Smdn.Security.Authentication.Sasl]](SASLクライアントの実装)|
|Smdn.Security.Authentication.Sasl.dll|[[works/libs/Smdn.Security.Authentication.Sasl]](SASLクライアントの実装)|
-
|Smdn.Net.Pop3.dll|POP3で使用される基本型等の定義|
 
|Smdn.Net.Pop3.Client.dll|PopClient, PopSessionを含むPOP3クライアント実装|
|Smdn.Net.Pop3.Client.dll|PopClient, PopSessionを含むPOP3クライアント実装|
 

        

        
 
本ライブラリを使用する場合は、上記アセンブリへの参照を追加してください。
本ライブラリを使用する場合は、上記アセンブリへの参照を追加してください。
41,7 40,9
 
|*クライアント実装の種類と概要
|*クライアント実装の種類と概要
 
|~名前空間|~クラス|~概要|h
|~名前空間|~クラス|~概要|h
 
|Smdn.Net.Pop3.Client|PopClient&br;PopMessageInfo|POPの操作を抽象化したクラスです。 メッセージに対する操作をSystem.IO.FileInfoクラスに似たインターフェイスで行えるようにしてあります。|
|Smdn.Net.Pop3.Client|PopClient&br;PopMessageInfo|POPの操作を抽象化したクラスです。 メッセージに対する操作をSystem.IO.FileInfoクラスに似たインターフェイスで行えるようにしてあります。|
~
|Smdn.Net.Pop3.Client.Session|PopSession|POPコマンドと1対1に対応するメソッドを持つクラスです。 POPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。 このクラスは上記のクライアント実装で内部的に使用しています。&br;直接使用することもできますが、インターフェイスを変更することがあるので推奨はできません。|
|Smdn.Net.Pop3.Client.Session|PopSession|POPコマンドと1対1に対応するメソッドを持つクラスです。 POPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。 このクラスは上記2種類のクライアント実装で内部的に使用しています。&br;直接使用することもできますが、インターフェイスを変更することがあるので推奨はできません。|-|
-

          
-
この他にも、WebRequest/WebResponseの形式でPOPの操作を行うことができるクライアントを別に用意しています。 詳しくは[[works/libs/Smdn.Net.Pop3.WebClients]]をご覧ください。
 

        

        
 
#hr
#hr
 

        

        

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

current previous
7,19 7,6
 
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
 
|~バージョン|>|~パッケージ|h
|~バージョン|>|~パッケージ|h
+
|~[[1.20 (2014-04-23)>#changes_v1.20]]|~ソースコード|{{
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20.tar.bz2}
+
}}|
+
|~|~DLL|{{
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx4.5.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx4.0.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx3.5.zip,.NET 3.5}
+
}}|
+
|~|~DLL&br;([[単一アセンブリ版>#releases_combined]])|{{
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx4.5-combined.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx4.0-combined.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.20-netfx3.5-combined.zip,.NET 3.5}
+
}}|
 
|~[[1.16 (2014-03-16)>#changes_v1.16]]|~ソースコード|{{
|~[[1.16 (2014-03-16)>#changes_v1.16]]|~ソースコード|{{
 
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.16.tar.bz2}
${smdncms:distfilelink,../Smdn.Net.Pop3.Client-1.16.tar.bz2}
 
}}|
}}|
242,15 229,6
 

        

        
 
*変更履歴 [#changes]
*変更履歴 [#changes]
 

        

        
+
**1.20 (2014-04-23) [#changes_v1.20]
+
-修正・改善
+
--&color(red){.NET Framework 2.0のサポートを廃止};
+
--Smdn.Net.Pop3.dllをSmdn.Net.Pop3.Client.dllに統合して廃止
+
--PopSessionState, PopScanListing, PopUniqueIdListing, PopDropListingをSmdn.Net.Pop3.Protocol名前空間に移動
+
--PopConnectionBase, PopReceiver, PopSenderを統合して廃止
+
--PopClient, PopClientProfile等のUserNameに関して、&urn2url(urn:ietf:rfc:5092){IMAP-URL};相当の動作に変更して``:``などの記号を含められるようにした
+
--PopClient.BeginConnectの実装を簡略化
+

          
 
**1.16 (2014-03-16) [#changes_v1.16]
**1.16 (2014-03-16) [#changes_v1.16]
 
-修正・改善
-修正・改善
 
--以前のバージョンでObsoleteにしたメンバを削除
--以前のバージョンでObsoleteにしたメンバを削除

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

current previous
37,8 37,6
 

        

        
 
-開発版
-開発版
 
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
+
-1.0x
+
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-1.00.tar.bz2}
 
-0.3x
-0.3x
 
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.33.tar.bz2}
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.33.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.32.tar.bz2}
--${smdncms:distfilelink,Smdn.Security.Authentication.Sasl-0.32.tar.bz2}
60,12 58,6
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**1.00 (2014-04-23)
+
-修正・改善
+
--&color(red){.NET Framework 2.0のサポートを廃止};
+
--上位ライブラリを更新
+
--その他機能上の変更はなし
+

          
 
**0.33 (2013-07-15)
**0.33 (2013-07-15)
 
-機能追加
-機能追加
 
--[[SASL XOAUTH2 Mechanism:https://developers.google.com/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism]]の実装となるクラスを追加
--[[SASL XOAUTH2 Mechanism:https://developers.google.com/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism]]の実装となるクラスを追加

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

current previous
18,7 18,6
 
-開発版
-開発版
 
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
-0.2x
-0.2x
+
--${smdncms:distfilelink,Smdn.Formats.Ini-0.22.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Ini-0.21.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Ini-0.21.tar.bz2}
 
--${smdncms:distfilelink,Smdn.Formats.Ini-0.20.tar.bz2}
--${smdncms:distfilelink,Smdn.Formats.Ini-0.20.tar.bz2}
 
-0.1x
-0.1x
150,11 149,6
 

        

        
 
*変更履歴
*変更履歴
 

        

        
+
**0.22 (2014-04-23)
+
-修正・改善
+
--&color(red){.NET Framework 2.0のサポートを廃止};
+
--その他機能上の変更はなし
+

          
 
**0.21 (2013-07-15)
**0.21 (2013-07-15)
 
-修正・改善
-修正・改善
 
--ファイルへの上書きを行う場合に以前の内容が残ったままとなる可能性があったのを修正
--ファイルへの上書きを行う場合に以前の内容が残ったままとなる可能性があったのを修正
208,7 202,6
 
以下の環境で動作することを確認済みです。
以下の環境で動作することを確認済みです。
 
-.NET Framework 4
-.NET Framework 4
 
-.NET Framework 3.5
-.NET Framework 3.5
+
-Mono 3.4.0
 
-Mono 2.11.3
-Mono 2.11.3
 
-Mono 2.10.8
-Mono 2.10.8
 
-Mono 2.8.2
-Mono 2.8.2

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

current previous
7,19 7,6
 
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
以下のバージョンはすべて[[MIT X11ライセンス>http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
 
|~バージョン|>|~パッケージ|h
|~バージョン|>|~パッケージ|h
+
|~[[1.00 (2014-04-23)>#changes_v1.00]]|~ソースコード|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00.tar.bz2}
+
}}|
+
|~|~DLL|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx4.5.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx4.0.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx3.5.zip,.NET 3.5}
+
}}|
+
|~|~DLL&br;([[単一アセンブリ版>#releases_combined]])|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx4.5-combined.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx4.0-combined.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.00-netfx3.5-combined.zip,.NET 3.5}
+
}}|
 
|~[[0.91 (2014-03-16)>#changes_v0.91]]|~ソースコード|{{
|~[[0.91 (2014-03-16)>#changes_v0.91]]|~ソースコード|{{
 
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.91.tar.bz2}
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-0.91.tar.bz2}
 
}}|
}}|
245,29 232,6
 
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
 

        

        
 
*変更履歴 [#changes]
*変更履歴 [#changes]
+
**1.00 (2014-04-23) [#changes_v1.00]
+
-機能追加
+
--ImapClient
+
---静的メソッドImapClient.CopyMailbox(), MoveMailbox()を追加、異なるセッション間でのメールボックスの移動・コピーが出来るようにした
+
---ImapOpenedMailboxInfo.GetMessagesGmailSearch()を追加、[[X-GM-RAW:https://developers.google.com/gmail/imap_extensions]]による[[Gmail search syntax:https://support.google.com/mail/answer/7190]]を使ったメッセージの検索ができるようにした
+
---ImapClient.CombineMailboxName()を追加、サーバーの階層区切り文字を取得してメールボックス名の結合を行えるようにした
+
---ImapMailboxInfo.GetFullNameOf()にオーバーロードを追加、複数の階層からなるメールボックス名を結合出来るようにした
+
---ImapMailboxInfo.SplitMailboxHierarchy()を追加、メールボックスの階層区切り文字を使ってメールボックス名を階層ごとに分割できるようにした
+
---ImapClient.DisabledCapabilitiesプロパティを追加、サーバーが特定のIMAP拡張をサポートしていてもそれを使用しないようにできるようにした
+
---ImapClient.IsBusyプロパティを追加、BeginConnect()/ConnectAsync()による非同期接続中、及びIDLE中にはtrueを返すようにした
+
---ImapMailboxInfo.Refresh()にオーバーロードを追加し、メールボックスのフラグも再取得するか指定できるようにした
+
---ImapSequenceSetクラスおよびImapMessageNotFoundException.SequenceOrUidSetがシリアライズできるようにした
+
-修正・改善
+
--&color(red){.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()の実装を簡略化
+

          
 
**0.91 (2014-03-16) [#changes_v0.91]
**0.91 (2014-03-16) [#changes_v0.91]
 
-修正・改善
-修正・改善
 
--以前のバージョンでObsoleteにした型・メンバを削除
--以前のバージョンでObsoleteにした型・メンバを削除

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

current previous
13,7 13,7
 
*ダウンロード
*ダウンロード
 
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
本ライブラリは[[MIT X11ライセンス:http://sourceforge.jp/projects/opensource/wiki/licenses/MIT_license]]でのリリースとなります。
 

        

        
~
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Imap4.Client-1.00.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Imap4.Client-0.91.tar.bz2}
 
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Net.Imap4.Client/releases]]をご覧ください
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Net.Imap4.Client/releases]]をご覧ください
 

        

        
120,7 120,6
 
-.NET Framework 4.5
-.NET Framework 4.5
 
-.NET Framework 4
-.NET Framework 4
 
-.NET Framework 3.5 SP 1
-.NET Framework 3.5 SP 1
+
-Mono 3.4.0
 
-Mono 3.2.8
-Mono 3.2.8
 
-Mono 3.0.12
-Mono 3.0.12
 
-Mono 2.11.3
-Mono 2.11.3

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

current previous
2,11 2,9
 
${smdncms:keywords,}
${smdncms:keywords,}
 
${smdncms:document_versions,codelang=cs,codelang=vb}
${smdncms:document_versions,codelang=cs,codelang=vb}
 
${pragma,parser-options,non-limited-list}
${pragma,parser-options,non-limited-list}
~
[[works/libs/Smdn.Net.Imap4.Client]]のドキュメントとサンプルです。 ここに記載されているものは[[version 1.00>works/libs/Smdn.Net.Imap4.Client/releases#changes_v1.00]]時点のものです。
[[works/libs/Smdn.Net.Imap4.Client]]のドキュメントとサンプルです。 ここに記載されているものは[[version 0.91>works/libs/Smdn.Net.Imap4.Client/releases#changes_v0.91]]時点のもので、記載不備などがあるかもしれません。
 

        

        
~
認証・接続のサンプルコードは[[#connection_authentication_examples]]、IMAP操作を行う具体例は[[#operation_examples]]に記載しています。
認証・接続のサンプルコードは[[#connection_authentication_examples]]、IMAP操作を行う具体例は[[#operation_examples]]に記載しています。 ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
+

          
+
このドキュメントは完全ではないため、ライブラリの使用方法に関する疑問やここに記載されていない事項については[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
45,6 43,8
 
|Smdn.Net.Imap4.Client|ImapClient&br;ImapMailboxInfo&br;ImapMessageInfoなど|IMAPの操作を抽象化したクラスです。 メッセージに対する操作をSystem.IO.FileInfo, DirectoryInfoクラスに似たインターフェイスで行えるようにしてあります。|
|Smdn.Net.Imap4.Client|ImapClient&br;ImapMailboxInfo&br;ImapMessageInfoなど|IMAPの操作を抽象化したクラスです。 メッセージに対する操作をSystem.IO.FileInfo, DirectoryInfoクラスに似たインターフェイスで行えるようにしてあります。|
 
|Smdn.Net.Imap4.Client.Session|ImapSession|IMAPコマンドと1対1に対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。 このクラスは上記のクライアント実装で内部的に使用しています。&br;直接使用することもできますが、インターフェイスを変更することがあるので推奨はできません。|
|Smdn.Net.Imap4.Client.Session|ImapSession|IMAPコマンドと1対1に対応するメソッドを持つクラスです。 IMAPの操作は抽象化していません。 仕様と1対1で対応するような実装にしてあります。 このクラスは上記のクライアント実装で内部的に使用しています。&br;直接使用することもできますが、インターフェイスを変更することがあるので推奨はできません。|
 

        

        
-
この他にも、WebRequest/WebResponseの形式でIMAPの操作を行うことができるクライアントを別に用意しています。 詳しくは[[works/libs/Smdn.Net.Imap4.WebClients]]をご覧ください。
-

          
 
#hr
#hr
 

        

        
 
*概略
*概略
232,31 232,34
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
~
***接続・切断に関するメンバ [#connection_authentication_reference]
***接続・切断・サーバ情報に関するメンバ [#connection_authentication_reference]
~
以下は接続・切断に関するメソッドとプロパティです。
以下は接続・切断・サーバ情報に関するメソッドとプロパティです。
 

        

        
~
|*接続・切断に関するメソッド
|*ImapClientクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapClient|Connect(string)&br;Connect(ICredentialsByHost)|ImapClient.Profileプロパティで指定された内容、および引数で指定されたパスワード(もしくはICredentialsByHost)を使って接続・認証を試みます。&br;接続・認証できた場合は、サーバの能力(サポートしている場合はID・名前空間も)を取得します。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
|Connect(string)&br;Connect(ICredentialsByHost)|ImapClient.Profileプロパティで指定された内容、および引数で指定されたパスワード(もしくはICredentialsByHost)を使って接続・認証を試みます。&br;接続・認証できた場合は、サーバの能力(サポートしている場合はID・名前空間も)を取得します。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
~
|~|BeginConnect(string)&br;BeginConnect(string, AsyncCallback, object)&br;BeginConnect(ICredentialsByHost)&br;BeginConnect(ICredentialsByHost, AsyncCallback, object)|Connect()メソッドと同じ処理を非同期的に実行します。 オプションでコールバックメソッドを指定できます。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
|BeginConnect(string)&br;BeginConnect(string, AsyncCallback, object)&br;BeginConnect(ICredentialsByHost)&br;BeginConnect(ICredentialsByHost, AsyncCallback, object)|Connect()メソッドと同じ処理を非同期的に実行します。 オプションでコールバックメソッドを指定できます。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
~
|~|EndConnect(IAsyncResult)|BeginConnect()で開始した非同期接続を完了します。 BeginConnect()を呼び出した場合、EndConnect()で操作を完了する必要があります。|-|
|EndConnect(IAsyncResult)|BeginConnect()で開始した非同期接続を完了します。 BeginConnect()を呼び出した場合、EndConnect()で操作を完了する必要があります。|-|
~
|~|ConnectAsync(string)&br;ConnectAsync(ICredentialsByHost)|[.NET 4.0]&br;Connect()メソッドと同じ処理を非同期的に実行し、非同期操作を表すTaskを返します。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
|ConnectAsync(string)&br;ConnectAsync(ICredentialsByHost)|[.NET 4.0]&br;Connect()メソッドと同じ処理を非同期的に実行し、非同期操作を表すTaskを返します。|LOGIN, AUTHENTICATE, STARTTLS, CAPABILITY&br;(サポートしている場合はID, NAMESPACEも)|
~
|~|Logout()|ログアウトします。 選択済みメールボックスの削除フラグが設定されているメッセージは削除されます。|CLOSE, LOGOUT|
|Logout()|ログアウトします。 選択済みメールボックスの削除フラグが設定されているメッセージは削除されます。|CLOSE, LOGOUT|
~
|~|Disconnect()&br;IDisposable.Dispose()|ログアウトせずに切断します。 削除フラグが設定されているメッセージがあっても削除されません。|-|
|Disconnect()&br;IDisposable.Dispose()|ログアウトせずに切断します。 削除フラグが設定されているメッセージがあっても削除されません。|-|
~
|~|Refresh()|自動ログアウトタイマの更新、セッションの接続性確認などに使います。 メールボックスを選択している場合は、メールボックスの状態も更新します。 サーバからメールボックスの状態に関する通知があった場合はイベントを発生させます。|NOOP|
|Refresh()|自動ログアウトタイマの更新、セッションの接続性確認などに使います。 メールボックスを選択している場合は、メールボックスの状態も更新します。 サーバからメールボックスの状態に関する通知があった場合はイベントを発生させます。|NOOP|
~

          

          
~
|*接続・切断に関するプロパティ
|*ImapClientクラスのプロパティ
~
|~クラス|~プロパティ|~解説|h
|~プロパティ|~解説|h
~
|~ImapClient|Profile|接続先のホスト・ポート・ユーザ名などを取得/設定します。 コンストラクタで指定した内容はこのプロパティに反映されます。|
|Profile|接続先のホスト・ポート・ユーザ名などを取得/設定します。 コンストラクタで指定した内容はこのプロパティに反映されます。|
~
|~|Timeout|接続時およびコマンド処理のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
|Timeout|接続時およびコマンド処理のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
~
|~|SendTimeout|ソケット送信時(コマンド送信)のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
|SendTimeout|ソケット送信時(コマンド送信)のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
~
|~|ReceiveTimeout|ソケット受信時(レスポンス受信)のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
|ReceiveTimeout|ソケット受信時(レスポンス受信)のタイムアウト時間をミリ秒単位で取得/設定します。 Timeout.Infinite(-1)を指定した場合はタイムアウトしません。|
~
|~|IsConnected|接続中かどうかを表す値を取得します。|
|IsConnected|接続中かどうかを表す値を取得します。|
~
|~|IsBusy|BeginConnect()/ConnectAsync()による非同期接続が進行中かどうか、もしくはIDLE中であるかどうかを表す値を取得します。|
|ServerCapabilities|サーバがサポートする機能の一覧(CAPABILITYコマンドの結果)を取得します。|
-
|ServerID|サーバがサポートしている場合、サーバのID(IDコマンドの結果)を返します。 サポートしていない場合は、空のインスタンスを返します。|
-
|ServerNamespace|サーバがサポートしている場合、サーバの名前空間(NAMESPACEコマンドの結果)を返します。 サポートしていない場合は、空のインスタンスを返します。|
 

        

        
 
:IDisposable.Dispose()|ImapClientクラスはIDisposableインターフェイスを実装しています。 IDisposable.Dispose()を呼び出した場合、削除マークが付けられているメッセージを削除せずに切断します。 usingステートメントを使って記述する場合でメッセージを削除したい場合は、切断する前にLogout()メソッド呼び出すようにしてください。
:IDisposable.Dispose()|ImapClientクラスはIDisposableインターフェイスを実装しています。 IDisposable.Dispose()を呼び出した場合、削除マークが付けられているメッセージを削除せずに切断します。 usingステートメントを使って記述する場合でメッセージを削除したい場合は、切断する前にLogout()メソッド呼び出すようにしてください。
 
:Logout(), Disconnect(), IDisposable.Dispose()|これらのメソッドのいずれかを呼び出した後でも、再度ImapClient.Connect()を呼び出すことで同じインスタンスを使って再度接続することはできます。
:Logout(), Disconnect(), IDisposable.Dispose()|これらのメソッドのいずれかを呼び出した後でも、再度ImapClient.Connect()を呼び出すことで同じインスタンスを使って再度接続することはできます。
 
:Timeout, SendTimeout, ReceiveTimeout|これらのプロパティはそれぞれImapClient.Profile.Timeout, ImapClient.Profile.SendTimeout, ImapClient.Profile.RecieveTimeoutを設定することと同じですが、接続後はImapClient.Profileの値を変更してもImapClientの動作には反映されません。 接続後はImapClient.Timeout, ImapClient.SendTimeout, ImapClient.ReceiveTimeoutプロパティを設定してください。
:Timeout, SendTimeout, ReceiveTimeout|これらのプロパティはそれぞれImapClient.Profile.Timeout, ImapClient.Profile.SendTimeout, ImapClient.Profile.RecieveTimeoutを設定することと同じですが、接続後はImapClient.Profileの値を変更してもImapClientの動作には反映されません。 接続後はImapClient.Timeout, ImapClient.SendTimeout, ImapClient.ReceiveTimeoutプロパティを設定してください。
-
:ServerCapabilities, ServerID, ServerNamespace|切断されている状態で取得しようとした場合(ImapClient.IsConnectedがfalseの場合)、例外をスローします。
 

        

        
 
***接続に関するパラメータと動作 [#connection_authentication_connectparams]
***接続に関するパラメータと動作 [#connection_authentication_connectparams]
 
接続時の動作は、接続時のパラメータにより次のように変わります。
接続時の動作は、接続時のパラメータにより次のように変わります。
640,7 643,7
 
#tabpage-end
#tabpage-end
 

        

        
 
****メールボックスのステータス [#operation_examples_mailbox_status]
****メールボックスのステータス [#operation_examples_mailbox_status]
~
[[ImapMailboxInfo.ExistMessageCountなどメールボックスのステータス>#operation_reference_mailbox_status]]は、明示的に指定しない限り取得しません。 [[ImapClient.GetMailboxなどメールボックスを取得するメソッド>#operation_reference_mailbox_getcreate]]では、引数にImapMailboxListOptions.RequestStatusを指定することでメールボックスの取得と同時にステータスも取得します。 このほか、[[ImapMailboxInfo.Refreshメソッド>#operation_reference_mailbox_control]]を呼び出すことにより、メールボックスのステータスを取得しなおして最新の状態にすることができます。
[[ImapMailboxInfo.ExistMessageCountなどメールボックスのステータス>#operation_reference_mailbox_status]]は、明示的に指定しない限り取得しません。 [[ImapClient.GetMailboxなどメールボックスを取得するメソッド>#operation_reference_mailbox_getcreate]]では、引数にImapMailboxListOptions.RequestStatusを指定することでメールボックスの取得と同時にステータスも取得します。 このほか、ImapMailboxInfo.Refreshメソッドを呼び出すことにより、メールボックスのステータスを取得しなおして最新の状態にすることができます。
 

        

        
 
#tabpage(codelang=cs,container-title=メールボックスのステータスを取得する例)
#tabpage(codelang=cs,container-title=メールボックスのステータスを取得する例)
 
#code{{
#code{{
741,8 744,6
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
メールボックス名の結合・分割には[[ImapClient.CombineMailboxName>#operation_reference_mailbox_name]]などのメソッドを使うこともできます。
+

          
 
****特別なメールボックス [#operation_examples_mailbox_specialuse]
****特別なメールボックス [#operation_examples_mailbox_specialuse]
 
メールクライアント上で「受信トレイ」と表示されるメールボックスには、INBOXというIMAPプロトコルで定められた名前が付けられています。 これ以外にもよく使われる''特別なメールボックス''に「送信済みメール」「ごみ箱」「下書き」などがあります。 一般的にこれらのメールボックスには「Sent」「Trash」「Drafts」といった名前が付けられていることが多いですが、IMAPプロトコルではこれらのメールボックス名は定められていないため、クライアントやサーバーの実装によってはこれと異なる名前が付けられている場合があります。 また、これらのメールボックスがINBOXと同階層にある場合や下位にある場合もあり、まちまちです。
メールクライアント上で「受信トレイ」と表示されるメールボックスには、INBOXというIMAPプロトコルで定められた名前が付けられています。 これ以外にもよく使われる''特別なメールボックス''に「送信済みメール」「ごみ箱」「下書き」などがあります。 一般的にこれらのメールボックスには「Sent」「Trash」「Drafts」といった名前が付けられていることが多いですが、IMAPプロトコルではこれらのメールボックス名は定められていないため、クライアントやサーバーの実装によってはこれと異なる名前が付けられている場合があります。 また、これらのメールボックスがINBOXと同階層にある場合や下位にある場合もあり、まちまちです。
 

        

        
751,20 752,21
 
#tabpage(codelang=cs,container-title=特別なメールボックスを取得する例)
#tabpage(codelang=cs,container-title=特別なメールボックスを取得する例)
 
#code{{
#code{{
 
using (ImapClient client = new ImapClient()) {
using (ImapClient client = new ImapClient()) {
~
  // 「送信済みメール」のメールボックスを取得する
  // サーバーがSPECIAL-USE(RFC6154)をサポートしているか調べる
~
  ImapMailboxInfo sent = client.GetMailbox(ImapSpecialMailbox.Sent);
  if (client.ServerCapabilities.Contains(ImapCapability.SpecialUse)) {
-
    // 「送信済みメール」のメールボックスを取得する
-
    ImapMailboxInfo sent = client.GetMailbox(ImapSpecialMailbox.Sent);
 

        

        
~
  // 「下書き」のメールボックスを取得する
    // 「下書き」のメールボックスを取得する
~
  ImapMailboxInfo drafts = client.GetMailbox(ImapSpecialMailbox.Drafts);
    ImapMailboxInfo drafts = client.GetMailbox(ImapSpecialMailbox.Drafts);
 

        

        
~
  // 「ごみ箱」のメールボックスを取得する
    // 「ごみ箱」のメールボックスを取得する
~
  ImapMailboxInfo trash = client.GetMailbox(ImapSpecialMailbox.Trash);
    ImapMailboxInfo trash = client.GetMailbox(ImapSpecialMailbox.Trash);
-
  }
 
}
}
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
拡張機能を使った操作については、[[#operation_examples_misc_extension_specs]]も合わせて参照してください。
+

          
 
****メールボックスの購読 [#operation_examples_mailbox_subscribe]
****メールボックスの購読 [#operation_examples_mailbox_subscribe]
 
IMAPではメールボックスを購読(SUBSCRIBE)するという機能があります。 メールクライアント上では購読中のメールボックスのみを表示するようにし、それ以外は見かけ上存在しないものとして扱うようにすることができます。 [[ImapClient.GetMailboxes>#operation_reference_mailbox_getcreate]]などのメールボックスを取得するメソッドでは引数にImapMailboxListOptionsを指定することができ、ImapMailboxListOptions.SubscribedOnlyを指定すれば購読中のメールボックスのみを取得することができます。
IMAPではメールボックスを購読(SUBSCRIBE)するという機能があります。 メールクライアント上では購読中のメールボックスのみを表示するようにし、それ以外は見かけ上存在しないものとして扱うようにすることができます。 [[ImapClient.GetMailboxes>#operation_reference_mailbox_getcreate]]などのメールボックスを取得するメソッドでは引数にImapMailboxListOptionsを指定することができ、ImapMailboxListOptions.SubscribedOnlyを指定すれば購読中のメールボックスのみを取得することができます。
 

        

        
835,8 837,6
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
IMAPでは、''選択することが出来るメールボックスは常に一つだけ''です。 あるメールボックスを選択している状態で別のメールボックスを選択しようとした場合、直前まで選択されていたメールボックスの選択は''暗黙的に解除されます''。
+

          
 
メールボックスへの[[メッセージのアップロード>#operation_examples_message_append]]は、メールボックスを選択しなくても行うことができます。
メールボックスへの[[メッセージのアップロード>#operation_examples_message_append]]は、メールボックスを選択しなくても行うことができます。
 

        

        
 
IMAPでは、メールボックスを''読み取り専用''で開くことができます。 読み取り専用で開いたメールボックスでは、メッセージに設定されている''新着フラグ''(``\Recent``)は消失せず、メッセージへのフラグの設定なども反映されません。 読み取り専用でメールボックスを開くには、[[ImapClient.OpenMailboxメソッドやImapMailboxInf.Openメソッド>#operation_reference_mailbox_select]]の引数&var{asReadOnly};にtrueを指定します。
IMAPでは、メールボックスを''読み取り専用''で開くことができます。 読み取り専用で開いたメールボックスでは、メッセージに設定されている''新着フラグ''(``\Recent``)は消失せず、メッセージへのフラグの設定なども反映されません。 読み取り専用でメールボックスを開くには、[[ImapClient.OpenMailboxメソッドやImapMailboxInf.Openメソッド>#operation_reference_mailbox_select]]の引数&var{asReadOnly};にtrueを指定します。
957,47 957,6
 

        

        
 
本ライブラリではダウンロードしたメッセージのヘッダパートを解析したり添付ファイルの抽出を行ったりする機能は用意していません。 そういったIMAPの仕様を超える機能は[[Smdn.Formats.Mime>works/libs/Smdn.Formats.Mime]]で提供しているので、必要な場合はこれらのライブラリを組み合わせて使ってください。
本ライブラリではダウンロードしたメッセージのヘッダパートを解析したり添付ファイルの抽出を行ったりする機能は用意していません。 そういったIMAPの仕様を超える機能は[[Smdn.Formats.Mime>works/libs/Smdn.Formats.Mime]]で提供しているので、必要な場合はこれらのライブラリを組み合わせて使ってください。
 

        

        
+
参考までに、本ライブラリとSmdn.Formats.Mimeを組み合わせて使う場合の例を挙げます。
+

          
+
#tabpage(codelang=cs,container-title=INBOX内のすべてのメッセージの本文を取得して、添付ファイルのみを取得する例)
+
#code{{
+
using System;
+

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

          
+
class DecodeMime {
+
  public static void Main(string[] args)
+
  {
+
    using (var client = new ImapClient(new Uri("imap://user@localhost/"))) {
+
      client.Connect("pass");
+

          
+
      // INBOXを開く
+
      using (var inbox = client.OpenInbox()) {
+
        // すべてのメッセージを取得
+
        foreach (var message in inbox.GetMessages()) {
+
          // メッセージの本文を取得し、それをMail.Loadメソッド(Smdn.Formats.Mime)でパース・デコードした結果を得る
+
          var mail = message.ReadAs<Mail>(Mail.Load);
+

          
+
          // デコードしたメッセージの件名・受信日時と添付ファイル名を表示する
+
          Console.WriteLine("{0} {1}", mail.Date, mail.Subject);
+

          
+
          // すべての添付ファイルを列挙
+
          foreach (var attachedFile in mail.AttachedFiles) {
+
            Console.WriteLine("  file attached: {0}", attachedFile.FileName);
+

          
+
            // 添付ファイルを保存する場合
+
            //attachedFile.Save("filename");
+
          }
+
        }
+
      }
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+

          
 
****メッセージの属性 [#operation_examples_message_attributes]
****メッセージの属性 [#operation_examples_message_attributes]
 
IMAPサーバーで管理されるメッセージには、いくつかのプロパティ(message attribute, ''属性'')が与えられます。 各メッセージに与えられる属性には''動的属性''と''静的属性''の二種類が存在します。
IMAPサーバーで管理されるメッセージには、いくつかのプロパティ(message attribute, ''属性'')が与えられます。 各メッセージに与えられる属性には''動的属性''と''静的属性''の二種類が存在します。
 

        

        
1121,29 1080,6
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
このほか、ImapOpenedMailboxInfo.GetMessagesGmailSearch()メソッドを使うことにより、GMailサーバーに対しては[[GMailの詳細検索クエリ:https://support.google.com/mail/answer/7190]]を使ったメッセージの検索も行うことができます。
+

          
+
#tabpage(codelang=cs,container-title=GMailの詳細検索クエリを使った検索の例)
+
#code{{
+
// GMailに接続
+
using (var client = new ImapClient(new Uri("imaps://user@imap.gmail.com/"))) {
+
  client.Connect("pass");
+

          
+
  // INBOXを開く
+
  using (var inbox = client.OpenInbox()) {
+
    // GMailの詳細検索クエリを使ってメッセージを検索して列挙
+
    var query = "from:花子 label:友だち";
+

          
+
    foreach (ImapMessageInfo message in inbox.GetMessagesGmailSearch(query)) {
+
      // 条件にマッチしたメッセージのUIDを表示
+
      Console.WriteLine(message.Uid);
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+

          
 
****複数のメッセージに対する操作 (ImapMessageInfoList) [#operation_examples_message_multiplemessages]
****複数のメッセージに対する操作 (ImapMessageInfoList) [#operation_examples_message_multiplemessages]
 
ImapOpenedMailboxInfo.GetMessagesメソッドなどで複数のメッセージの取得・検索を行った結果はImapMessageInfoListとして返されます。 ImapMessageInfoListクラスは検索結果として得られたメッセージの通番・UIDをカプセル化するクラスで、foreach文などにより列挙を行うまではImapMessageInfoを生成しないという点でList<ImapMessageInfo>などのコレクションとは異なります。
ImapOpenedMailboxInfo.GetMessagesメソッドなどで複数のメッセージの取得・検索を行った結果はImapMessageInfoListとして返されます。 ImapMessageInfoListクラスは検索結果として得られたメッセージの通番・UIDをカプセル化するクラスで、foreach文などにより列挙を行うまではImapMessageInfoを生成しないという点でList<ImapMessageInfo>などのコレクションとは異なります。
 

        

        
1216,12 1152,12
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
~
なお、IMAP拡張コマンドであるUID EXPUNGEコマンド(&urn2url(urn:ietf:rfc:4315);)をサポートしているサーバーの場合はこのような動作とはならず、ImapMessageInfo.DeleteメソッドはImapMessageInfoが表すメッセージのみを削除します。 ([[#operation_examples_misc_extension_specs]]も合わせて参照してください。)
なお、IMAP拡張コマンドであるUID EXPUNGEコマンド(&urn2url(urn:ietf:rfc:4315);)をサポートしているサーバーの場合はこのような動作とはならず、ImapMessageInfo.DeleteメソッドはImapMessageInfoが表すメッセージのみを削除します。
 

        

        
 
****メッセージの移動 [#operation_examples_message_move]
****メッセージの移動 [#operation_examples_message_move]
 
IMAPにはメッセージの移動を行うコマンドが用意されていないため、[[ImapMessageInfo.MoveTo>#operation_reference_message_control]]などのメソッドではコピーと削除の操作を組み合わせることで移動の操作をエミュレートします。 そのため、移動を行おうとしてコピーを行ったが、その後の削除に失敗した場合などには、コピー元とコピー先のメールボックスに同一のメッセージが存在することとなります。 現在の実装では、コピー後の削除に失敗してもそのままにします(コピー先のメッセージを削除してコピー前の状態にするような実装とはなっていません)。
IMAPにはメッセージの移動を行うコマンドが用意されていないため、[[ImapMessageInfo.MoveTo>#operation_reference_message_control]]などのメソッドではコピーと削除の操作を組み合わせることで移動の操作をエミュレートします。 そのため、移動を行おうとしてコピーを行ったが、その後の削除に失敗した場合などには、コピー元とコピー先のメールボックスに同一のメッセージが存在することとなります。 現在の実装では、コピー後の削除に失敗してもそのままにします(コピー先のメッセージを削除してコピー前の状態にするような実装とはなっていません)。
 

        

        
~
なお、IMAP拡張コマンドであるMOVEコマンド(&urn2url(urn:ietf:rfc:6851);)をサポートするサーバーの場合は、ImapMessageInfo.MoveToなどのメソッドはMOVEコマンドを使ってメッセージの移動を行います。 ([[#operation_examples_misc_extension_specs]]も合わせて参照してください。)
なお、IMAP拡張コマンドであるMOVEコマンド(&urn2url(urn:ietf:rfc:6851);)をサポートするサーバーの場合は、ImapMessageInfo.MoveToなどのメソッドはMOVEコマンドを使ってメッセージの移動を行います。
 

        

        
 
****ImapMessageInfoの有効期限
****ImapMessageInfoの有効期限
 
ImapMessageInfoは、その取得元のメールボックス(ImapOpenedMailboxInfo)が開かれている間のみ有効です。 メールボックスを閉じた後にImapMessageInfoを使って操作を行おうとした場合はImapUnavailableExceptionをスローします。 また、同名のメールボックスを再度開いた場合でも有効にはならず、再度ImapMessageInfoを取得しなおす必要があります。
ImapMessageInfoは、その取得元のメールボックス(ImapOpenedMailboxInfo)が開かれている間のみ有効です。 メールボックスを閉じた後にImapMessageInfoを使って操作を行おうとした場合はImapUnavailableExceptionをスローします。 また、同名のメールボックスを再度開いた場合でも有効にはならず、再度ImapMessageInfoを取得しなおす必要があります。
1284,284 1220,9
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
****メッセージのセクション [#operation_examples_message_section]
+
IMAPでは、メールボックス内にあるMIMEメッセージの解析がサーバー側で行われます。 それにより、メッセージ内の各パートには1から始まる''セクション番号''が自動的に割り当てられます。 階層がネストしている場合は、親階層の番号の後にピリオド``.``で区切られたセクション番号が割り当てられます。 以下は、メッセージの構造と割り当てられるセクション番号の例です。
+

          
+
#column
+
#preformatted(本文の後に画像が添付されているメールの例){{
+
multipart/mixed
+
|--[1] text/plain
+
`--[2] image/jpeg
+
}}
+
#column
+
#preformatted(本文の後に二つのメールがカプセル化されているメールの例){{
+
multipart/mixed
+
|--[1] text/plain
+
|--[2] message/rfc822
+
`--[3] message/rfc822
+
}}
+
#column
+
#preformatted(構造がネストしているメールの例){{
+
multipart/mixed
+
|--[1] text/plain
+
|--[2] multipart/mixed
+
|   |--[2.1] text/plain
+
|   |--[2.2] image/jpeg
+
|   `--[2.3] image/jpeg
+
`--[3] multipart/mixed
+
    |--[3.1] text/plain
+
    `--[3.2] text/html
+
}}
+
#column-end
+

          
+
IMAPでは、このセクション番号を指定することにより、メッセージの全体ではなく一部のメッセージパートだけを取得することができます。 [[ImapMessageInfo.ReadAllText()やSave()などメッセージの本文を取得するメソッド>#operation_reference_message_readbody]]では、セクションを指定することでメッセージの一部分だけを取得することができます。
+

          
+
例えば、次のような構造のメッセージから、セクション番号``1``(text/plainのパート)だけを取得する場合は次のようにします。 コード中で使用しているGetStructureOf()メソッドおよびIImapBodyStructureについては[[#operation_examples_message_bodystructure]]で追って解説します。
+

          
+
#preformatted(メールボックスにあるメッセージの構造とセクション番号){{
+
multipart/mixed
+
|--[1] text/plain
+
`--[2] image/jpeg
+
}}
+

          
+
#tabpage(codelang=cs,container-title=上記のメッセージからtext/plainのパートだけを取得して表示する例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
    var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
    // メッセージのセクション番号1の構造を取得する
+
    IImapBodyStructure part1 = message.GetStructureOf(1);
+

          
+
    // メッセージのセクション番号1のパートのみを取得し、表示する
+
    Console.WriteLine(message.ReadAllText(part1));
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
同様に、セクション番号``2``(image/jpegのパート)だけを取得して保存する場合は次のようにします。 オプションにImapMessageFetchBodyOptions.DecodeContentを指定することにより、(BASE64などで)エンコードされている状態からのデコードも同時に行います。
+

          
+
#tabpage(codelang=cs,container-title=上記のメッセージからimage/jpegのパートだけを取得して保存する例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
    var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
    // メッセージのセクション番号2の構造を取得する
+
    IImapBodyStructure part2 = message.GetStructureOf(2);
+

          
+
    // メッセージのセクション番号2のパートのみを取得・デコードし、ファイルに保存する
+
    message.Save("attached-image.jpg", part2, ImapMessageFetchBodyOptions.DecodeContent);
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
****メッセージの構造(BODYSTRUCTURE) [#operation_examples_message_bodystructure]
+
IMAPでは、サーバー側で解析されたMIMEメッセージの構造(''BODYSTRUCTURE'')を取得することができます。 これにより、メッセージ全体を取得・パースしなくてもメッセージがどのような構造になっているかを本文の取得前に知ることができます。
+

          
+
メッセージ全体の構造は[[ImapMessageInfo.BodyStructureプロパティ>#operation_reference_message_status]]を参照することで取得することができます。 BodyStructureプロパティはインターフェイス型IImapBodyStructure(Smdn.Net.Imap4名前空間)となっていますが、マルチパートの場合はImapMultiPartBodyStructure、シングルパートの場合はImapSinglePartBodyStructureにそれぞれキャストすることができます。
+

          
+
#tabpage(codelang=cs,container-title=BODYSTRUCTUREの参照)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
    // ImapMessageFetchAttributeOptions.StaticAttributesを指定することにより
+
    // BODYSTRUCTUREを含む静的属性も同時に取得する
+
    var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
    // BODYSTRUCTUREを参照し、メッセージがマルチパートかどうかを調べる
+
    // (単にmessage.IsMultiPartとしても同じ)
+
    if (message.BodyStructure.IsMultiPart) {
+
      // ImapMultiPartBodyStructureにキャストすることで更に詳細な情報を取得できる
+
      var multipartStructure = message.BodyStructure as ImapMultiPartBodyStructure;
+

          
+
      // 列挙することでネストしている構造を取得することができる
+
      foreach (var nestedStructure in multipartStructure) {
+
        // ...
+
      }
+
    }
+
    else {
+
      // ImapSinglePartBodyStructureにキャストすることで更に詳細な情報を取得できる
+
      var singlepartStructure = message.BodyStructure as ImapSinglePartBodyStructure;
+

          
+
      // ...
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
以下にIImapBodyStructureインターフェイスから取得できる情報を表示する例を挙げます。 この例では、``text/plain``と``image/jpeg``の二つのパートからなる``multipart/mixed``なメッセージのBODYSTRUCTUREを解析し、セクション番号と各種情報を表示しています。
+

          
+
#preformatted(メールボックスにあるメッセージの構造とセクション番号){{
+
multipart/mixed
+
|--[1] text/plain
+
`--[2] image/jpeg
+
}}
+

          
+
#prompt(上記メッセージのBODYSTRUCTUREの情報を表示した結果の例){{
+
[] multipart/mixed
+
  nested structure count: 2
+
[1] text/plain
+
  size: 984
+
  line count: 25
+
  Content-Encoding: 7bit
+
  charset: iso-2022-jp
+
  MD5: 
+
  description: 
+
[2] image/jpeg
+
  size: 536810
+
  line count: 0
+
  Content-Encoding: base64
+
  filename: test.jpg
+
  type: attachment
+
  MD5: 
+
  description: 
+
}}
+

          
+
#tabpage(codelang=cs,container-title=BODYSTRUCTUREから情報を取得して表示する例)
+
#code{{
+
static void PrintBodyStructure()
+
{
+
  using (ImapClient client = new ImapClient()) {
+
    using (var mailbox = client.OpenInbox()) {
+
      // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
      // ImapMessageFetchAttributeOptions.StaticAttributesを指定することにより
+
      // BODYSTRUCTUREを含む静的属性も同時に取得する
+
      var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
      PrintStructure(message.BodyStructure);
+
    }
+
  }
+
}
+

          
+
static void PrintStructure(IImapBodyStructure sectionStructure)
+
{
+
  // セクション番号とメディアタイプを表示
+
  Console.WriteLine("[{0}] {1}", sectionStructure.Section, sectionStructure.MediaType);
+

          
+
  if (sectionStructure.IsMultiPart) {
+
    // ImapMultiPartBodyStructureにキャストして更に詳細な情報を取得する
+
    var multipartStructure = sectionStructure as ImapMultiPartBodyStructure;
+

          
+
    Console.WriteLine("  nested structure count: {0}", multipartStructure.NestedStructures.Length);
+

          
+
    // このセクションで入れ子になっている構造を列挙して再帰的に表示する
+
    foreach (var nestedStructure in sectionStructure) {
+
      PrintStructure(nestedStructure);
+
    }
+
  }
+
  else {
+
    // ImapSinglePartBodyStructureにキャストして更に詳細な情報を取得する
+
    var singlepartStructure = sectionStructure as ImapSinglePartBodyStructure;
+

          
+
    Console.WriteLine("  size: {0}", singlepartStructure.Size);
+
    Console.WriteLine("  line count: {0}", singlepartStructure.LineCount);
+
    Console.WriteLine("  Content-Encoding: {0}", singlepartStructure.Encoding);
+

          
+
    string charset;
+

          
+
    if (singlepartStructure.Parameters.TryGetValue("charset", out charset))
+
      Console.WriteLine("  charset: {0}", charset);
+

          
+
    // ImapExtendedSinglePartBodyStructureにキャストできる場合はそこから更に詳細な情報を取得する
+
    var extendedStructure = sectionStructure as ImapExtendedSinglePartBodyStructure;
+

          
+
    if (extendedStructure != null) {
+
      // Content-Disposition
+
      if (extendedStructure.Disposition != null) {
+
        Console.WriteLine("  filename: {0}", extendedStructure.Disposition.Filename);
+
        Console.WriteLine("  type: {0}", extendedStructure.Disposition.Type);
+
      }
+
      // Content-MD5
+
      Console.WriteLine("  MD5: {0}", extendedStructure.MD5);
+
      // Content-Description
+
      Console.WriteLine("  description: {0}", extendedStructure.Description);
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
IImapBodyStructureはこのほかにも、カプセル化されたメッセージの場合はImapMessageRfc822BodyStructureにキャストすることができます。 さらに、メッセージの種類によっては、拡張情報を含むBODYSTRUCTUREを返す場合があります。 この場合、IImapBodyStructureからIImapBodyStructureExtensionインターフェイス、またはImapExtendedSinglePartBodyStructure, ImapExtendedMultiPartBodyStructure, ImapExtendedMessageRfc822BodyStructureの各クラスにキャストすることもできます。 取得できる情報の詳細についてはIMAPの仕様および各クラスの実装を参照してください。
+

          
+
特定のセクションのBODYSTRUCTUREを取得したい場合には、ImapMessageInfo.GetStructureOf()メソッドを使うことができます。 このメソッドでは、セクション番号を文字列または数値で指定することにより、そのセクションのBODYSTRUCTUREを取得することができます。 また、Find()またはFindAll()メソッドを使うと、特定の条件(Predicate<IImapBodyStructure>)またはメディアタイプに該当するセクションだけを取得することができます。
+

          
+
#tabpage(codelang=cs,container-title=特定のセクションを取得する例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
    // ImapMessageFetchAttributeOptions.StaticAttributesを指定することにより
+
    // BODYSTRUCTUREを含む静的属性も同時に取得する
+
    var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
    IImapBodyStructure s;
+

          
+
    // セクション番号"1.2.3"のBODYSTRUCTUREを取得する
+
    s = message.GetStructureOf("1.2.3");
+

          
+
    // セクション番号"1.2.3"のBODYSTRUCTUREを取得する (上記のコードと同等)
+
    s = message.GetStructureOf(1, 2, 3);
+

          
+
    // メディアタイプがimage/jpegのセクションをすべて取得して列挙する
+
    foreach (var jpegImageSection in message.BodyStructure.FindAll(new Smdn.MimeType("image/jpeg"))) {
+
      // セクションの内容を取得・デコードしてファイルに保存する
+
      message.Save(jpegImageSection.Section + ".jpg", jpegImageSection, ImapMessageFetchBodyOptions.DecodeContent);
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
FindAll()メソッドを使った別の例として、メッセージから添付ファイルのセクションを取得して、ファイルに保存する例を挙げます。
+

          
+
#tabpage(codelang=cs,container-title=メッセージに添付されているファイルを保存する例)
+
#code{{
+
static void SaveAttachment()
+
{
+
  using (ImapClient client = new ImapClient()) {
+
    using (var mailbox = client.OpenInbox()) {
+
      // 目的のメッセージはINBOX内にあるUIDが1のメッセージと仮定
+
      // ImapMessageFetchAttributeOptions.StaticAttributesを指定することにより
+
      // BODYSTRUCTUREを含む静的属性も同時に取得する
+
      var message = mailbox.GetMessageByUid(1L, ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
      // 取得したメッセージについて、Content-Disposition: attachmentヘッダの
+
      // あるセクションを探して列挙する
+
      foreach (var attachmentSection in message.BodyStructure.FindAll(IsAttachmentSection)) {
+
        // セクションの内容を取得・デコードしてファイルに保存する
+
        // (ここで適切なファイル名を指定する必要がある)
+
        message.Save("attachment-file.xxx", attachmentSection, ImapMessageFetchBodyOptions.DecodeContent);
+
      }
+
    }
+
  }
+
}
+

          
+
// BODYSTRUCTUREが添付ファイルのセクションかどうかを調べる
+
static bool IsAttachmentSection(IImapBodyStructure section)
+
{
+
  var s = section as IImapBodyStructureExtension;
+

          
+
  if (s == null)
+
    return false; // 拡張されたBODYSTRUCTUREではない (Content-Dispositionヘッダを持たない)
+

          
+
  // Content-Dispositionヘッダがあり、かつ値がattachmentの場合
+
  return (s.Disposition != null && s.Disposition.IsAttachment);
+
}
+
}}
+
#tabpage-end
+

          
+

          
+

          
 
***その他の操作 [#operation_examples_misc]
***その他の操作 [#operation_examples_misc]
 
****サーバーからの通知 [#operation_examples_misc_notification]
****サーバーからの通知 [#operation_examples_misc_notification]
~
IMAPでは複数のクライアントが同時に操作を行うことが許可されているため、他のクライアントがメッセージの追加・削除を行ったことによるメールボックスのステータス変更などが通知されます。 こういった通知は発行したコマンドに対するレスポンスに付随して送信されてきます。 新着メールの受信などもこれらの通知に含まれます。 これらのステータス変更は[[ImapClientクラスのExistMessageCountChangedイベントなど>#operation_reference_misc_events]]によって検知することができます。 また、定期的に[[ImapMailboxInfo.Refreshメソッド>#operation_reference_mailbox_control]]を呼び出してメールボックスのステータスを更新することでも他のクライアントによる変更を検知できます。
IMAPでは複数のクライアントが同時に操作を行うことが許可されているため、他のクライアントがメッセージの追加・削除を行ったことによるメールボックスのステータス変更などが通知されます。 こういった通知は発行したコマンドに対するレスポンスに付随して送信されてきます。 新着メールの受信などもこれらの通知に含まれます。 これらのステータス変更は[[ImapClientクラスのExistMessageCountChangedイベントなど>#operation_reference_misc_events]]によって検知することができます。 また、定期的に[[ImapMailboxInfo.Refreshメソッド>#operation_reference_mailbox_control]]を呼び出してステータスを更新することでも他のクライアントによる変更を検知できます。
 

        

        
 
****ステータス変更の待機 (IDLE) [#operation_examples_misc_idle]
****ステータス変更の待機 (IDLE) [#operation_examples_misc_idle]
 
IMAP拡張コマンドであるIDLEコマンド(&urn2url(urn:ietf:rfc:2177);)をサポートしているサーバーでは、このコマンドを使うことによりメールボックスのステータス変更などを''プッシュ通知''させることができます。 ステータス変更の待機には[[ImapOpenedMailboxInfo.Idleなどのメソッド>#operation_reference_selectedmailbox_idle]]を使うことが出来ます。 IDLE中に発生したメールボックスのステータス変更は[[ImapClientクラスのExistMessageCountChangedイベントなど>#operation_reference_misc_events]]によって検知することができます。
IMAP拡張コマンドであるIDLEコマンド(&urn2url(urn:ietf:rfc:2177);)をサポートしているサーバーでは、このコマンドを使うことによりメールボックスのステータス変更などを''プッシュ通知''させることができます。 ステータス変更の待機には[[ImapOpenedMailboxInfo.Idleなどのメソッド>#operation_reference_selectedmailbox_idle]]を使うことが出来ます。 IDLE中に発生したメールボックスのステータス変更は[[ImapClientクラスのExistMessageCountChangedイベントなど>#operation_reference_misc_events]]によって検知することができます。
1630,252 1291,159
 

        

        
 
なお、IDLEコマンドをサポートしていないサーバーに対してこれらのメソッドを使用した場合は、IDLEコマンドの代わりにNOOPコマンドを一定間隔おきに送信してステータスの変更を検知します。
なお、IDLEコマンドをサポートしていないサーバーに対してこれらのメソッドを使用した場合は、IDLEコマンドの代わりにNOOPコマンドを一定間隔おきに送信してステータスの変更を検知します。
 

        

        
+
IMAPでは、選択できるメールボックスは接続ごとに一つだけという制限があるため、IDLEコマンドでは複数のメールボックスのステータス変更を同時に待機することはできません。 したがって、複数のメールボックスのステータス変更を待機したい場合は、[[Refresh()メソッド(STATUSコマンド)>#operation_reference_mailbox_control]]を使って各メールボックスに対して定期的にポーリングを行うか、監視したいメールボックスの数だけ接続を用意してそのそれぞれでIDLEを行う必要があります。
+

          
+
****拡張機能の使用 [#operation_examples_misc_extension_specs]
+
Smdn.Net.Imap4.Clientでは、IMAP4rev1の基本仕様である&urn2url(urn:ietf:rfc:3501,short);で定められているすべての機能のほかに、&urn2url(urn:ietf:rfc:2177){IDLE};, &urn2url(urn:ietf:rfc:2087){QUOTA};, &urn2url(urn:ietf:rfc:6154){SPECIAL-USE};, &urn2url(urn:ietf:rfc:5256){SORT};, &urn2url(urn:ietf:rfc:6851){MOVE};など、いくつかの拡張機能も実装しています。 これらの機能は必須の機能ではないため、サーバーによって実装している場合とそうでない場合があります。 IDLEやMOVEなどは、サポートされていなければ基本コマンドを使って動作のエミュレーションを行います。 一方、SPECIAL-USEやSORTなどエミュレーションを行うことが出来ない機能については、その機能を使用しようとした場合にはImapIncapableExceptionをスローします。
+

          
+
サーバーがある機能をサポートしているかを調べるには、[[ImapClient.ServerCapabilityプロパティ>#operation_reference_misc_serverinfo]]を参照します。
+

          
+
#tabpage(codelang=cs,container-title=サーバーがサポートしている機能を調べる例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  // サーバーが各機能をサポートしているか調べる
+
  Console.WriteLine("IDLE: {0}", client.ServerCapabilities.Contains(ImapCapability.Idle));
+
  Console.WriteLine("SORT: {0}", client.ServerCapabilities.Contains(ImapCapability.Sort));
+
  Console.WriteLine("MOVE: {0}", client.ServerCapabilities.Contains(ImapCapability.Move));
+
  Console.WriteLine("SPECIAL-USE: {0}", client.ServerCapabilities.Contains(ImapCapability.SpecialUse));
+
  Console.WriteLine("QUOTA: {0}", client.ServerCapabilities.Contains(ImapCapability.Quota));
+

          
+
  // サポートしている場合はSPECIAL-USEを使い、そうでない場合は標準機能を使って
+
  // 「ごみ箱」のメールボックスを取得する
+
  ImapMailboxInfo trash;
+

          
+
  if (client.ServerCapabilities.Contains(ImapCapability.SpecialUse))
+
    trash = client.GetMailbox(ImapSpecialMailbox.Trash);
+
  else
+
    trash = client.GetMailbox("Trash");
+
}
+
}}
+
#tabpage-end
+

          
+
また、サーバーがある機能を実装している場合でも、不具合があるなど何らかの理由でその機能を使用しないようにしたい場合は、[[ImapClient.DisabledCapabilityプロパティ>#operation_reference_misc_serverinfo]]のコレクションにその機能を追加します。 例えば、IDLEをサポートしていたとしてもIDLEを使わないようにしたい場合は次のようにします。
+

          
+
#tabpage(codelang=cs,container-title=サーバーがサポートしている機能を無効化する例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  // サーバーがIDLEをサポートしている場合でも、IDLEの機能を
+
  // 無効化して使用しないようにする
+
  client.DisabledCapabilities.Add(ImapCapability.Idle);
+

          
+
  using (var inbox = client.OpenInbox()) {
+
    // 5分間待機する
+
    // (IDLEコマンドは使われず、NOOPコマンドによるポーリングが行われる)
+
    inbox.Idle(TimeSpan.FromMinutes(5));
+
  }
+
}
+
}}
+
#tabpage-end
 

        

        
+
拡張機能を使用するメソッド、拡張機能が使用できない場合の動作等については[[#operation_reference_extension_specs]]を参照してください。
 

        

        
-
//TODO
-
//****INBOXの削除・移動
-
//****BODYSTRUCTURE
 

        

        
 

        

        
 
**機能別リファレンス [#operation_reference]
**機能別リファレンス [#operation_reference]
~
以下はSmdn.Net.Imap4.Client名前空間の各クラスの機能別の簡易リファレンスです。 IMAP拡張機能を使用しているメソッド・プロパティについては、[[#operation_reference_extension_specs]]にまとめているので適宜参照してください。
以下はSmdn.Net.Imap4.Client名前空間の各クラスの機能別の簡易リファレンスです。
 

        

        
 
***メールボックスに対する操作 [#operation_reference_mailbox]
***メールボックスに対する操作 [#operation_reference_mailbox]
 
****メールボックスの取得と作成 [#operation_reference_mailbox_getcreate]
****メールボックスの取得と作成 [#operation_reference_mailbox_getcreate]
 
以下はメールボックスの取得と作成に関するメソッドです。
以下はメールボックスの取得と作成に関するメソッドです。
 

        

        
~
|*メールボックスの取得と作成に関するメソッド
|*ImapClientクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapClient|GetInbox()&br;GetInbox(ImapMailboxListOptions)|INBOXを取得します。|LIST/LSUB|
|GetInbox()&br;GetInbox(ImapMailboxListOptions)|INBOXを取得します。|LIST/LSUB|
~
|~|GetMailbox(string)&br;GetMailbox(string, ImapMailboxListOptions)|指定した名前のメールボックスを取得します。|LIST/LSUB|
|GetMailbox(string)&br;GetMailbox(string, ImapMailboxListOptions)|指定した名前のメールボックスを取得します。|LIST/LSUB|
~
|~|GetMailbox(ImapSpecialMailbox)&br;GetMailbox(ImapSpecialMailbox, ImapMailboxListOptions)|ImapSpecialMailboxで指定した種類のメールボックスを取得します。|LIST/LSUB|
|GetMailboxes()&br;GetMailboxes(ImapMailboxListOptions)|すべてのメールボックスを取得します。|LIST/LSUB|
~
|~|GetMailboxes()&br;GetMailboxes(ImapMailboxListOptions)|すべてのメールボックスを取得します。|LIST/LSUB|
|GetOrCreateMailbox(string)&br;GetOrCreateMailbox(string, ImapMailboxListOptions)&br;GetOrCreateMailbox(string, bool)&br;GetOrCreateMailbox(string, bool, ImapMailboxListOptions)|指定した名前のメールボックスを取得します。 存在しない場合は作成します。 オプションで、メールボックスを作成した場合に購読するかどうか指定できます。|LIST/LSUB, CREATE, SUBSCRIBE|
~
|~|GetOrCreateMailbox(string)&br;GetOrCreateMailbox(string, ImapMailboxListOptions)&br;GetOrCreateMailbox(string, bool)&br;GetOrCreateMailbox(string, bool, ImapMailboxListOptions)|指定した名前のメールボックスを取得します。 存在しない場合は作成します。 オプションで、メールボックスを作成した場合に購読するかどうか指定できます。|LIST/LSUB, CREATE, SUBSCRIBE|
|CreateMailbox(string)&br;CreateMailbox(string, bool)|指定した名前のメールボックスを作成します。|CREATE, SUBSCRIBE|
~
|~|CreateMailbox(string)&br;CreateMailbox(string, bool)|指定した名前のメールボックスを作成します。|CREATE, SUBSCRIBE|
|~メソッド|~解説|~対応するIMAPコマンド|f
~
|~ImapMailboxInfo|GetMailboxes()&br;GetMailboxes(ImapMailboxListOptions)|現在のメールボックスの下位にあるすべてのメールボックスを取得します。|LIST/LSUB|

          
~
|~|GetChild(string)&br;GetChild(string, ImapMailboxListOptions)|現在のメールボックスの下位にある指定した名前のメールボックスを取得します。|LIST/LSUB|
|*ImapMailboxInfoクラスのメソッド
~
|~|GetParent()&br;GetParent(ImapMailboxListOptions)|現在のメールボックスの上位のメールボックスを取得します。|LIST/LSUB|
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~|GetOrCreateParent()&br;GetOrCreateParent(ImapMailboxListOptions)&br;GetOrCreateParent(bool)&br;GetOrCreateParent(bool, ImapMailboxListOptions)|現在のメールボックスの上位のメールボックスを取得します。 存在しない場合は作成します。|LIST/LSUB, CREATE, SUBSCRIBE|
|GetMailboxes()&br;GetMailboxes(ImapMailboxListOptions)|現在のメールボックスの下位にあるすべてのメールボックスを取得します。|LIST/LSUB|
~
|~|GetOrCreateChild(string)&br;GetOrCreateChild(string, ImapMailboxListOptions)&br;GetOrCreateChild(string, bool)&br;GetOrCreateChild(string, bool, ImapMailboxListOptions)|現在のメールボックスの下位にある指定した名前のメールボックスを取得します。 存在しない場合は作成します。 オプションで、メールボックスを作成した場合に購読するかどうか指定できます。|LIST/LSUB, CREATE, SUBSCRIBE|
|GetParent()&br;GetParent(ImapMailboxListOptions)|現在のメールボックスの上位のメールボックスを取得します。|LIST/LSUB|
~
|~|CreateChild(string)&br;CreateChild(string, bool)|現在のメールボックスの下位に指定した名前でメールボックスを作成します。|CREATE, SUBSCRIBE|
|GetOrCreateParent()&br;GetOrCreateParent(ImapMailboxListOptions)&br;GetOrCreateParent(bool)&br;GetOrCreateParent(bool, ImapMailboxListOptions)|現在のメールボックスの上位のメールボックスを取得します。 存在しない場合は作成します。|LIST/LSUB, CREATE, SUBSCRIBE|
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|GetOrCreateChild(string)&br;GetOrCreateChild(string, ImapMailboxListOptions)&br;GetOrCreateChild(string, bool)&br;GetOrCreateChild(string, bool, ImapMailboxListOptions)|現在のメールボックスの下位にある指定した名前のメールボックスを取得します。 存在しない場合は作成します。 オプションで、メールボックスを作成した場合に購読するかどうか指定できます。|LIST/LSUB, CREATE, SUBSCRIBE|
-
|CreateChild(string)&br;CreateChild(string, bool)|現在のメールボックスの下位に指定した名前でメールボックスを作成します。|CREATE, SUBSCRIBE|
-
|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
 
:すべてのメソッド|これらのメソッドは、メールボックスを表すImapMailboxInfoクラスのインスタンス、もしくはIEnumerable<ImapMailboxInfo>を返します。
:すべてのメソッド|これらのメソッドは、メールボックスを表すImapMailboxInfoクラスのインスタンス、もしくはIEnumerable<ImapMailboxInfo>を返します。
 
:ImapClient.GetMailboxes(), ImapMailboxInfo.GetMailboxes()|これらのメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
:ImapClient.GetMailboxes(), ImapMailboxInfo.GetMailboxes()|これらのメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
+
:ImapMailboxInfo.GetParent(), GetOrCreateParent()|最上位のメールボックスに対して呼び出した場合、例外ImapProtocolViolationExceptionをスローします。
+
:ImapMailboxInfo.GetChild(), GetOrCreateChild(), CreateChild()|下位に階層を作成できないメールボックス(CanHaveChildプロパティがfalse)の場合、ImapProtocolViolationExceptionをスローします。
 
:メールボックスの取得オプション(ImapMailboxListOptions)|これらのメソッドには、ImapMailboxListOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMailboxListOptionsを指定することで、メールボックスの取得時の動作を変更することができます。 以下の値を組み合わせて指定できます。
:メールボックスの取得オプション(ImapMailboxListOptions)|これらのメソッドには、ImapMailboxListOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMailboxListOptionsを指定することで、メールボックスの取得時の動作を変更することができます。 以下の値を組み合わせて指定できます。
 
::SubscribedOnly|存在するメールボックスのうち、購読中のメールボックスのみを取得します。 このオプションを指定しない場合は、購読中かどうかを区別せずに取得します。
::SubscribedOnly|存在するメールボックスのうち、購読中のメールボックスのみを取得します。 このオプションを指定しない場合は、購読中かどうかを区別せずに取得します。
 
::TopLevelOnly|存在するメールボックスのうち、直下の階層にあるメールボックスのみを取得します。 このオプションを指定しない場合は、すべての階層にあるメールボックスを取得します。
::TopLevelOnly|存在するメールボックスのうち、直下の階層にあるメールボックスのみを取得します。 このオプションを指定しない場合は、すべての階層にあるメールボックスを取得します。
 
::Remote|存在するメールボックスのうち、リモートサーバ上にあるメールボックスのみを取得します。 このオプションを指定しない場合は、リモートサーバ上のメールボックスかどうか区別せずに取得します。 サーバがMAILBOX REFERRALSに対応している場合のみ有効です。
::Remote|存在するメールボックスのうち、リモートサーバ上にあるメールボックスのみを取得します。 このオプションを指定しない場合は、リモートサーバ上のメールボックスかどうか区別せずに取得します。 サーバがMAILBOX REFERRALSに対応している場合のみ有効です。
 
::RequestStatus|メールボックスの取得と同時に、メールボックスのメッセージ数などのステータスも取得します。 このオプションを指定しない場合は、ステータスは取得しません。
::RequestStatus|メールボックスの取得と同時に、メールボックスのメッセージ数などのステータスも取得します。 このオプションを指定しない場合は、ステータスは取得しません。
 
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
+
:ImapSpecialMailboxを引数にとるメソッド|サーバが&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};をサポートしていない場合は、ImapIncapableExceptionをスローします。
+

          
+
****メールボックス名の結合・分割 [#operation_reference_mailbox_name]
+
以下はメールボックスの結合・分割に関するメソッドです。
+

          
+
|*メールボックスの結合・分割に関するメソッド
+
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
+
|~ImapClient|CombineMailboxName(string)&br;CombineMailboxName(string, string)&br;CombineMailboxName(string, string, string, ...)&br;CombineMailboxName(IEnumerable<string>)&br;CombineMailboxName(string[])|分割されているメールボックス名を結合します。 結合に際して、階層区切り文字をサーバーに問い合わせます。|LIST|
+
|~ImapMailboxInfo|GetFullNameOf(string)&br;GetFullNameOf(string, string)&br;GetFullNameOf(string, string, string, ...)&br;GetFullNameOf(IEnumerable<string>)&br;GetFullNameOf(string[])|インスタンスのメールボックス名と指定されたメールボックス名を結合します。 結合に際して、MailboxSeparatorプロパティの値を階層区切り文字として使用します。|-|
+
|~|SplitMailboxHierarchy(string)|階層化されているメールボックス名を階層ごとに分割して配列として返します。 分割に際して、MailboxSeparatorプロパティの値を階層区切り文字として使用します。|-|
+
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
+

          
+
:ImapClient.CombineMailboxNameメソッドの動作と結果|``{"INBOX", "Archive", "Sent"}``を結合する場合、まず最上位のメールボックス``INBOX``で使用される階層区切り文字の問い合わせを行います。 ``INBOX``の階層区切り文字が``"/"``の場合、``CombineMailboxName("INBOX", "Archive", "Sent")``は``"INBOX/Archive/Sent"``を返します。
+
:ImapMailboxInfo.GetFullNameOfメソッドの動作と結果|FullNameプロパティが``"INBOX/Archive"``で、MailboxSeparatorプロパティが``"/"``の場合、``GetFullNameOf("Sent", "2014")``は``"INBOX/Archive/Sent/2014"``を返します。
+
:ImapMailboxInfo.SplitMailboxHierarchyメソッドの動作と結果|MailboxSeparatorプロパティが``"/"``の場合、``SplitMailboxHierarchy("INBOX/Archive/Sent")``は配列``{"INBOX", "Archive", "Sent"}``を返します。
+
:メールボックスが階層を持てない場合|下位に階層を作成できないメールボックス(CanHaveChildプロパティがfalse)の場合、GetFullNameOf()メソッドおよびSplitMailboxHierarchy()メソッドはImapProtocolViolationExceptionをスローします。
 

        

        
 
****メールボックスの操作 [#operation_reference_mailbox_control]
****メールボックスの操作 [#operation_reference_mailbox_control]
 
以下はメールボックスの削除・作成・リネーム等の操作に関するメソッドです。
以下はメールボックスの削除・作成・リネーム等の操作に関するメソッドです。
 

        

        
~
|*メールボックスの削除・作成・リネーム等の操作に関するメソッド
|*ImapMailboxInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapMailboxInfo|Refresh()&br;Refresh(bool)|メールボックスのステータスを更新します。 オプションでメールボックスの属性を表すフラグも再取得して更新するかどうかを指定できます。|STATUS, LIST|
|Refresh()|メールボックスのステータスを更新します。|STATUS|
~
|~|Delete()&br;Delete(bool)|メールボックスが存在する場合、削除します。 オプションで購読解除するかどうか指定できます。|DELETE, UNSUBSCRIBE|
|Delete()&br;Delete(bool)|メールボックスが存在する場合、削除します。 オプションで購読解除するかどうか指定できます。|DELETE, UNSUBSCRIBE|
~
|~|Create()&br;Create(bool)|メールボックスが存在しない場合、作成します。 オプションで購読するかどうか指定できます。|CREATE, SUBSCRIBE|
|Create()&br;Create(bool)|メールボックスが存在しない場合、作成します。 オプションで購読するかどうか指定できます。|CREATE, SUBSCRIBE|
~
|~|MoveTo(ImapMailboxInfo)&br;MoveTo(ImapMailboxInfo, bool)|メールボックスを指定したメールボックスの下位に移動します。|RENAME, SUBSCRIBE, UNSUBSCRIBE|
|MoveTo(ImapMailboxInfo)&br;MoveTo(ImapMailboxInfo, bool)|メールボックスを指定したメールボックスの下位に移動します。|RENAME, SUBSCRIBE, UNSUBSCRIBE|
~
|~|MoveTo(string)&br;MoveTo(string, bool)|メールボックスを指定した名前に変更します。|RENAME, SUBSCRIBE, UNSUBSCRIBE|
|MoveTo(string)&br;MoveTo(string, bool)|メールボックスを指定した名前に変更します。|RENAME, SUBSCRIBE, UNSUBSCRIBE|
~
|~|Subscribe()&br;Subscribe(bool)|メールボックスを購読します。 オプションで、下位にあるすべてのメールボックスも購読するかどうか指定できます。|SUBSCRIBE, LIST/LSUB|
|Subscribe()&br;Subscribe(bool)|メールボックスを購読します。 オプションで、下位にあるすべてのメールボックスも購読するかどうか指定できます。|SUBSCRIBE, LIST/LSUB|
~
|~|Unsubscribe()&br;Unsubscribe(bool)|メールボックスを購読解除します。 オプションで、下位にあるすべてのメールボックスも購読解除するかどうか指定できます。|UNSUBSCRIBE, LIST/LSUB|
|Unsubscribe()&br;Unsubscribe(bool)|メールボックスを購読解除します。 オプションで、下位にあるすべてのメールボックスも購読解除するかどうか指定できます。|UNSUBSCRIBE, LIST/LSUB|
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|~メソッド|~解説|~対応するIMAPコマンド|f
~

          

          
~
:移動先のメールボックス|移動先のメールボックスをImapMailboxInfoで指定する場合、ImapMailboxInfoが異なるクライアントから取得したものだった場合はNotSupportedExceptionをスローします。 アカウントもしくはサーバをまたがるメールボックスの移動は[[ImapClient.MoveMailbox()>#operation_reference_mailbox_accrosssession]]を使用してください。
:移動先のメールボックス|移動先のメールボックスをImapMailboxInfoで指定する場合、ImapMailboxInfoが異なるクライアントから取得したものだった場合はNotImplementedExceptionをスローします。 アカウントもしくはサーバをまたがるメールボックスの移動は今後のバージョンで実装予定です。
+
:メールボックスの削除|Delete()メソッドでは、''メールボックス内にメールが存在するかどうかに関わらず''メールボックスを削除します。 削除したメールボックス内のメールは復元できないため注意してください。 「ごみ箱に入れる」の動作を実装する場合は、MoveTo()メソッドでメールボックスを移動するようにします。
+
:INBOXの削除|プロトコル上``INBOX``を削除することは出来ません。 Delete()メソッドで``INBOX``を削除しようとした場合にはImapProtocolViolationExceptionをスローします。
+
:INBOXの移動|MoveTo()メソッドで``INBOX``を移動しようとした場合にはImapProtocolViolationExceptionをスローします。
+

          
+
****アカウント・サーバーをまたがるメールボックスの移動・コピー [#operation_reference_mailbox_accrosssession]
+
以下はアカウントもしくはサーバーをまたがった(異なるクライアント間での)メールボックスの移動・コピーを行うメソッドです。
+

          
+
|*異なるクライアント間でのメールボックスの移動・コピーを行うメソッド
+
|~クラス|~メソッド|~解説|h
+
|~ImapClient|{{
+
MoveMailbox(ImapMailboxInfo, ImapClient, string)
+
MoveMailbox(ImapMailboxInfo, ImapClient, string, bool)
+
MoveMailbox(ImapMailboxInfo, ImapClient, string, bool, bool)
+
CopyMailbox(ImapMailboxInfo, ImapClient, string)
+
CopyMailbox(ImapMailboxInfo, ImapClient, string, bool)
+
CopyMailbox(ImapMailboxInfo, ImapClient, string, bool, bool)
+

          
+
(いずれも静的メソッド)
+
}}|指定されたメールボックスを、別のクライアントが接続しているアカウントへ移動またはコピーします。 移動・コピー先は指定したメールボックス名を使用します。 オプションで移動・コピー先のメールボックスを購読するかどうか、再帰的に移動・コピーするかどうかを指定することができます。 戻り値として移動・コピー先となったメールボックスのImapMailboxInfoが返されます。|
+
|~|{{
+
MoveMailbox(ImapMailboxInfo, ImapMailboxInfo)
+
MoveMailbox(ImapMailboxInfo, ImapMailboxInfo, bool)
+
MoveMailbox(ImapMailboxInfo, ImapMailboxInfo, bool, bool)
+
CopyMailbox(ImapMailboxInfo, ImapMailboxInfo)
+
CopyMailbox(ImapMailboxInfo, ImapMailboxInfo, bool)
+
CopyMailbox(ImapMailboxInfo, ImapMailboxInfo, bool, bool)
+

          
+
(いずれも静的メソッド)
+
}}|指定されたメールボックスを、別のメールボックスの''下位に''移動またはコピーします。 オプションで移動・コピー先のメールボックスを購読するか、再帰的に移動・コピーするかどうかを指定することができます。|
+

          
+
:同一のクライアント間での移動・コピー|これらのメソッドは異なるクライアント間だけでなく、同一のクライアント間での移動・コピーもサポートしています。
+
:現在開かれているメールボックス|これらのメソッド内では、移動・コピーに際して内部的にメールボックスを開いたり閉じたりします。 そのため、このメソッドを呼び出しの前後では、コピー元・コピー先で開かれているメールボックスは暗黙的に閉じられます。 進行中の処理がある場合は、先にメールボックスを閉じるようにしてください。
+
:既に移動・コピー先が存在する場合|既に移動・コピー先のメールボックスが存在する場合は、その内容は上書きされずマージされます。 上書きしたい場合は、先に移動・コピー先のメールボックスを削除してください。
 

        

        
 
****メールボックスの状態の取得 [#operation_reference_mailbox_status]
****メールボックスの状態の取得 [#operation_reference_mailbox_status]
 
以下はメールボックスの状態を表すプロパティです。
以下はメールボックスの状態を表すプロパティです。
 

        

        
~
|*メールボックスの状態を表すプロパティ
|*ImapMailboxInfoクラスのプロパティ
~
|~クラス|~プロパティ|~解説|h
|~プロパティ|~解説|h
~
|~ImapMailboxInfo|FullName|階層を含むメールボックスの完全な名前を返します。|
|FullName|階層を含むメールボックスの完全な名前を返します。|
~
|~|Name|階層を含まないメールボックスの名前を返します。|
|Name|階層を含まないメールボックスの名前を返します。|
~
|~|ParentMailboxName|上位のメールボックスを返します。 インスタンスが最上位のメールボックスを表す場合、空の文字列を返します。|
|ParentMailboxName|上位のメールボックスを返します。 インスタンスが最上位のメールボックスを表す場合、空の文字列を返します。|
~
|~|MailboxSeparator|メールボックスの階層区切り文字を返します。 メールボックスが階層構造を持たない場合、空の文字列を返します。|
|MailboxSeparator|メールボックスの階層区切り文字を返します。 メールボックスが階層構造を持たない場合、空の文字列を返します。|
~
|~|Url|メールボックスを表すIMAP URLを返します。|
|Url|メールボックスを表すIMAP URLを返します。|
~
|~|Exists|メールボックスが存在するかどうかを表す値を返します。|
|Exists|メールボックスが存在するかどうかを表す値を返します。|
~
|~|Flags|メールボックスの属性を表すフラグを返します。|
|Flags|メールボックスの属性を表すフラグを返します。|
~
|~|IsUnselectable|メールボックスが選択不可とされているかどうかを表す値を返します。 値がtrueの場合、Open()などのメソッドでメールボックスを選択することはできません。 値がfalseの場合でも、選択できないか選択に失敗する可能性があります。|
|IsUnselectable|メールボックスが選択不可とされているかどうかを表す値を返します。 値がtrueの場合、Open()などのメソッドでメールボックスを選択することはできません。 値がfalseの場合でも、選択できないか選択に失敗する可能性があります。|
~
|~|IsOpen|メールボックスが現在開かれているかどうかを表す値を返します。 ImapMailboxInfo.FullNameとImapClient.OpenedMailbox.FullNameが同名であれば、trueとなります。|
|IsOpen|メールボックスが現在開かれているかどうかを表す値を返します。 ImapMailboxInfo.FullNameとImapClient.OpenedMailbox.FullNameが同名であれば、trueとなります。|
~
|~|IsInbox|メールボックスがINBOXであるかどうかを表す値を返します。|
|IsInbox|メールボックスがINBOXであるかどうかを表す値を返します。|
~
|~|CanHaveChild|下位のメールボックスを作成できるか(メールボックスが階層構造を持つことができるか)どうかを表す値を返します。 値がfalseの場合、CreateChild()などのメソッドで下位のメールボックスを作成することはできません。|
|CanHaveChild|下位のメールボックスを作成できるか(メールボックスが階層構造を持つことができるか)どうかを表す値を返します。 値がfalseの場合、CreateChild()などのメソッドで下位のメールボックスを作成することはできません。|
~
|~|UnseenMessageCount|メールボックスにある未読のメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
|UnseenMessageCount|メールボックスにある未読のメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
~
|~|ExistMessageCount|メールボックスに存在するすべてのメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
|ExistMessageCount|メールボックスに存在するすべてのメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
~
|~|RecentMessageCount|メールボックスにある新着のメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
|RecentMessageCount|メールボックスにある新着のメッセージ数を返します。 ステータスを取得していない場合、0を返します。|
~
|~|UidValidity|メールボックスのUIDVALIDITY値を返します。 UIDが永続的でない場合などは、0を返します。|
|UidValidity|メールボックスのUIDVALIDITY値を返します。 UIDが永続的でない場合などは、0を返します。|
~
|~|NextUid|メールボックスの次のメッセージに付与されるUIDを返します。 UIDが永続的でない場合などは、0を返します。|
|NextUid|メールボックスの次のメッセージに付与されるUIDを返します。 UIDが永続的でない場合などは、0を返します。|
~
|~クラス|~プロパティ|~解説|f
|~プロパティ|~解説|f
 

        

        
 
****メールボックスの選択 [#operation_reference_mailbox_select]
****メールボックスの選択 [#operation_reference_mailbox_select]
 
以下はメールボックスの選択に関するメソッドです。 メールボックス内のメッセージに対する操作は、現在選択しているメールボックスのものに対してのみ行えます。
以下はメールボックスの選択に関するメソッドです。 メールボックス内のメッセージに対する操作は、現在選択しているメールボックスのものに対してのみ行えます。
 

        

        
~
|*メールボックスの選択に関するメソッド
|*ImapClientクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapClient|{{
|{{
 
OpenInbox()
OpenInbox()
 
OpenInbox(bool)
OpenInbox(bool)
 
}}|INBOXを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
}}|INBOXを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
~
|~|{{
|{{
 
OpenMailbox(ImapMailboxInfo)
OpenMailbox(ImapMailboxInfo)
 
OpenMailbox(ImapMailboxInfo, bool)
OpenMailbox(ImapMailboxInfo, bool)
 
}}|指定したインスタンスが表すメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。&br;別のクライアントから取得したImapMailboxInfoを指定した場合は、ArgumentExceptionをスローします。|SELECT/EXAMINE|
}}|指定したインスタンスが表すメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。&br;別のクライアントから取得したImapMailboxInfoを指定した場合は、ArgumentExceptionをスローします。|SELECT/EXAMINE|
~
|~|{{
|{{
 
OpenMailbox(string)
OpenMailbox(string)
 
OpenMailbox(string, bool)
OpenMailbox(string, bool)
 
OpenMailbox(string, ImapMailboxListOptions)
OpenMailbox(string, ImapMailboxListOptions)
 
OpenMailbox(string, ImapMailboxListOptions, bool)
OpenMailbox(string, ImapMailboxListOptions, bool)
 
}}|指定した名前のメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
}}|指定した名前のメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
~
|~|{{
|{{
+
OpenMailbox(ImapSpecialMailbox)
+
OpenMailbox(ImapSpecialMailbox, bool)
+
OpenMailbox(ImapSpecialMailbox, ImapMailboxListOptions)
+
OpenMailbox(ImapSpecialMailbox, ImapMailboxListOptions, bool)
+
}}|ImapSpecialMailboxで指定した種類のメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
+
|~|{{
 
OpenOrCreateMailbox(string)
OpenOrCreateMailbox(string)
 
OpenOrCreateMailbox(string, bool)
OpenOrCreateMailbox(string, bool)
 
OpenOrCreateMailbox(string, ImapMailboxListOptions)
OpenOrCreateMailbox(string, ImapMailboxListOptions)
 
OpenOrCreateMailbox(string, bool, bool, ImapMailboxListOptions)
OpenOrCreateMailbox(string, bool, bool, ImapMailboxListOptions)
 
}}|指定した名前のメールボックスを開きます。 存在しない場合は作成してから開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE, CREATE, SUBSCRIBE|
}}|指定した名前のメールボックスを開きます。 存在しない場合は作成してから開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE, CREATE, SUBSCRIBE|
~
|~ImapMailboxInfo|Open()&br;Open(bool)|インスタンスが表すメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|

          
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|*ImapMailboxInfoクラスのメソッド
-
|~メソッド|~解説|~対応するIMAPコマンド|h
-
|Open()&br;Open(bool)|インスタンスが表すメールボックスを開きます。 オプションで読み取り専用で開くかどうかを指定できます。|SELECT/EXAMINE|
-
|~メソッド|~解説|~対応するIMAPコマンド|f
-

          
-
|*ImapClientクラスのプロパティ
-
|~プロパティ|~解説|h
-
|OpenedMailbox|現在開いているメールボックスのインスタンスを取得します。 開いていない場合はnullを返します。|
 

        

        
 
:すべてのメソッド|これらのメソッドは、選択済みメールボックスを表すImapOpenedMailboxInfoクラスのインスタンスを返します。
:すべてのメソッド|これらのメソッドは、選択済みメールボックスを表すImapOpenedMailboxInfoクラスのインスタンスを返します。
+
:ImapSpecialMailboxを引数にとるメソッド|サーバが&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};をサポートしていない場合は、ImapIncapableExceptionをスローします。
+

          
+
|*メールボックスの選択に関するプロパティ
+
|~クラス|~プロパティ|~解説|h
+
|~ImapClient|OpenedMailbox|現在開いているメールボックスのインスタンス(ImapOpenedMailboxInfo)を取得します。 開いていない場合はnullを返します。|
 

        

        
 
***選択済みメールボックスに対する操作 [#operation_reference_selectedmailbox]
***選択済みメールボックスに対する操作 [#operation_reference_selectedmailbox]
 
****選択済みメールボックスの操作 [#operation_reference_selectedmailbox_control]
****選択済みメールボックスの操作 [#operation_reference_selectedmailbox_control]
 
以下は選択済みメールボックスの操作に関するメソッドです。
以下は選択済みメールボックスの操作に関するメソッドです。
 

        

        
~
|*選択済みメールボックスの操作に関するメソッド
|*ImapOpenedMailboxInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapOpenedMailboxInfo|Refresh()|メールボックスの状態を更新します。 サーバからメールボックスの状態に関する通知があった場合はイベントを発生させます。|NOOP|
|Refresh()|メールボックスの状態を更新します。 サーバからメールボックスの状態に関する通知があった場合はイベントを発生させます。|NOOP|
~
|~|Expunge()|メールボックスにある削除フラグが設定されているメッセージをすべて削除します。|EXPUNGE|
|Expunge()|メールボックスにある削除フラグが設定されているメッセージをすべて削除します。|EXPUNGE|
~
|~|Close()&br;IDisposable.Dispose()|メールボックスを閉じます。|CLOSE|
|Close()&br;IDisposable.Dispose()|メールボックスを閉じます。|CLOSE|
~
|~ImapClient|CloseMailbox()|選択済みのメールボックスがある場合、メールボックスを閉じます。 ない場合は何もしません。|CLOSE|
|~メソッド|~解説|~対応するIMAPコマンド|f
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f

          
-
|*ImapClientクラスのメソッド
-
|~メソッド|~解説|~対応するIMAPコマンド|h
-
|CloseMailbox()|選択済みのメールボックスがある場合、メールボックスを閉じます。 ない場合は何もしません。|CLOSE|
-
|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
 
****選択済みメールボックスの状態 [#operation_reference_selectedmailbox_status]
****選択済みメールボックスの状態 [#operation_reference_selectedmailbox_status]
 
以下は選択済みメールボックスの状態を表すプロパティです。
以下は選択済みメールボックスの状態を表すプロパティです。
 

        

        
~
|*選択済みメールボックスの状態を表すプロパティ
|*ImapOpenedMailboxInfoクラスのプロパティ
~
|~クラス|~プロパティ|~解説|h
|~プロパティ|~解説|h
~
|~ImapOpenedMailboxInfo|IsOpen|メールボックスが現在開かれているかどうかを表す値を返します。 インスタンスがImapClient.OpenedMailboxと同一であれば、trueとなります。|
|IsOpen|メールボックスが現在開かれているかどうかを表す値を返します。 インスタンスがImapClient.OpenedMailboxと同一であれば、trueとなります。|
~
|~|IsReadOnly|メールボックスを読み取り専用で選択したかどうかを表す値を返します。|
|IsReadOnly|メールボックスを読み取り専用で選択したかどうかを表す値を返します。|
~
|~|IsUidPersistent|メールボックス内の各メッセージに割り当てられているUIDが永続的かどうかを表す値を返します。|
|IsUidPersistent|メールボックス内の各メッセージに割り当てられているUIDが永続的かどうかを表す値を返します。|
~
|~|IsAllowedToCreateKeywords|メールボックス内の各メッセージに、ユーザ定義のキーワードを設定できるかどうかを表す値を返します。|
|IsAllowedToCreateKeywords|メールボックス内の各メッセージに、ユーザ定義のキーワードを設定できるかどうかを表す値を返します。|
~
|~|ApplicableFlags|メールボックス内の各メッセージに設定できるフラグ・キーワードの一覧を返します。|
|ApplicableFlags|メールボックス内の各メッセージに設定できるフラグ・キーワードの一覧を返します。|
~
|~|PermanentFlags|メールボックス内で永続的に保持されるフラグ・キーワードの一覧を返します。|
|PermanentFlags|メールボックス内で永続的に保持されるフラグ・キーワードの一覧を返します。|
~
|~|FirstUnseenMessageNumber|メールボックスを選択した時点で最初の未読メッセージの通番を返します。 未読メッセージがない場合は0を返します。|
|FirstUnseenMessageNumber|メールボックスを選択した時点で最初の未読メッセージの通番を返します。 未読メッセージがない場合は0を返します。|
~
|~クラス|~プロパティ|~解説|f
|~プロパティ|~解説|f
 

        

        
 
****メッセージの待機 (IDLE) [#operation_reference_selectedmailbox_idle]
****メッセージの待機 (IDLE) [#operation_reference_selectedmailbox_idle]
 
以下は選択済みメールボックスでのメッセージの待機、アイドルに関するメソッドです。
以下は選択済みメールボックスでのメッセージの待機、アイドルに関するメソッドです。
 

        

        
~
|*選択済みメールボックスでのメッセージの待機に関するメソッド
|*ImapOpenedMailboxInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapOpenedMailboxInfo|{{
|{{
 
Idle(int)
Idle(int)
 
Idle(int, int)
Idle(int, int)
 
Idle(TimeSpan)
Idle(TimeSpan)
1883,21 1451,21
 
}}|{{
}}|{{
 
アイドル状態に入り、接続状態を維持します。 このメソッドは処理をブロックします。 引数timeoutで指定した時間が経過すると、メソッド呼び出しが終了します。 タイムアウトにTimeout.Infinite(-1)を指定することはできません。
アイドル状態に入り、接続状態を維持します。 このメソッドは処理をブロックします。 引数timeoutで指定した時間が経過すると、メソッド呼び出しが終了します。 タイムアウトにTimeout.Infinite(-1)を指定することはできません。
 

        

        
~
オプションでNOOPの送信間隔を指定できます(サーバーがIDLEをサポートしていない場合のみ有効)。
オプションでNOOPの送信間隔を指定できます(IDLEをサポートしていない場合のみ有効)。
 
}}|NOOP/IDLE|
}}|NOOP/IDLE|
~
|~|{{
|{{
 
StartIdle()
StartIdle()
 
StartIdle(int)
StartIdle(int)
 
StartIdle(TimeSpan)
StartIdle(TimeSpan)
 
}}|{{
}}|{{
 
アイドル状態に入り、接続状態を維持します。 このメソッドは処理をブロックせず、すぐにメソッド呼び出しが終了します。 StopIdle()メソッドを呼び出すことでアイドル状態から復帰します。
アイドル状態に入り、接続状態を維持します。 このメソッドは処理をブロックせず、すぐにメソッド呼び出しが終了します。 StopIdle()メソッドを呼び出すことでアイドル状態から復帰します。
 

        

        
~
オプションでNOOPの送信間隔を指定できます(サーバーがIDLEをサポートしていない場合のみ有効)。
オプションでNOOPの送信間隔を指定できます(IDLEをサポートしていない場合のみ有効)。
 
}}|NOOP/IDLE|
}}|NOOP/IDLE|
~
|~|{{
|{{
 
StopIdle()
StopIdle()
 
}}|StartIdleで開始したアイドル状態から復帰します。|-|
}}|StartIdleで開始したアイドル状態から復帰します。|-|
~
|~|{{
|{{
 
WaitForMessageArrival(int)
WaitForMessageArrival(int)
 
WaitForMessageArrival(int, int)
WaitForMessageArrival(int, int)
 
WaitForMessageArrival(int, ImapMessageFetchAttributeOptions)
WaitForMessageArrival(int, ImapMessageFetchAttributeOptions)
1909,9 1477,9
 
}}|{{
}}|{{
 
アイドル状態に入り、接続状態を維持しつつ、新着メッセージの受信を待機します。 このメソッドは処理をブロックします。 新着メッセージを受信するか、引数timeoutで指定した時間が経過すると、メソッド呼び出しが終了します。 タイムアウトにTimeout.Infinite(-1)を指定することもできます。 新着メッセージの受信により待機を終了した場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。
アイドル状態に入り、接続状態を維持しつつ、新着メッセージの受信を待機します。 このメソッドは処理をブロックします。 新着メッセージを受信するか、引数timeoutで指定した時間が経過すると、メソッド呼び出しが終了します。 タイムアウトにTimeout.Infinite(-1)を指定することもできます。 新着メッセージの受信により待機を終了した場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。
 

        

        
~
オプションでNOOPの送信間隔を指定できます(サーバーがIDLEをサポートしていない場合のみ有効)。
オプションでNOOPの送信間隔を指定できます(IDLEをサポートしていない場合のみ有効)。
 
}}|NOOP/IDLE|
}}|NOOP/IDLE|
~
|~|{{
|{{
 
StartWaitForMessageArrival()
StartWaitForMessageArrival()
 
StartWaitForMessageArrival(ImapMessageFetchAttributeOptions)
StartWaitForMessageArrival(ImapMessageFetchAttributeOptions)
 
StartWaitForMessageArrival(int)
StartWaitForMessageArrival(int)
1921,9 1489,9
 
}}|{{
}}|{{
 
アイドル状態に入り、接続状態を維持しつつ、新着メッセージの受信を待機します。 このメソッドは処理をブロックせず、すぐにメソッド呼び出しが終了します。 StopWaitForMessageArrival()メソッドを呼び出すことでアイドル状態から復帰します。
アイドル状態に入り、接続状態を維持しつつ、新着メッセージの受信を待機します。 このメソッドは処理をブロックせず、すぐにメソッド呼び出しが終了します。 StopWaitForMessageArrival()メソッドを呼び出すことでアイドル状態から復帰します。
 

        

        
~
オプションでNOOPの送信間隔を指定できます(サーバーがIDLEをサポートしていない場合のみ有効)。
オプションでNOOPの送信間隔を指定できます(IDLEをサポートしていない場合のみ有効)。
 
}}|NOOP/IDLE|
}}|NOOP/IDLE|
~
|~|{{
|{{
 
StopWaitForMessageArrival()
StopWaitForMessageArrival()
 
}}|StartWaitForMessageArrivalで開始したアイドル状態から復帰します。 待機中に新着メッセージを受信していた場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。|-|
}}|StartWaitForMessageArrivalで開始したアイドル状態から復帰します。 待機中に新着メッセージを受信していた場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。|-|
 

        

        
1933,23 1501,24
 
また、待機中は受信したレスポンスに応じてImapClient.ExistMessageCountChangedなどのイベントが発生します。
また、待機中は受信したレスポンスに応じてImapClient.ExistMessageCountChangedなどのイベントが発生します。
 
そのため、これらのイベントハンドラで何らかの操作を行うようにしていると、例外がスローされてしまうため注意してください。
そのため、これらのイベントハンドラで何らかの操作を行うようにしていると、例外がスローされてしまうため注意してください。
 
:IDLE中のReceiveTimeout|サーバからのレスポンスを待機する都合上、IDLE中はReceiveTimeoutの値が``Timeout.Inifinite``(-1)に設定されます。 例えばStartIdle()メソッドでIDLEを開始した直後にReceiveTimeoutは``Timeout.Inifinite``に設定され、EndIdle()メソッドでIDLEを終了する際にReceiveTimeoutはIDLE前の値に戻ります。 なお、IDLE中にReceiveTimeoutの値を変更することはできず、変更しようとした場合には例外がスローされます。
:IDLE中のReceiveTimeout|サーバからのレスポンスを待機する都合上、IDLE中はReceiveTimeoutの値が``Timeout.Inifinite``(-1)に設定されます。 例えばStartIdle()メソッドでIDLEを開始した直後にReceiveTimeoutは``Timeout.Inifinite``に設定され、EndIdle()メソッドでIDLEを終了する際にReceiveTimeoutはIDLE前の値に戻ります。 なお、IDLE中にReceiveTimeoutの値を変更することはできず、変更しようとした場合には例外がスローされます。
+
:ImapClient.IsBusy|IDLE中はImapClient.IsBusyプロパティはtrueを返します。 サーバがIDLEをサポートしていない場合、NOOPでの待機を行う場合にはIsBusyプロパティはfalseとなります。
 

        

        
 
***メールボックス内のメッセージに対する操作 [#operation_reference_message]
***メールボックス内のメッセージに対する操作 [#operation_reference_message]
 
****メッセージの取得と検索 [#operation_reference_message_get]
****メッセージの取得と検索 [#operation_reference_message_get]
 
以下はメールボックスにあるメッセージの取得と検索に関するメソッドです。
以下はメールボックスにあるメッセージの取得と検索に関するメソッドです。
 

        

        
~
|*メールボックス内のメッセージの取得と検索に関するメソッド
|*ImapOpenedMailboxInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapOpenedMailboxInfo|GetMessages()&br;GetMessages(ImapMessageFetchAttributeOptions)|メールボックスにあるすべてのメッセージを取得します。|FETCH|
|GetMessages()&br;GetMessages(ImapMessageFetchAttributeOptions)|メールボックスにあるすべてのメッセージを取得します。|FETCH|
~
|~|GetMessages(long, params long[])&br;GetMessages(ImapMessageFetchAttributeOptions, long, params long[])|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを取得します。|FETCH|
|GetMessages(long, params long[])&br;GetMessages(ImapMessageFetchAttributeOptions, long, params long[])|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを取得します。|FETCH|
~
|~|GetMessageByUid(long)&br;GetMessageByUid(long, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージのうち、指定したUIDを持つ1つのメッセージを取得します。|FETCH|
|GetMessageByUid(long)&br;GetMessageByUid(long, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージのうち、指定したUIDを持つ1つのメッセージを取得します。|FETCH|
~
|~|GetMessageBySequence(long)&br;GetMessageBySequence(long, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージのうち、指定した通番を持つ1つのメッセージを取得します。|FETCH|
|GetMessageBySequence(long)&br;GetMessageBySequence(long, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージのうち、指定した通番を持つ1つのメッセージを取得します。|FETCH|
~
|~|GetMessages(ImapSearchCriteria)&br;GetMessages(ImapSearchCriteria, ImapMessageFetchAttributeOptions)&br;GetMessages(ImapSearchCriteria, Encoding)&br;GetMessages(ImapSearchCriteria, Encoding, ImapMessageFetchAttributeOptions)|指定した検索条件にマッチするメッセージを取得します。 オプションでエンコーディングを指定できます。|SEARCH|
|GetMessages(ImapSearchCriteria)&br;GetMessages(ImapSearchCriteria, ImapMessageFetchAttributeOptions)&br;GetMessages(ImapSearchCriteria, Encoding)&br;GetMessages(ImapSearchCriteria, Encoding, ImapMessageFetchAttributeOptions)|指定した検索条件にマッチするメッセージを取得します。 オプションでエンコーディングを指定できます。|SEARCH|
~
|~|GetSortedMessages(ImapSortCriteria, ImapSearchCriteria)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, ImapMessageFetchAttributeOptions)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, Encoding)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, Encoding, ImapMessageFetchAttributeOptions)|指定した検索条件にマッチするメッセージを、指定したソート条件でソート済みの状態で取得します。 オプションでエンコーディングを指定できます。&br;サーバがSORTコマンドをサポートしていない場合は、ImapIncapableExceptionをスローします。|SORT|
|GetSortedMessages(ImapSortCriteria, ImapSearchCriteria)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, ImapMessageFetchAttributeOptions)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, Encoding)&br;GetSortedMessages(ImapSortCriteria, ImapSearchCriteria, Encoding, ImapMessageFetchAttributeOptions)|指定した検索条件にマッチするメッセージを、指定したソート条件でソート済みの状態で取得します。 オプションでエンコーディングを指定できます。&br;サーバがSORTコマンドをサポートしていない場合は、失敗します。|SORT|
~
|~|GetMessagesGmailSearch(string)&br;GetMessagesGmailSearch(string, ImapMessageFetchAttributeOptions)|[[Gmail search syntax (Gmail詳細検索演算子):https://support.google.com/mail/answer/7190]]にマッチしたメッセージを取得します。 Gmailサーバー以外の場合(X-GM-RAWをサポートしていない場合)は、ImapIncapableExceptionをスローします。|SEARCH X-GM-RAW|
|~メソッド|~解説|~対応するIMAPコマンド|f
~
|~ImapMessageInfoList|GetEnumerator()|ImapMessageInfoListインスタンスに対して列挙操作を行うことにより、ImapMessageInfoインスタンスを取得できます。|FETCH|

          
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|*ImapMessageInfoListクラスのメソッド
-
|~メソッド|~解説|~対応するIMAPコマンド|h
-
|GetEnumerator()|ImapMessageInfoListインスタンスに対して列挙操作を行うことにより、ImapMessageInfoインスタンスを取得できます。|FETCH|
 

        

        
 
//-これらのメソッドは、接続してから切断するまでの間、同じ通番のメッセージに対しては常に同じPopMessageInfoインスタンスを返します。
//-これらのメソッドは、接続してから切断するまでの間、同じ通番のメッセージに対しては常に同じPopMessageInfoインスタンスを返します。
 
//-これらのメソッドが返すPopMessageInfoインスタンスは、現在の接続の間のみ有効です。 切断した後にインスタンスのメンバを参照しようとした場合、例外をスローします。 また再接続しても有効にはならないので、再接続後にメソッドを呼び出して新たにインスタンスを取得しなおしてください。
//-これらのメソッドが返すPopMessageInfoインスタンスは、現在の接続の間のみ有効です。 切断した後にインスタンスのメンバを参照しようとした場合、例外をスローします。 また再接続しても有効にはならないので、再接続後にメソッドを呼び出して新たにインスタンスを取得しなおしてください。
1957,45 1526,46
 
//-これらのメソッドを呼び出す際、該当するメッセージ存在しない場合はPopMessageNotFoundException、削除マークが付けられている場合はPopMessageDeletedExceptionをスローします。
//-これらのメソッドを呼び出す際、該当するメッセージ存在しない場合はPopMessageNotFoundException、削除マークが付けられている場合はPopMessageDeletedExceptionをスローします。
 
//-メールボックスにあるメッセージが0件の場合でも、PopClient.GetMessages()は例外をスローせず空のIEnumerable<PopMessageInfo>を返します。
//-メールボックスにあるメッセージが0件の場合でも、PopClient.GetMessages()は例外をスローせず空のIEnumerable<PopMessageInfo>を返します。
 

        

        
-
//:ImapClient.GetMailboxes(), ImapMailboxInfo.GetMailboxes()|これらのメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
 

        

        
 
:メッセージ属性の取得オプション(ImapMessageFetchAttributeOptions)|これらのメソッドには、ImapMessageFetchAttributeOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchAttributeOptionsを指定することで、メッセージ取得時に取得する属性を指定することができます。 以下の値を組み合わせて指定できます。
:メッセージ属性の取得オプション(ImapMessageFetchAttributeOptions)|これらのメソッドには、ImapMessageFetchAttributeOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchAttributeOptionsを指定することで、メッセージ取得時に取得する属性を指定することができます。 以下の値を組み合わせて指定できます。
 
::StaticAttributes|メッセージに設定される静的な属性のみを取得します。
::StaticAttributes|メッセージに設定される静的な属性のみを取得します。
 
::DynamicAttributes|メッセージに設定される動的な属性のみを取得します。
::DynamicAttributes|メッセージに設定される動的な属性のみを取得します。
 
::AllAttributes|メッセージに設定されるすべての属性を取得します。 StaticAttributesとDynamicAttributesの組み合わせと同値です。
::AllAttributes|メッセージに設定されるすべての属性を取得します。 StaticAttributesとDynamicAttributesの組み合わせと同値です。
 
::Default, None|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
::Default, None|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
+
:ImapOpenedMailboxInfo.Get(Sorted)Messages(...)|これらのメソッドは戻り値としてImapMessageInfoListを返します。 このクラスはList<ImapMessageInfo>のようなコレクションクラスではなく、列挙することで初めてImapMessageInfoを取得することができます。 このクラスから取得したImapMessageInfoを保持したい場合は、List<ImapMessageInfo>などに格納しなおしてください。
 
:ImapMessageInfoList.GetEnumerator()|このメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
:ImapMessageInfoList.GetEnumerator()|このメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
+
:エンコーディング|サーバーが指定されたエンコーディングをサポートしていないことを示すレスポンス(``[BADCHARSET]``)を返した場合は、例外Smdn.Formats.EncodingNotSupportedExceptionをスローします。
 

        

        
 
****メッセージの状態の取得 [#operation_reference_message_status]
****メッセージの状態の取得 [#operation_reference_message_status]
 
以下はメッセージの状態を表すプロパティです。
以下はメッセージの状態を表すプロパティです。
 

        

        
~
|*メッセージの状態を表すプロパティ
|*ImapMessageInfoクラスのプロパティ
~
|~クラス|>|~プロパティ|~解説|h
|~プロパティ|~解説|h
~
|~ImapMessageInfo|>|Uid|メッセージに割り当てられているUIDを返します。|
|Uid|メッセージに割り当てられているUIDを返します。|
~
|~|>|Sequence|メッセージに割り当てられている現在の通番を返します。 削除されている場合(IsDeletedがtrueの場合)は0を返します。|
|Sequence|メッセージに割り当てられている現在の通番を返します。 削除されている場合(IsDeletedがtrueの場合)は0を返します。|
~
|~|>|UidValidity|メッセージを取得した時点でのメールボックスのUIDVALIDITY値を返します。 UIDが永続的でない場合(ImapOpenedMailboxInfo.IsUidPersistentがfalseの場合)などは、0を返します。|
|UidValidity|メッセージを取得した時点でのメールボックスのUIDVALIDITY値を返します。 UIDが永続的でない場合(ImapOpenedMailboxInfo.IsUidPersistentがfalseの場合)などは、0を返します。|
~
|~|>|Url|メッセージをIMAP URLを返します。|
|Url|メッセージをIMAP URLを返します。|
~
|~|>|Mailbox|メッセージが属するメールボックスを表すインスタンスを返します。|
|Mailbox|メッセージが属するメールボックスを表すインスタンスを返します。|
~
|~|>|IsAvailable|メッセージが利用可能かどうかを表す値を返します。 インスタンスの取得元となったメールボックスが既に閉じられている場合、メッセージが移動または削除されている場合は、falseを返します。|
|IsAvailable|メッセージが利用可能かどうかを表す値を返します。 インスタンスの取得元となったメールボックスが既に閉じられている場合、メッセージが移動または削除されている場合は、falseを返します。|
~
|~|>|IsDeleted|メッセージが完全に削除されているかどうかを表す値を返します。|
|IsDeleted|メッセージが完全に削除されているかどうかを表す値を返します。|
~
|~|~動的属性|IsAnswered|メッセージが返信済みかどうかを表す値を返します。 \Answeredフラグが設定されている場合trueを返します。|
|>|~動的属性を表すプロパティ|
~
|~|~|IsDraft|メッセージが下書きかどうかを表す値を返します。 \Draftフラグが設定されている場合trueを返します。|
|IsAnswered|メッセージが返信済みかどうかを表す値を返します。 \Answeredフラグが設定されている場合trueを返します。|
~
|~|~|IsFlagged|メッセージが「フラグ済み」かどうかを表す値を返します。 \Flaggedフラグが設定されている場合trueを返します。|
|IsDraft|メッセージが下書きかどうかを表す値を返します。 \Draftフラグが設定されている場合trueを返します。|
~
|~|~|IsMarkedAsDeleted|メッセージが削除予定かどうかを表す値を返します。 \Deletedフラグが設定されている場合trueを返します。|
|IsFlagged|メッセージが「フラグ済み」かどうかを表す値を返します。 \Flaggedフラグが設定されている場合trueを返します。|
~
|~|~|IsRecent|メッセージが新着かどうかを表す値を返します。 \Recentフラグが設定されている場合trueを返します。|
|IsMarkedAsDeleted|メッセージが削除予定かどうかを表す値を返します。 \Deletedフラグが設定されている場合trueを返します。|
~
|~|~|IsSeen|メッセージが既読かどうかを表す値を返します。 \Seenフラグが設定されている場合trueを返します。|
|IsRecent|メッセージが新着かどうかを表す値を返します。 \Recentフラグが設定されている場合trueを返します。|
~
|~|~|Flags|メッセージに設定されているフラグ・キーワードの一覧を返します。|
|IsSeen|メッセージが既読かどうかを表す値を返します。 \Seenフラグが設定されている場合trueを返します。|
~
|~|~|ModSeq|メッセージに設定されている``mod-sequence``値を返します。|
|Flags|メッセージに設定されているフラグ・キーワードの一覧を返します。|
~
|~|~静的属性|IsMultiPart|メッセージがマルチパート形式のメッセージかどうかを表す値を返します。|
|>|~静的属性を表すプロパティ|
~
|~|~|MediaType|メッセージのメディアタイプを返します。|
|IsMultiPart|メッセージがマルチパート形式のメッセージかどうかを表す値を返します。|
~
|~|~|Length|メッセージのサイズをバイト単位で返します。|
|MediaType|メッセージのメディアタイプを返します。|
~
|~|~|Envelope|メッセージのエンベロープを表すImapEnvelopeのインスタンスを返します。|
|Length|メッセージのサイズをバイト単位で返します。|
~
|~|~|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合は、DateTimeOffsetのデフォルト値を返します。 Dateヘッダがない場合などは、nullを返します。|
|Envelope|メッセージのエンベロープを表すImapEnvelopeのインスタンスを返します。|
~
|~|~|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態で返します。 Subjectヘッダがない場合などは、nullを返します。|
|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合は、DateTimeOffsetのデフォルト値を返します。 Dateヘッダがない場合などは、nullを返します。|
~
|~|~|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態で返します。 Subjectヘッダがない場合などは、nullを返します。|
~
|~|~|BodyStructure|メッセージのBODYSTRUCTUREを表すIImapBodyStructureのインスタンスを返します。|
|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
~
|~クラス|>|~プロパティ|~解説|f
|BodyStructure|メッセージのBODYSTRUCTUREを表すIImapBodyStructureのインスタンスを返します。|
-
|~プロパティ|~解説|f
-
//|ModSeq||
 

        

        
 
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
 
:静的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで静的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
:静的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで静的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
2003,37 1573,37
 
****メッセージ本文の取得 [#operation_reference_message_readbody]
****メッセージ本文の取得 [#operation_reference_message_readbody]
 
以下はメッセージ本文の取得に関するメソッドです。
以下はメッセージ本文の取得に関するメソッドです。
 

        

        
~
|*メッセージ本文の取得に関するメソッド
|*ImapMessageInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapMessageInfo|{{
|{{
 
OpenRead()
OpenRead()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を読み込むためのStreamを取得します。|FETCH|
}}|メッセージ本文を読み込むためのStreamを取得します。|FETCH|
~
|~|{{
|{{
 
OpenText()
OpenText()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を読み込むためのStreamReaderを取得します。|FETCH|
}}|メッセージ本文を読み込むためのStreamReaderを取得します。|FETCH|
~
|~|{{
|{{
 
ReadAllBytes()
ReadAllBytes()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文をbyte[]で取得します。|FETCH|
}}|メッセージ本文をbyte[]で取得します。|FETCH|
~
|~|{{
|{{
 
ReadAllLines()
ReadAllLines()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文をstring[]で取得します。|FETCH|
}}|メッセージ本文をstring[]で取得します。|FETCH|
~
|~|{{
|{{
 
ReadAllText()
ReadAllText()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文をstringで取得します。|FETCH|
}}|メッセージ本文をstringで取得します。|FETCH|
~
|~|{{
|{{
 
ReadLines()
ReadLines()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文をIEnumerable<string>で取得します。|FETCH|
}}|メッセージ本文をIEnumerable<string>で取得します。|FETCH|
~
|~|{{
|{{
 
ReadAs<TOutput>(Converter<Stream, TOutput>)
ReadAs<TOutput>(Converter<Stream, TOutput>)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を読み込むためのStreamを取得し、指定されたConverter<Stream, TOutput>で変換された結果を取得します。|FETCH|
}}|メッセージ本文を読み込むためのStreamを取得し、指定されたConverter<Stream, TOutput>で変換された結果を取得します。|FETCH|
~
|~|{{
|{{
 
ReadAs<T, TResult>
ReadAs<T, TResult>
 
(Func<Stream, T, TResult>, T)
(Func<Stream, T, TResult>, T)
 
ReadAs<T1, T2, TResult>
ReadAs<T1, T2, TResult>
2044,23 1614,23
 
(Func<Stream, T1, T2, T3, T4, TResult>, T1, T2, T3, T4)
(Func<Stream, T1, T2, T3, T4, TResult>, T1, T2, T3, T4)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を読み込むためのStreamを取得し、指定されたFunc<Stream, T, TResult>~Func<Stream, T1, T2, T3, T4, TResult>で変換された結果を取得します。|FETCH|
}}|メッセージ本文を読み込むためのStreamを取得し、指定されたFunc<Stream, T, TResult>~Func<Stream, T1, T2, T3, T4, TResult>で変換された結果を取得します。|FETCH|
~
|~|{{
|{{
 
ReadAs<TOutput>(Converter<StreamReader, TOutput>)
ReadAs<TOutput>(Converter<StreamReader, TOutput>)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を読み込むためのStreamReaderを取得し、指定されたConverter<StreamReader, TOutput>で変換された結果を取得します。|FETCH|
}}|メッセージ本文を読み込むためのStreamReaderを取得し、指定されたConverter<StreamReader, TOutput>で変換された結果を取得します。|FETCH|
~
|~|{{
|{{
 
Save(string)
Save(string)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を指定されたファイルに保存します。|FETCH|
}}|メッセージ本文を指定されたファイルに保存します。|FETCH|
~
|~|{{
|{{
 
WriteTo(Stream)
WriteTo(Stream)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を指定されたStreamに書き込みます。|FETCH|
}}|メッセージ本文を指定されたStreamに書き込みます。|FETCH|
~
|~|{{
|{{
 
WriteTo(BinaryWriter)
WriteTo(BinaryWriter)
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージ本文を指定されたBinaryWriterに書き込みます。|FETCH|
}}|メッセージ本文を指定されたBinaryWriterに書き込みます。|FETCH|
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
 
:すべてのメソッド|これらすべてのメソッドは、取得したメッセージ本文をキャッシュしません。 ''メソッド呼び出しの度にメッセージ本文のダウンロードを行います。'' 同じメッセージを何度も処理する必要がある場合は、WriteTo()メソッドでMemoryStream等に書き出すか、Save()メソッドでファイルに保存するなどしてください。
:すべてのメソッド|これらすべてのメソッドは、取得したメッセージ本文をキャッシュしません。 ''メソッド呼び出しの度にメッセージ本文のダウンロードを行います。'' 同じメッセージを何度も処理する必要がある場合は、WriteTo()メソッドでMemoryStream等に書き出すか、Save()メソッドでファイルに保存するなどしてください。
 
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
2073,53 1643,77
 
****メッセージヘッダの取得 [#operation_reference_message_readheader]
****メッセージヘッダの取得 [#operation_reference_message_readheader]
 
以下はメッセージヘッダ(From, Subject, Content-Type等)の取得に関するメソッドです。
以下はメッセージヘッダ(From, Subject, Content-Type等)の取得に関するメソッドです。
 

        

        
~
|*メッセージヘッダの取得に関するメソッド
|*ImapMessageInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapMessageInfo|{{
|{{
 
GetHeader()
GetHeader()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージのヘッダ部分のみを取得し、ヘッダ名と値に分離したKeyValuePairの配列で返します。 オプションで取得するヘッダや、ヘッダの値をデコードするかどうかを指定できます。|FETCH|
}}|メッセージのヘッダ部分のみを取得し、ヘッダ名と値に分離したKeyValuePairの配列で返します。 オプションで取得するヘッダや、ヘッダの値をデコードするかどうかを指定できます。|FETCH|
~
|~|{{
|{{
 
GetRawHeader()
GetRawHeader()
 
およびオーバーロード
およびオーバーロード
 
}}|メッセージのヘッダ部分のみを取得し、単一の文字列として返します。 オプションで取得するヘッダを指定できます。|FETCH|
}}|メッセージのヘッダ部分のみを取得し、単一の文字列として返します。 オプションで取得するヘッダを指定できます。|FETCH|
 

        

        
 
****メッセージの操作 [#operation_reference_message_control]
****メッセージの操作 [#operation_reference_message_control]
~
以下はメールボックスにあるメッセージの移動・コピー・削除・フラグの変更等の操作に関するメソッドです。
以下はメールボックスにあるメッセージの移動・削除・コピー・フラグの変更等の操作に関するメソッドです。
 

        

        
~
|*メールボックスにあるメッセージの移動・コピー等の操作に関するメソッド
|*ImapMessageInfoクラスおよびImapMessageInfoListクラスのメソッド&br;(ImapMessageInfoBaseクラスから継承)
~
|~クラス|~メソッド|~解説|>|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~|~|~|~同一セッションの場合|~異なるセッションの場合|h
|AddFlags(IImapMessageFlagSet)&br;AddFlags(ImapMessageFlag, params ImapMessageFlag[])&br;AddKeywords(string, params string[])|1つまたは複数のメッセージに対して、指定したフラグ・キーワードを追加します。|STORE|
~
|~ImapMessageInfo および ImapMessageInfoList (ImapMessageInfoBaseから継承)|CopyTo(ImapMailboxInfo)|{{
|RemoveFlags(IImapMessageFlagSet)&br;RemoveFlags(ImapMessageFlag, params ImapMessageFlag[])&br;RemoveKeywords(string, params string[])|1つまたは複数のメッセージから、指定したフラグ・キーワードを削除します。|STORE|
-
|SetFlags(IImapMessageFlagSet)&br;SetFlags(ImapMessageFlag, params ImapMessageFlag[])&br;SetKeywords(string, params string[])|1つまたは複数のメッセージに対して、既に設定されているフラグ・キーワードを置き換えて指定した値に設定します。|STORE|
-
|Store(ImapStoreDataItem)|1つまたは複数のメッセージに対して、指定したフラグ・キーワードの追加/削除/設定を行います。|STORE|
-
|MarkAsDeleted()|1つまたは複数のメッセージに削除フラグを設定します。|STORE|
-
|MarkAsSeen()|1つまたは複数のメッセージを既読にします。|STORE|
-
|Delete()|1つまたは複数のメッセージを完全に削除します。&br;サーバがUID EXPUNGEをサポートしていない場合、''既に削除フラグが設定されている他のメッセージも同時に削除されます''。|STORE+EXPUNGE/UID EXPUNGE|
-
|CopyTo(ImapMailboxInfo)|{{
 
1つまたは複数のメッセージを、指定したメールボックスにコピーします。
1つまたは複数のメッセージを、指定したメールボックスにコピーします。
~
}}|COPY|FETCH+APPEND|
}}|{{
~
|~|CopyTo(string)&br;CopyTo(string, bool)|1つまたは複数のメッセージを、指定した名前のメールボックスにコピーします。 オプションで、メールボックスが存在しない場合に作成するかどうかを指定できます。|COPY|-|
COPY (同一セッションの場合)
~
|~|MoveTo(ImapMailboxInfo)|{{
FETCH+APPEND (異なるセッションの場合)
-
}}|
-
|CopyTo(string)&br;CopyTo(string, bool)|1つまたは複数のメッセージを、指定した名前のメールボックスにコピーします。 オプションで、メールボックスが存在しない場合に作成するかどうかを指定できます。|COPY|
-
|MoveTo(ImapMailboxInfo)|{{
 
1つまたは複数のメッセージを、指定したメールボックスに移動します。
1つまたは複数のメッセージを、指定したメールボックスに移動します。
~
}}|COPY+STORE/MOVE|FETCH+APPEND+STORE|
}}|{{
~
|~|MoveTo(string)&br;MoveTo(string, bool)|1つまたは複数のメッセージを、指定した名前のメールボックスに移動します。 オプションで、メールボックスが存在しない場合に作成するかどうかを指定できます。|COPY+STORE/MOVE|-|
COPY+STORE/MOVE (同一セッションの場合)
~
|~ImapOpenedMailboxInfo|{{
FETCH+APPEND+STORE (異なるセッションの場合)
-
}}|
-
|MoveTo(string)&br;MoveTo(string, bool)|1つまたは複数のメッセージを、指定した名前のメールボックスに移動します。 オプションで、メールボックスが存在しない場合に作成するかどうかを指定できます。|COPY+STORE/MOVE|
-
|~メソッド|~解説|~対応するIMAPコマンド|f
-

          
-
|*ImapMessageInfoクラスのメソッド
-
|~メソッド|~解説|~対応するIMAPコマンド|h
-
|Refresh()|メッセージの動的属性を更新します。|FETCH|
-
|ToggleFlags(IImapMessageFlagSet)&br;ToggleFlags(ImapMessageFlag, params ImapMessageFlag[])&br;ToggleKeywords(string, params string[])|メッセージに設定されているフラグ・キーワードを反転します。&br;例として、メッセージに削除フラグが設定されている場合はフラグを削除し、設定されていない場合は追加します。|STORE|
-
|GetStructureOf(string)&br;GetStructureOf<TBodyStructure>(string)&br;GetStructureOf(params int[])&br;GetStructureOf<TBodyStructure>(params int[])|指定したセクションに該当するBODYSTRUCTUREを取得します。&br;文字列"1.2.3"の指定と数値{1,2,3}の指定は等価です。 また、文字列""の指定と数値{}の指定は等価です。|FETCH|
-
|~メソッド|~解説|~対応するIMAPコマンド|f
-

          
-
|*ImapOpenedMailboxInfoクラスのメソッド
-
|~メソッド|~解説|>|~対応するIMAPコマンド|h
-
|~|~|~同一セッションの場合|~異なるセッションの場合|h
-
|{{
 
CopyMessagesTo(ImapMailboxInfo)
CopyMessagesTo(ImapMailboxInfo)
 
}}|メールボックスにあるすべてのメッセージを、指定したメールボックスにコピーします。|COPY|FETCH+APPEND|
}}|メールボックスにあるすべてのメッセージを、指定したメールボックスにコピーします。|COPY|FETCH+APPEND|
~
|~|{{
|{{
 
CopyMessagesTo(ImapMailboxInfo, long, params long[])
CopyMessagesTo(ImapMailboxInfo, long, params long[])
 
}}|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを指定したメールボックスにコピーします。|COPY|FETCH+APPEND|
}}|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを指定したメールボックスにコピーします。|COPY|FETCH+APPEND|
~
|~|{{
|{{
 
CopyMessagesTo(ImapSearchCriteria, ImapMailboxInfo)
CopyMessagesTo(ImapSearchCriteria, ImapMailboxInfo)
 
CopyMessagesTo(ImapSearchCriteria, Encoding, ImapMailboxInfo)
CopyMessagesTo(ImapSearchCriteria, Encoding, ImapMailboxInfo)
 
}}|メールボックスにあるメッセージのうち、指定した検索条件にマッチするメッセージを指定したメールボックスにコピーします。|SEARCH+COPY|SEARCH+FETCH+APPEND|
}}|メールボックスにあるメッセージのうち、指定した検索条件にマッチするメッセージを指定したメールボックスにコピーします。|SEARCH+COPY|SEARCH+FETCH+APPEND|
~
|~|{{
|{{
 
MoveMessagesTo(ImapMailboxInfo)
MoveMessagesTo(ImapMailboxInfo)
 
}}|メールボックスにあるすべてのメッセージを、指定したメールボックスに移動します。|COPY+STORE / MOVE|FETCH+APPEND+STORE|
}}|メールボックスにあるすべてのメッセージを、指定したメールボックスに移動します。|COPY+STORE / MOVE|FETCH+APPEND+STORE|
~
|~|{{
|{{
 
MoveMessagesTo(ImapMailboxInfo, long, params long[])
MoveMessagesTo(ImapMailboxInfo, long, params long[])
 
}}|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを指定したメールボックスに移動します。|COPY+STORE / MOVE|FETCH+APPEND+STORE|
}}|メールボックスにあるメッセージのうち、指定したUIDを持つ1つ以上のメッセージを指定したメールボックスに移動します。|COPY+STORE / MOVE|FETCH+APPEND+STORE|
~
|~|{{
|{{
 
MoveMessagesTo(ImapSearchCriteria, ImapMailboxInfo)
MoveMessagesTo(ImapSearchCriteria, ImapMailboxInfo)
 
MoveMessagesTo(ImapSearchCriteria, Encoding, ImapMailboxInfo)
MoveMessagesTo(ImapSearchCriteria, Encoding, ImapMailboxInfo)
 
}}|メールボックスにあるメッセージのうち、指定した検索条件にマッチするメッセージを指定したメールボックスに移動します。|SEARCH+COPY+STORE / SEARCH+MOVE|SEARCH+FETCH+APPEND+STORE|
}}|メールボックスにあるメッセージのうち、指定した検索条件にマッチするメッセージを指定したメールボックスに移動します。|SEARCH+COPY+STORE / SEARCH+MOVE|SEARCH+FETCH+APPEND+STORE|
~
|~クラス|~メソッド|~解説|~同一セッションの場合|~異なるセッションの場合|f
|~メソッド|~解説|~同一セッションの場合|~異なるセッションの場合|f
~
|~|~|~|>|~対応するIMAPコマンド|f
|~|~|>|~対応するIMAPコマンド|f
 

        

        
 
:メッセージの移動|IMAPにはメッセージの移動を行うコマンドが存在しないため、代わりにコピーと削除フラグの設定を行うよう実装しています。 そのため、移動を行っても移動元のメッセージに削除フラグが設定されるのみですぐには削除されません。
:メッセージの移動|IMAPにはメッセージの移動を行うコマンドが存在しないため、代わりにコピーと削除フラグの設定を行うよう実装しています。 そのため、移動を行っても移動元のメッセージに削除フラグが設定されるのみですぐには削除されません。
 
これらのメッセージはImapOpenedMailboxInfo.Close()メソッドやImapClient.Logout()メソッドを呼び出した時点で完全に削除されますが、すぐに削除したい場合はDelete()メソッドやImapOpenedMailboxInfo.Expunge()メソッドを呼び出すようにしてください。
これらのメッセージはImapOpenedMailboxInfo.Close()メソッドやImapClient.Logout()メソッドを呼び出した時点で完全に削除されますが、すぐに削除したい場合はDelete()メソッドやImapOpenedMailboxInfo.Expunge()メソッドを呼び出すようにしてください。
2131,33 1725,17
 
また、選択できないメールボックス(IsUnselectableがtrue)の場合や、既に削除されているメールボックス(Existがfalse)の場合は、ImapProtocolViolationExceptionをスローします。
また、選択できないメールボックス(IsUnselectableがtrue)の場合や、既に削除されているメールボックス(Existがfalse)の場合は、ImapProtocolViolationExceptionをスローします。
 
メールボックスが存在しない場合(サーバがTRYCREATEレスポンスコードを返した場合)は、ImapMailboxNotFoundExceptionをスローします。
メールボックスが存在しない場合(サーバがTRYCREATEレスポンスコードを返した場合)は、ImapMailboxNotFoundExceptionをスローします。
 

        

        
+
|*メールボックスにあるメッセージの削除・フラグの変更等の操作に関するメソッド
+
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
+
|~ImapMessageInfo および ImapMessageInfoList (ImapMessageInfoBaseから継承)|AddFlags(IImapMessageFlagSet)&br;AddFlags(ImapMessageFlag, params ImapMessageFlag[])&br;AddKeywords(string, params string[])|1つまたは複数のメッセージに対して、指定したフラグ・キーワードを追加します。|STORE|
+
|~|RemoveFlags(IImapMessageFlagSet)&br;RemoveFlags(ImapMessageFlag, params ImapMessageFlag[])&br;RemoveKeywords(string, params string[])|1つまたは複数のメッセージから、指定したフラグ・キーワードを削除します。|STORE|
+
|~|SetFlags(IImapMessageFlagSet)&br;SetFlags(ImapMessageFlag, params ImapMessageFlag[])&br;SetKeywords(string, params string[])|1つまたは複数のメッセージに対して、既に設定されているフラグ・キーワードを置き換えて指定した値に設定します。|STORE|
+
|~|Store(ImapStoreDataItem)|1つまたは複数のメッセージに対して、指定したフラグ・キーワードの追加/削除/設定を行います。|STORE|-|
+
|~|MarkAsDeleted()|1つまたは複数のメッセージに削除フラグ(``\Deleted``)を設定します。|STORE|
+
|~|MarkAsSeen()|1つまたは複数のメッセージを既読フラグ(``\Seen``)を設定します。|STORE|
+
|~|Delete()|1つまたは複数のメッセージを完全に削除します。&br;サーバがUID EXPUNGEをサポートしていない場合、''既に削除フラグが設定されている他のメッセージも同時に削除されます''。|STORE+EXPUNGE/UID EXPUNGE|
+
|~ImapMessageInfo|Refresh()|メッセージの動的属性を更新します。|FETCH|
+
|~|ToggleFlags(IImapMessageFlagSet)&br;ToggleFlags(ImapMessageFlag, params ImapMessageFlag[])&br;ToggleKeywords(string, params string[])|メッセージに設定されているフラグ・キーワードを反転します。&br;例として、メッセージに削除フラグが設定されている場合はフラグを削除し、設定されていない場合は追加します。|STORE|
+
|~|GetStructureOf(string)&br;GetStructureOf<TBodyStructure>(string)&br;GetStructureOf(params int[])&br;GetStructureOf<TBodyStructure>(params int[])|指定したセクションに該当するBODYSTRUCTUREを取得します。&br;文字列"1.2.3"の指定と数値{1,2,3}の指定は等価です。 また、文字列""の指定と数値{}の指定は等価です。|FETCH|
+
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
+

          
+

          
+

          
 
****メッセージのアップロード(メールボックスへの追加) [#operation_reference_message_append]
****メッセージのアップロード(メールボックスへの追加) [#operation_reference_message_append]
 
以下はメールボックスにメッセージをアップロード(追加)するためのメソッドです。
以下はメールボックスにメッセージをアップロード(追加)するためのメソッドです。
 

        

        
~
|*メールボックスにメッセージを追加するためのメソッド
|*ImapMailboxInfoクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapMailboxInfo|AppendMessage(Stream)&br;AppendMessage(Stream, DateTimeOffset)&br;AppendMessage(Stream, IImapMessageFlagSet)&br;AppendMessage(Stream, DateTimeOffset, IImapMessageFlagSet)|指定したStreamの内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
|AppendMessage(Stream)&br;AppendMessage(Stream, DateTimeOffset)&br;AppendMessage(Stream, IImapMessageFlagSet)&br;AppendMessage(Stream, DateTimeOffset, IImapMessageFlagSet)|指定したStreamの内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
~
|~|AppendMessage(IImapAppendMessage message)|指定したIImapAppendMessageで表されるメッセージをメールボックスにアップロードします。|APPEND|
|AppendMessage(IImapAppendMessage message)|指定したIImapAppendMessageで表されるメッセージをメールボックスにアップロードします。|APPEND|
~
|~|AppendMessages(IEnumerable<IImapAppendMessage>)|指定したIImapAppendMessageで表される複数のメッセージをメールボックスにアップロードします。|APPENDもしくはMULTIAPPEND|
|AppendMessages(IEnumerable<IImapAppendMessage>)|指定したIImapAppendMessageで表される複数のメッセージをメールボックスにアップロードします。|APPENDもしくはMULTIAPPEND|
~
|~|AppendMessage(Action<Stream>)&br;AppendMessage(DateTimeOffset, Action<Stream>)&br;AppendMessage(IImapMessageFlagSet, Action<Stream>)&br;AppendMessage(DateTimeOffset, IImapMessageFlagSet flags, Action<Stream>)|メッセージを書き込むためのStreamを取得し、書き込んだ内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
|AppendMessage(Action<Stream>)&br;AppendMessage(DateTimeOffset, Action<Stream>)&br;AppendMessage(IImapMessageFlagSet, Action<Stream>)&br;AppendMessage(DateTimeOffset, IImapMessageFlagSet flags, Action<Stream>)|メッセージを書き込むためのStreamを取得し、書き込んだ内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
~
|~|AppendMessage(long, Action<Stream>)&br;AppendMessage(long, DateTimeOffset, Action<Stream>)&br;AppendMessage(long, IImapMessageFlagSet, Action<Stream>)&br;AppendMessage(long, DateTimeOffset, IImapMessageFlagSet, Action<Stream>)|指定したサイズのメッセージを書き込むためのStreamを取得し、書き込んだ内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
|AppendMessage(long, Action<Stream>)&br;AppendMessage(long, DateTimeOffset, Action<Stream>)&br;AppendMessage(long, IImapMessageFlagSet, Action<Stream>)&br;AppendMessage(long, DateTimeOffset, IImapMessageFlagSet, Action<Stream>)|指定したサイズのメッセージを書き込むためのStreamを取得し、書き込んだ内容をメールボックスにアップロードします。 オプションでメッセージに設定するINTERNALDATE, フラグ・キーワードを指定できます。|APPEND|
~
|~|AppendMessage(ImapMessageInfo)|{{
|AppendMessage(ImapMessageInfo)|{{
 
指定したImapMessageInfoの内容をメールボックスに追加します。
指定したImapMessageInfoの内容をメールボックスに追加します。
 

        

        
 
ImapMessageInfoが同一セッションのものの場合は、サーバ上でコピーが行われます。
ImapMessageInfoが同一セッションのものの場合は、サーバ上でコピーが行われます。
2166,87 1744,44
 
COPY (同一セッションの場合)
COPY (同一セッションの場合)
 
APPEND (異なるセッションの場合)
APPEND (異なるセッションの場合)
 
}}|
}}|
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
 
:追加先のメールボックス|選択できないメールボックス(IsUnselectableがtrue)の場合や、既に削除されているメールボックス(Existがfalse)の場合は、ImapProtocolViolationExceptionをスローします。
:追加先のメールボックス|選択できないメールボックス(IsUnselectableがtrue)の場合や、既に削除されているメールボックス(Existがfalse)の場合は、ImapProtocolViolationExceptionをスローします。
 
メールボックスが存在しない場合(サーバがTRYCREATEレスポンスコードを返した場合)は、ImapMailboxNotFoundExceptionをスローします。
メールボックスが存在しない場合(サーバがTRYCREATEレスポンスコードを返した場合)は、ImapMailboxNotFoundExceptionをスローします。
 

        

        
 
***その他のIMAPの操作 [#operation_reference_misc]
***その他のIMAPの操作 [#operation_reference_misc]
-
****サーバからの通知 [#operation_reference_misc_events]
-
以下はサーバからの通知をハンドリングするためのイベントです。
 

        

        
~
****サーバ情報の取得 [#operation_reference_misc_serverinfo]
|*ImapClientクラスのイベント
~
以下はサーバーがサポートしている機能などの情報を取得するためのプロパティです。
|~イベント|~解説|h
~

          
|ExistMessageCountChanged|現在選択しているメールボックスにあるすべてのメッセージの数が変わった場合に発生します。&br;イベント発生前後のメッセージ数と、現在選択しているメールボックスのImapOpenedMailboxInfoを含むImapMailboxSizeChangedEventArgsが送られます。|
~
|*サーバー情報を取得するためのプロパティ
|RecentMessageCountChanged|現在選択しているメールボックスにある新着メッセージの数が変わった場合に発生します。&br;イベント発生前後のメッセージ数と、現在選択しているメールボックスのImapOpenedMailboxInfoを含むImapMailboxSizeChangedEventArgsが送られます。|
~
|~クラス|~プロパティ|~解説|h
|MessageDeleted|現在選択しているメールボックスにあるメッセージが削除された場合に発生します。&br;削除されたメッセージのImapMessageInfo[]を含むImapMessageStatusChangedEventArgsが送られます。|
~
|~ImapClient|ServerCapabilities|サーバーがサポートする機能の一覧(CAPABILITYコマンドの結果)を取得します。|
|MessageStatusChanged|現在選択しているメールボックスにあるメッセージの動的属性が変更された場合に発生します。&br;属性が変更されたメッセージのImapMessageInfo[]を含むImapMessageStatusChangedEventArgsが送られます。|
~
|~|DisabledCapabilities|無効にする機能の一覧を取得します。 このコレクションを変更することにより、仮にサーバーがサポートしている場合でも使用しない機能を指定することができます。|
|AlertReceived|サーバからのアラートを受信した場合に発生します。&br;受信したアラートを含むImapAlertReceivedEventArgsが送られます。|
~
|~|ServerID|サーバーがサポートしている場合、サーバーのID(IDコマンドの結果)を返します。 サポートしていない場合は、空のインスタンスを返します。|
|~メソッド|~解説|f
+
|~|ServerNamespace|サーバーがサポートしている場合、サーバーの名前空間(NAMESPACEコマンドの結果)を返します。 サポートしていない場合は、空のインスタンスを返します。|
+
|~クラス|~プロパティ|~解説|f
+

          
+
:ServerCapabilities, ServerID, ServerNamespace|切断されている状態で取得しようとした場合(ImapClient.IsConnectedがfalseの場合)、例外をスローします。
+
:DisabledCapabilities|このコレクションを変更することにより、サーバーがサポートしている拡張機能を使用せず、標準機能のみで処理を行うようにすることができます。 例えば``DisabledCapabilities.Add(ImapCapability.Idle)``のようにすれば、サーバーがIDLEをサポートしている場合でもIDLEを使わないようにすることができます。
+

          
+
****サーバーからの通知 [#operation_reference_misc_events]
+
以下はサーバーからの通知をハンドリングするためのイベントです。
+

          
+
|*サーバーからの通知に関するイベント
+
|~クラス|~イベント|~解説|h
+
|~ImapClient|ExistMessageCountChanged|現在選択しているメールボックスにあるすべてのメッセージの数が変わった場合に発生します。&br;イベント発生前後のメッセージ数と、現在選択しているメールボックスのImapOpenedMailboxInfoを含むImapMailboxSizeChangedEventArgsが送られます。|
+
|~|RecentMessageCountChanged|現在選択しているメールボックスにある新着メッセージの数が変わった場合に発生します。&br;イベント発生前後のメッセージ数と、現在選択しているメールボックスのImapOpenedMailboxInfoを含むImapMailboxSizeChangedEventArgsが送られます。|
+
|~|MessageDeleted|現在選択しているメールボックスにあるメッセージが削除された場合に発生します。&br;削除されたメッセージのImapMessageInfo[]を含むImapMessageStatusChangedEventArgsが送られます。|
+
|~|MessageStatusChanged|現在選択しているメールボックスにあるメッセージの動的属性が変更された場合に発生します。&br;属性が変更されたメッセージのImapMessageInfo[]を含むImapMessageStatusChangedEventArgsが送られます。|
+
|~|AlertReceived|サーバーからのアラートを受信した場合に発生します。&br;受信したアラートを含むImapAlertReceivedEventArgsが送られます。|
+
|~クラス|~イベント|~解説|f
 

        

        
 
****クォータ [#operation_reference_misc_quota]
****クォータ [#operation_reference_misc_quota]
 
以下はクォータの取得に関するメソッドです。
以下はクォータの取得に関するメソッドです。
 

        

        
~
|*クォータの取得に関するメソッド
|*ImapClientクラスのメソッド
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~メソッド|~解説|~対応するIMAPコマンド|h
~
|~ImapClient|GetQuota(string)|指定した名前のクォータルートの状態を取得します。 サーバがQUOTAをサポートしていない場合はnullを返します。|GETQUOTA|
|GetQuota(string)|指定した名前のクォータルートの状態を取得します。 サーバがQUOTAをサポートしていない場合はnullを返します。|GETQUOTA|
~
|~|GetQuotaUsage(string, string)|指定した名前のクォータルートのうち、指定したリソースの使用率を0.0から1.0までのdouble値で返します。 サーバがQUOTAをサポートしていない場合、上限が0の場合は0.0を返します。|GETQUOTA|
|GetQuotaUsage(string, string)|指定した名前のクォータルートのうち、指定したリソースの使用率を0.0から1.0までのdouble値で返します。 サーバがQUOTAをサポートしていない場合、上限が0の場合は0.0を返します。|GETQUOTA|
~
|~ImapMailboxInfo|GetQuota()|メールボックスに割り当てられているクォータの一覧をIEnumerable<ImapQuota>で返します。 サーバがQUOTAをサポートしていない場合は、空のIEnumerable<ImapQuota>を返します。|GETQUOTAROOT|
|~メソッド|~解説|~対応するIMAPコマンド|f
~
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f

          
~

          
|*ImapMailboxInfoクラスのメソッド
~
***拡張機能を使用しているメソッド・プロパティ [#operation_reference_extension_specs]
|~メソッド|~解説|~対応するIMAPコマンド|h
~
拡張機能と、それを使っているメソッド・プロパティの一覧です。 これらのメソッドは、拡張機能が使用できない場合には標準コマンドによる不完全なエミュレーションを行うか、例外ImapIncapableExceptionをスローします。
|GetQuota()|メールボックスに割り当てられているクォータの一覧をIEnumerable<ImapQuota>で返します。 サーバがQUOTAをサポートしていない場合は、空のIEnumerable<ImapQuota>を返します。|GETQUOTAROOT|
~

          
|~メソッド|~解説|~対応するIMAPコマンド|f
+
|*拡張機能をサポートしていない場合は不完全なエミュレーションを行うメソッド
+
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド・プロパティ|~サポートしていない場合の動作と注意事項|h
+
|~&urn2url(urn:ietf:rfc:2087){QUOTA};|``ImapCapability.Quota``|ImapClient.GetQuota(string)|常にnullを返します。|
+
|~|~|ImapMailboxInfo.GetQuota()|常に空のIEnumerable<ImapQuota>を返します。|
+
|~&urn2url(urn:ietf:rfc:2177){IDLE};|``ImapCapability.Idle``|{{
+
ImapOpenedMailboxInfo.Idle(...)
+
ImapOpenedMailboxInfo.StartIdle(...)
+
ImapOpenedMailboxInfo.WaitForMessageArrival(...)
+
ImapOpenedMailboxInfo.StartWaitForMessageArrival(...)
+
}}|NOOPコマンドを使ったポーリングを行うため、サーバーからの通知は(即時ではなく)ポーリング間隔おきに通知されます。|
+
|~&urn2url(urn:ietf:rfc:2193){MAILBOX-REFERRALS};|``ImapCapability.MailboxReferrals``|ImapClient.GetMailboxes(ImapMailboxListOptions)などのメソッド&br;(ImapMailboxListOptions.Remoteを指定している場合)|LIST/LSUBコマンドを使用するため、ImapMailboxListOptions.Remoteを指定していない場合と同じ動作になります。|
+
|~&urn2url(urn:ietf:rfc:3502){MULTIAPPEND};|``ImapCapability.MultiAppend``|ImapMailboxInfo.AppendMessages(...)|メッセージを一つずつアップロードするため、途中で失敗した場合は一部のメッセージのみアップロードされた状態になる場合があります。|
+
|~&urn2url(urn:ietf:rfc:4315){UIDPLUS};|``ImapCapability.UidPlus``|ImapMessageInfo.Delete()&br;ImapMessageInfoList.Delete()|EXPUNGEコマンドを使って削除するため、``\Deleted``が設定されている他のメッセージも同時に削除されます。|
+
|~|~|ImapMailboxInfo.IsUidPersistent|常にtrueを返します。|
+
|~&urn2url(urn:ietf:rfc:4551){CONDSTORE};|``ImapCapability.CondStore``|ImapMailboxInfo.IsModSequencesAvailable|常にfalseを返します。|
+
|~|~|ImapMessageInfo.ModSeq|常に0を返します。|
+
|~&urn2url(urn:ietf:rfc:6851){MOVE};|``ImapCapability.Move``|ImapMessageInfo.MoveTo(...)&br;ImapMessageInfoList.MoveTo(...)|CopyTo()+Delete()相当の動作となるため、UIDPLUSをサポートしていない場合は``\Deleted``が設定されている他のメッセージも同時に削除されます。|
+
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド・プロパティ|~サポートしていない場合の動作と注意事項|f
+

          
+
|*拡張機能をサポートしていない場合はImapIncapableExceptionをスローするメソッド
+
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|h
+
|~&urn2url(urn:ietf:rfc:5256){SORT};|``ImapCapability.Sort``|ImapOpenedMailboxInfo.GetSortedMessages(...)|
+
|~&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};|``ImapCapability.SpecialUse``|ImapClient.GetMailbox(ImapSpecialMailbox), ImapClient.OpenMailbox(ImapSpecialMailbox)などImapSpecialMailboxを引数にとるメソッド|
+
|~[[X-GM-EXT-1:https://developers.google.com/gmail/imap_extensions]]|``ImapCapability.GimapGmExt1``|ImapOpenedMailboxInfo.GetMessagesGmailSearch(...)|
+
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|f
+

          
+

          
+
:特記事項|GMailでSPECIAL-USEを無効化する場合は、ImapClient.DisabledCapabilitiesに``ImapCapability.SpecialUse``と``ImapCapability.GimapXlist``の両方を追加する必要があります。
+

          
 

        

        
 
***IMAPコマンドの引数およびレスポンスのデータ型
***IMAPコマンドの引数およびレスポンスのデータ型
 
(このドキュメントは作成中です)
(このドキュメントは作成中です)
 
-ImapStoreDataItem
-ImapStoreDataItem
 
-ImapSearchCriteria
-ImapSearchCriteria
 
-ImapSortCriteria
-ImapSortCriteria
-
-IImapBodyStructure
 
-IImapMessageFlagSet
-IImapMessageFlagSet
 
-IImapMailboxFlagSet
-IImapMailboxFlagSet
 

        

        

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

current previous
19,14 19,6
 
#googleadunit
#googleadunit
 
-開発版
-開発版
 
--[[http://svn.smdn.jp/anonsvn/tools/SimpleMailer/trunk/]]よりチェックアウトできます
--[[http://svn.smdn.jp/anonsvn/tools/SimpleMailer/trunk/]]よりチェックアウトできます
+
-1.0x
+
--${smdncms:distfilelink,SimpleMailer-1.00.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
----[[works/libs/Smdn.Net.Imap4.Client]] 1.00
+
----[[works/libs/Smdn.Net.Pop3.Client]] 1.20
+
----[[works/libs/Smdn.Security.Authentication.Sasl]] 1.00
+
----[[works/libs/Smdn.Formats.Mime]] 0.36
+
----[[works/libs/Smdn.Formats.Ini]] 0.22
 
-0.9x
-0.9x
 
--${smdncms:distfilelink,SimpleMailer-0.91.tar.bz2}
--${smdncms:distfilelink,SimpleMailer-0.91.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
94,9 86,6
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**1.00 (2014-04-23)
+
-ライブラリの更新のみ、本体部分は変更なし
+

          
 
**0.91 (2014-03-16)
**0.91 (2014-03-16)
 
-ライブラリの更新のみ、本体部分は変更なし
-ライブラリの更新のみ、本体部分は変更なし
 

        

        

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

current previous
19,16 19,6
 
#googleadunit
#googleadunit
 
-開発版
-開発版
 
--[[http://svn.smdn.jp/anonsvn/tools/MRAConnector/trunk/]]よりチェックアウトできます
--[[http://svn.smdn.jp/anonsvn/tools/MRAConnector/trunk/]]よりチェックアウトできます
+
-1.0x
+
--パッケージ
+
---${smdncms:distfilelink,MRAConnector-1.00.zip}
+
--ソースコード
+
---${smdncms:distfilelink,MRAConnector-1.00.tar.bz2}
+
----下記ライブラリのソースを同梱しています
+
-----[[works/libs/Smdn.Net.Imap4.Client]] 1.00
+
-----[[works/libs/Smdn.Net.Pop3.Client]] 1.20
+
-----[[works/libs/Smdn.Security.Authentication.Sasl]] 1.00
+
-----[[works/libs/Smdn.Formats.Ini]] 0.22
 
-0.9x
-0.9x
 
--パッケージ
--パッケージ
 
---${smdncms:distfilelink,MRAConnector-0.91.zip}
---${smdncms:distfilelink,MRAConnector-0.91.zip}
127,9 117,6
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
 
*変更履歴
*変更履歴
+
**1.00 (2014-04-23)
+
-ライブラリの更新のみ、本体部分は変更なし
+

          
 
**0.91 (2014-03-16)
**0.91 (2014-03-16)
 
-.NET Framework 4.0を使用するようにした
-.NET Framework 4.0を使用するようにした