2014-05-07T02:10:08の更新内容

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.02 (2014-05-07)>#changes_v1.02]]|~ソースコード|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02.tar.bz2}
+
}}|
+
|~|~DLL|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx4.5.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx4.0.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx3.5.zip,.NET 3.5}
+
}}|
+
|~|~DLL&br;([[単一アセンブリ版>#releases_combined]])|{{
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx4.5-combined.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx4.0-combined.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.02-netfx3.5-combined.zip,.NET 3.5}
+
}}|
 
|~[[1.01 (2014-04-26)>#changes_v1.01]]|~ソースコード|{{
|~[[1.01 (2014-04-26)>#changes_v1.01]]|~ソースコード|{{
 
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.01.tar.bz2}
${smdncms:distfilelink,../Smdn.Net.Imap4.Client-1.01.tar.bz2}
 
}}|
}}|
271,31 258,6
 
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
コンパイラにMono mcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
 

        

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

          
 
**1.01 (2014-04-26) [#changes_v1.01]
**1.01 (2014-04-26) [#changes_v1.01]
 
-機能追加
-機能追加
 
--ImapEnvelope.GetDecodedSubject()を追加、デコード済みのsubjectを取得できるようにした
--ImapEnvelope.GetDecodedSubject()を追加、デコード済みのsubjectを取得できるようにした

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.02.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Imap4.Client-1.01.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]]をご覧ください
 

        

        

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

current previous
2,7 2,7
 
${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.02>works/libs/Smdn.Net.Imap4.Client/releases#changes_v1.02]]時点のものです。
[[works/libs/Smdn.Net.Imap4.Client]]のドキュメントとサンプルです。 ここに記載されているものは[[version 1.01>works/libs/Smdn.Net.Imap4.Client/releases#changes_v1.01]]時点のものです。
 

        

        
 
認証・接続のサンプルコードは[[#connection_authentication_examples]]、IMAP操作を行う具体例は[[#operation_examples]]に記載しています。
認証・接続のサンプルコードは[[#connection_authentication_examples]]、IMAP操作を行う具体例は[[#operation_examples]]に記載しています。
 

        

        
556,7 556,7
 
        }
        }
 

        

        
 
        // INBOXの下にあるメールボックス「後で」を取得または作成する
        // INBOXの下にあるメールボックス「後で」を取得または作成する
~
        ImapMailboxInfo pendingBox = inbox.GetOrCreateChild("後で");
        ImapMailboxInfo pendingBox = client.GetOrCreateMailbox("INBOX.後で");
 

        

        
 
        // 「後で」フラグが付けられているメッセージを取得したメールボックスに移動する
        // 「後で」フラグが付けられているメッセージを取得したメールボックスに移動する
 
        messages.MoveTo(pendingBox);
        messages.MoveTo(pendingBox);
589,7 589,7
 
        Next
        Next
 

        

        
 
        ' INBOXの下にあるメールボックス「後で」を取得または作成する
        ' INBOXの下にあるメールボックス「後で」を取得または作成する
~
        Dim pendingBox As ImapMailboxInfo = inbox.GetOrCreateChild("後で")
        Dim pendingBox As ImapMailboxInfo = client.GetOrCreateMailbox("INBOX.後で")
 

        

        
 
        ' 「後で」フラグが付けられているメッセージを取得したメールボックスに移動する
        ' 「後で」フラグが付けられているメッセージを取得したメールボックスに移動する
 
        messages.MoveTo(pendingBox)
        messages.MoveTo(pendingBox)
660,7 660,7
 
  Console.WriteLine(mailbox.ExistMessageCount);
  Console.WriteLine(mailbox.ExistMessageCount);
 

        

        
 
  // ImapMailboxListOptions.RequestStatusを指定してメールボックスを取得する
  // ImapMailboxListOptions.RequestStatusを指定してメールボックスを取得する
~
  mailbox = client.GetMailbox("bar", ImapMailboxListOptions.RequestStatus);
  mailbox = client.GetMailbox("foo", ImapMailboxListOptions.RequestStatus);
 

        

        
 
  // メールボックスに存在するメッセージ数が出力される
  // メールボックスに存在するメッセージ数が出力される
 
  Console.WriteLine(mailbox.ExistMessageCount);
  Console.WriteLine(mailbox.ExistMessageCount);
885,7 885,7
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
~
この例で使用しているImapSearchCriteriaについては[[#operation_examples_message_search]]および[[#operation_reference_message_get_searchcriteria]]を参照してください。 また、メッセージを削除する際の注意点については[[#operation_examples_message_delete]]もご覧ください。
この例で使用しているImapSearchCriteriaについては[[#operation_examples_message_search]]を参照してください。 また、メッセージを削除する際の注意点については[[#operation_examples_message_delete]]もご覧ください。
 

        

        
 
***メッセージの操作 [#operation_examples_message]
***メッセージの操作 [#operation_examples_message]
 
****メッセージの取得と通番・UID [#operation_examples_message_number]
****メッセージの取得と通番・UID [#operation_examples_message_number]
1121,8 1121,6
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
ImapSearchCriteriaで指定できる検索クエリの種類については[[#operation_reference_message_get_searchcriteria]]を参照してください。
+

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

        

        
 
#tabpage(codelang=cs,container-title=GMailの詳細検索クエリを使った検索の例)
#tabpage(codelang=cs,container-title=GMailの詳細検索クエリを使った検索の例)
1147,56 1145,9
 

        

        
 

        

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

          
+
#tabpage(codelang=cs,container-title=ImapMessageInfoListの動作)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  // INBOXを開く
+
  using (ImapOpenedMailboxInfo inbox = client.OpenInbox()) {
+
    // INBOX内にあるすべてのメッセージを取得する
+
    // (ここではまだコマンドは発行されない)
+
    ImapMessageInfoList messages = inbox.GetMessages();
+

          
+
    // ImapMessageInfoListを列挙してImapMessageInfoを取得する
+
    // (この時点でコマンドが発行される)
+
    foreach (ImapMessageInfo m in messages) {
+
      Console.WriteLine(m.Sequence);
+
    }
+

          
+
    // ImapMessageInfoListはIList<ImapMessageInfo>ではないので
+
    // Countなどのプロパティやインデクサ、Add/Removeなどのメソッドは持たない
+
    Console.WriteLine(messages.Count);
+
    Console.WriteLine(messages[0].Sequence);
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
したがって、メールボックス内のメッセージを取得・検索した結果を''ImapMessageInfoのコレクション''として保持しておきたい場合、ImapMessageInfoListからList<ImapMessageInfo>などに変換する必要があります。
+

          
+
#tabpage(codelang=cs,container-title=ImapMessageInfoListからList<ImapMessageInfo>への変換)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  // INBOXを開く
+
  using (ImapOpenedMailboxInfo inbox = client.OpenInbox()) {
+
    // INBOX内にあるすべてのメッセージを取得する
+
    // (ここではまだコマンドは発行されない)
+
    ImapMessageInfoList messages = inbox.GetMessages();
 

        

        
~
    // ImapMessageInfoListからList<ImapMessageInfo>を作成する
複数のメッセージをまとめてコピー・削除したりすることができるように、ImapMessageInfoListクラスには[[CopyToメソッドやDeleteメソッド>#operation_reference_message_control]]などImapMessageInfoと共通のメソッドが複数用意されています。 ImapMessageInfoListクラスのメソッドを使うことにより、複数のメッセージに対する操作の場合でもメッセージの数に関わらず一度のコマンド発行で済ませることができます。
+
    // (この時点でコマンドが発行される)
+
    List<ImapMessageInfo> messageList = new List<ImapMessageInfo>(messages);
+

          
+
    // List<T>のメンバを使って操作することができる
+
    Console.WriteLine(messageList.Count);
+
    Console.WriteLine(messageList[0].Sequence);
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
一方、ImapMessageInfoListクラスには複数のメッセージをまとめてコピー・削除したりすることができるように、[[CopyToメソッドやDeleteメソッド>#operation_reference_message_control]]などImapMessageInfoと共通のメソッドが複数用意されています。 ImapMessageInfoListクラスのメソッドを使うことにより、複数のメッセージに対する操作の場合でもメッセージの数に関わらず一度のコマンド発行で済ませることができます。
 

        

        
 
#tabpage(codelang=cs,container-title=複数のメッセージを別のメールボックスにコピーする例)
#tabpage(codelang=cs,container-title=複数のメッセージを別のメールボックスにコピーする例)
 
#code{{
#code{{
1212,7 1163,7
 
}
}
 
}}
}}
 

        

        
~
以下のコードは上記のコードと結果は同じですが、メッセージの数だけコマンド発行が行われる点で動作が異なります。
以下のコードは上記のコードと結果は同じですが、メッセージの数だけコマンド発行が行われます。
 

        

        
 
#code{{
#code{{
 
using (ImapClient client = new ImapClient()) {
using (ImapClient client = new ImapClient()) {
1222,44 1173,15
 
    ImapMessageInfoList answerdMessages = inbox.GetMessages(ImapSearchCriteria.Answered);
    ImapMessageInfoList answerdMessages = inbox.GetMessages(ImapSearchCriteria.Answered);
 

        

        
 
    // 取得できたメッセージを列挙
    // 取得できたメッセージを列挙
~
    foreach (ImapMessageInfo m in answerdMessages) {
    foreach (ImapMessageInfo answerdMessage in answerdMessages) {
 
      // メッセージをメールボックス「返信済み」にコピーする
      // メッセージをメールボックス「返信済み」にコピーする
~
      m.CopyTo("返信済み");
      answerdMessage.CopyTo("返信済み");
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
ImapMessageInfoListクラスは、検索などの''クエリは保持しますが、結果はキャッシュしません''。 列挙を行う度に同じクエリでコマンドの再発行を行います。 そのため、同じImapMessageInfoListを何度も列挙する場合、一度目に列挙した際と同じ結果が得られるとは限りません。 したがって、結果を保持しておきたい場合は、他の処理を行う前にImapMessageInfoListからList<ImapMessageInfo>などに変換する必要があります。
+

          
+
#tabpage(codelang=cs,container-title=ImapMessageInfoListの再列挙とその動作)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  // INBOXを開く
+
  using (ImapOpenedMailboxInfo inbox = client.OpenInbox()) {
+
    // 未読メッセージを取得する
+
    ImapMessageInfoList unseenMessages = inbox.GetMessages(ImapSearchCriteria.Unseen);
+

          
+
    // 得られたImapMessageInfoListを列挙して、各未読メッセージの通番を表示する
+
    foreach (ImapMessageInfo m in unseenMessages) {
+
      Console.WriteLine(m.Sequence);
+
    }
+

          
+
    // 取得した未読メッセージを、すべて既読にする
+
    unseenMessages.MarkAsSeen();
+

          
+
    // 再び同じImapMessageInfoListを列挙する (未読メッセージはすべて既読に
+
    // なっているので、ここでは何も列挙されない)
+
    foreach (ImapMessageInfo m in unseenMessages) {
+
      Console.WriteLine(m.Sequence);
 
    }
    }
 
  }
  }
 
}
}
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+

          
 
****メッセージの削除 [#operation_examples_message_delete]
****メッセージの削除 [#operation_examples_message_delete]
 
IMAPでは、メッセージの削除を行う場合、まず``\Deleted``フラグを設定することにより''削除予定''であることをマークし([[#operation_examples_message_flags]])、その後EXPUNGEコマンドまたはCLOSEコマンドを発行することにより``\Deleted``フラグが設定されたメッセージの削除が行われます。
IMAPでは、メッセージの削除を行う場合、まず``\Deleted``フラグを設定することにより''削除予定''であることをマークし([[#operation_examples_message_flags]])、その後EXPUNGEコマンドまたはCLOSEコマンドを発行することにより``\Deleted``フラグが設定されたメッセージの削除が行われます。
 

        

        
1392,7 1314,7
 
}}
}}
 
#column-end
#column-end
 

        

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

        

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

        

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

        

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

        

        
 
#tabpage(codelang=cs,container-title=BODYSTRUCTUREの参照)
#tabpage(codelang=cs,container-title=BODYSTRUCTUREの参照)
 
#code{{
#code{{
1527,7 1449,7
 
    // ImapMultiPartBodyStructureにキャストして更に詳細な情報を取得する
    // ImapMultiPartBodyStructureにキャストして更に詳細な情報を取得する
 
    var multipartStructure = sectionStructure as ImapMultiPartBodyStructure;
    var multipartStructure = sectionStructure as ImapMultiPartBodyStructure;
 

        

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

        

        
 
    // このセクションで入れ子になっている構造を列挙して再帰的に表示する
    // このセクションで入れ子になっている構造を列挙して再帰的に表示する
 
    foreach (var nestedStructure in sectionStructure) {
    foreach (var nestedStructure in sectionStructure) {
1566,9 1488,9
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

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

        

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

        

        
 
#tabpage(codelang=cs,container-title=特定のセクションを取得する例)
#tabpage(codelang=cs,container-title=特定のセクションを取得する例)
 
#code{{
#code{{
1643,197 1565,7
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
+
****メッセージのソート [#operation_examples_message_threading]
+
IMAP拡張コマンドであるSORTコマンド(&urn2url(urn:ietf:rfc:5256);)をサポートしているサーバーでは、このコマンドを使うことによりメールボックス内のメッセージをソートした状態で取得することができます。 このソート処理はIMAPサーバー側で行われます。 ソート済みのメッセージの取得には、[[ImapOpenedMailboxInfo.GetSortedMessages()メソッド>#operation_reference_message_get]]を使うことができます。 引数のImapSortCriteriaによってソート順序を指定できるほか、ImapSortCriteriaの値を組み合わせることにより比較結果が同値だった場合のソート条件を複数指定することができます。
+

          
+
#tabpage(codelang=cs,container-title=ソート済みメッセージの取得)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // メールボックス内のすべてのメッセージを取得する (順不同で列挙される)
+
    foreach (var message in mailbox.GetMessages()) {
+
      Console.WriteLine(message.Sequence);
+
    }
+

          
+
    // メールボックス内のすべてのメッセージをソートして取得する
+
    // (送信日時順・昇順で列挙される)
+
    foreach (var message in mailbox.GetSortedMessages(ImapSortCriteria.Date)) {
+
      Console.WriteLine(message.Sequence);
+
    }
+

          
+
    // サブジェクト順・昇順で列挙される、サブジェクトが同じ場合は送信日時順・昇順で列挙される
+
    foreach (var message in mailbox.GetSortedMessages(ImapSortCriteria.Subject + ImapSortCriteria.Date)) {
+
      Console.WriteLine(message.Sequence);
+
    }
+

          
+
    // 送信日時・降順で列挙される、送信日時が同じ場合はサブジェクト順・昇順で列挙される
+
    foreach (var message in mailbox.GetSortedMessages(ImapSortCriteria.DateReverse + ImapSortCriteria.Subject)) {
+
      Console.WriteLine(message.Sequence);
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
ImapSortCriteriaで指定できるソート順序については[[#operation_reference_message_get_sortcriteria]]を参照してください。
+

          
+
ImapOpenedMailboxInfo.GetSortedMessages()メソッドが返すImapMessageInfoListは、ソートされた順序で列挙される点を除けばGetMessages()メソッドなどの場合と同様に動作します。 さらに、GetSortedMessages()メソッドは[[#operation_examples_message_search]]と同様に[[ImapSearchCriteria>#operation_reference_message_get_searchcriteria]]を指定することで、指定された条件にマッチするメッセージのみを取得してソートさせることもできます。
+

          
+
なお、サーバーがSORTコマンドをサポートしていない場合、このメソッドは例外ImapIncapableExceptionをスローします。 ([[#operation_examples_misc_extension_specs]]も合わせて参照してください。)
+

          
+
****メッセージのスレッド化 [#operation_examples_message_threading]
+
IMAP拡張コマンドであるTHREADコマンド(&urn2url(urn:ietf:rfc:5256);)をサポートしているサーバーでは、このコマンドを使うことによりメールボックス内のメッセージをスレッド化した状態で取得することができます。 スレッド化されたメッセージツリーの取得には、[[ImapOpenedMailboxInfo.GetThreadedMessages()メソッド>#operation_reference_message_get]]を使うことができます。
+

          
+
#tabpage(codelang=cs,container-title=スレッド化したメッセージの取得)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // REFERENCES(Message-IDとIn-Reply-Toによるスレッド化アルゴリズム)を使って
+
    // スレッド化したメッセージを取得する
+
    ImapMessageInfoThread thread = mailbox.GetThreadedMessages(ImapThreadingAlgorithm.References);
+

          
+
    // スレッド内を走査して各メッセージの階層構造を表示
+
    thread.Traverse(delegate(ImapMessageInfoThread t) {
+
      Console.WriteLine("{0}{1}", new string(' ', (t.Depth - 1) * 2), t.Message.Sequence);
+
    });
+

          
+
    // スレッド内の最上位のメッセージを表示
+
    Console.WriteLine("[thread root]");
+

          
+
    foreach (ImapMessageInfoThread c in thread.Children) {
+
      Console.WriteLine(c.Message.Sequence);
+
    }
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
例えばメールボックス内に次のような通番のメッセージが格納されている場合の実行結果は次のようになります。
+

          
+
#column
+
#preformatted(メールボックス内のメッセージ){{
+
[#1] Thread1
+
 +--[#2] Re: Thread1
+
 |   +--[#3] Re:Re:Thread1
+
 |   |   +--[#4] Re:Re:Re:Thread1
+
 |   |   `--[#5] Re:Re:Re:Thread1
+
 |   `--[#6] Re:Re:Thread1
+
 +--[#7] Re:Thread1
+
 |   `--[#8] Re:Re:Thread1
+
 `--[#9] Re:Thread1
+
[#10] Thread2
+
 +--[#11] Re:Thread2
+
 `--[#12] Re:Thread2
+
}}
+
#column
+
#prompt(上記サンプルの実行結果例){{
+
1
+
  2
+
    3
+
      4
+
      5
+
    6
+
  7
+
    8
+
  9
+
10
+
  11
+
  12
+
[thread root]
+
1
+
10
+
}}
+
#column-end
+

          
+
この例のようにImapMessageInfoThread.Traverse()メソッドを使うことでスレッド内を走査することができます。 このメソッドを使うことにより、スレッド内を再帰的に走査して子スレッドのImapMessageInfoThreadに対して操作を行うことができます。 また、ImapMessageInfoThread.Messageプロパティを参照することでスレッドに割り当てられているメッセージのImapMessageInfoを取得することができます。 このほか、ImapMessageInfoThread.Depthプロパティではスレッドの深さ、Childrenプロパティではスレッドから吊り下がっている子スレッドのImapMessageInfoThreadを取得することができます。
+

          
+
ImapMessageInfoThreadがスレッド全体を格納するコンテナとなっている場合(GetThreadedMessages()が直接返す値の場合)では、IsRootプロパティが``true``となり、Messageプロパティを取得しようとした場合には例外NotSupportedExceptionをスローします。 なお、ImapMessageInfoThreadはImapMessageInfoListとは異なり遅延実行はされません。 ImapMessageInfoThreadのメソッドやプロパティを参照することで追加のコマンドが発行されることはありません。
+

          
+
ImapMessageInfoThread.Traverseメソッドには、スレッド内の走査の際に、スレッドに入る時とスレッドから出る時のそれぞれでコールバックさせることができるバージョンも用意しています。 以下は、スレッド化したメッセージをXML化する例です。
+

          
+
#tabpage(codelang=cs,container-title=スレッド化したメッセージを取得してXML化する例)
+
#code{{
+
using (ImapClient client = new ImapClient()) {
+
  using (var mailbox = client.OpenInbox()) {
+
    // メッセージをスレッド化すると同時に、各メッセージの静的属性も取得する
+
    ImapMessageInfoThread thread = mailbox.GetThreadedMessages(ImapThreadingAlgorithm.References,
+
                                                               ImapMessageFetchAttributeOptions.StaticAttributes);
+

          
+
    // スレッドをXMLツリー化する
+
    XElement root = new XElement("root");
+
    XElement parent = root;
+

          
+
    // スレッド内を走査する
+
    thread.Traverse(
+
      // スレッドに入るときの処理
+
      delegate(ImapMessageInfoThread t) {
+
        // ノードを作成し、通番とサブジェクトの属性を追加する
+
        var node = new XElement("node");
+

          
+
        node.Add(new XAttribute("Sequence", t.Message.Sequence));
+
        node.Add(new XAttribute("Subject", t.Message.EnvelopeSubject));
+

          
+
        // 親ツリーに追加する
+
        parent.Add(node);
+

          
+
        // 現在のノードを次の親ツリーにする
+
        parent = node;
+
      },
+
      // スレッドから出るときの処理
+
      delegate(ImapMessageInfoThread t) {
+
        // 親ツリーに戻る
+
        parent = parent.Parent;
+
      }
+
    );
+

          
+
    Console.WriteLine(root);
+
  }
+
}
+
}}
+
#tabpage-end
+

          
+
#column
+
#preformatted(メールボックス内のメッセージ){{
+
[#1] Thread1
+
 +--[#2] Re: Thread1
+
 |   +--[#3] Re:Re:Thread1
+
 |   |   +--[#4] Re:Re:Re:Thread1
+
 |   |   `--[#5] Re:Re:Re:Thread1
+
 |   `--[#6] Re:Re:Thread1
+
 +--[#7] Re:Thread1
+
 |   `--[#8] Re:Re:Thread1
+
 `--[#9] Re:Thread1
+
[#10] Thread2
+
 +--[#11] Re:Thread2
+
 `--[#12] Re:Thread2
+
}}
+
#column
+
#prompt(上記サンプルの実行結果例){{
+
<root>
+
  <node Sequence="1" Subject="Thread1">
+
    <node Sequence="2" Subject="Re: Thread1">
+
      <node Sequence="3" Subject="Re: Re: Thread1">
+
        <node Sequence="4" Subject="Re: Re: Re: Thread1" />
+
        <node Sequence="5" Subject="Re: Re: Re: Thread1" />
+
      </node>
+
      <node Sequence="6" Subject="Re: Re: Thread1" />
+
    </node>
+
    <node Sequence="7" Subject="Re: Thread1">
+
      <node Sequence="8" Subject="Re: Re: Thread1" />
+
    </node>
+
    <node Sequence="9" Subject="Re: Thread1" />
+
  </node>
+
  <node Sequence="10" Subject="Thread2">
+
    <node Sequence="11" Subject="Re: Thread2" />
+
    <node Sequence="12" Subject="Re: Thread2" />
+
  </node>
+
</root>
+
}}
+
#column-end
 

        

        
+
さらに、ImapOpenedMailboxInfo.GetThreadedMessages()メソッドは[[#operation_examples_message_search]]と同様にImapSearchCriteriaを指定することで、指定された条件にマッチするメッセージのみをスレッド化して取得することもできます。
+

          
+
なお、サーバーがTHREADコマンドをサポートしていない場合、このメソッドは例外ImapIncapableExceptionをスローします。 ([[#operation_examples_misc_extension_specs]]も合わせて参照してください。)
 

        

        
 
***その他の操作 [#operation_examples_misc]
***その他の操作 [#operation_examples_misc]
 
****サーバーからの通知 [#operation_examples_misc_notification]
****サーバーからの通知 [#operation_examples_misc_notification]
1991,17 1723,6
 
::RequestStatus|メールボックスの取得と同時に、メールボックスのメッセージ数などのステータスも取得します。 このオプションを指定しない場合は、ステータスは取得しません。
::RequestStatus|メールボックスの取得と同時に、メールボックスのメッセージ数などのステータスも取得します。 このオプションを指定しない場合は、ステータスは取得しません。
 
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
 
:ImapSpecialMailboxを引数にとるメソッド|サーバが&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};をサポートしていない場合は、ImapIncapableExceptionをスローします。
:ImapSpecialMailboxを引数にとるメソッド|サーバが&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};をサポートしていない場合は、ImapIncapableExceptionをスローします。
+
ImapSpecialMailboxで指定できる値は次のとおりです。
+

          
+
|*ImapSpecialMailboxで指定できる値
+
|~値|~解説|~対応するメールボックスのフラグ|h
+
|ImapSpecialMailbox.All|すべてのメールが格納されているメールボックスを表します。|``\All``|
+
|ImapSpecialMailbox.Archive|アーカイブされたメールが格納されているメールボックスを表します。|``\Archive``|
+
|ImapSpecialMailbox.Drafts|下書きのメール・未送信のメールが格納されているメールボックスを表します。|``\Drafts``|
+
|ImapSpecialMailbox.Flagged|何らかのフラグが設定されているメールが格納されているメールボックスを表します。|``\Flagged``|
+
|ImapSpecialMailbox.Junk|スパムや迷惑メールなどが格納されているメールボックスを表します。|``\Junk``|
+
|ImapSpecialMailbox.Sent|送信済みのメールが格納されているメールボックスを表します。|``\Sent``|
+
|ImapSpecialMailbox.Trash|削除済みや削除予定のメールが格納されているメールボックスを表します。|``\Trash``|
 

        

        
 
****メールボックス名の結合・分割 [#operation_reference_mailbox_name]
****メールボックス名の結合・分割 [#operation_reference_mailbox_name]
 
以下はメールボックスの結合・分割に関するメソッドです。
以下はメールボックスの結合・分割に関するメソッドです。
2071,27 1792,24
 
以下はメールボックスの状態を表すプロパティです。
以下はメールボックスの状態を表すプロパティです。
 

        

        
 
|*メールボックスの状態を表すプロパティ
|*メールボックスの状態を表すプロパティ
~
|>|~クラス|>|~プロパティ|~解説|h
|~クラス|~プロパティ|~解説|h
~
|>|~ImapMailboxInfo|>|FullName|階層を含むメールボックスの完全な名前を返します。|
|~ImapMailboxInfo|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を返します。|
~
|~|~|HighestModSeq|メールボックス内のメッセージに設定されている``mod-sequence``値のうち最大の値を返します。|
|~クラス|~プロパティ|~解説|f
+
|>|~クラス|>|~プロパティ|~解説|f
+

          
+
:メールボックスのサイズに関するプロパティ|これらのプロパティは、[[ImapClient.GetMailbox()などのメソッド>#operation_reference_mailbox_getcreate]]の引数でImapMailboxListOptions.RequestStatusを指定しなかった場合は0を返します。 また、[[ImapMailboxInfo.Refresh()などのメソッド>#operation_reference_mailbox_control]]を実行した後に値が更新されることがあります。
 

        

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

        

        
 
***選択済みメールボックスに対する操作 [#operation_reference_selectedmailbox]
***選択済みメールボックスに対する操作 [#operation_reference_selectedmailbox]
 
****選択済みメールボックスの操作 [#operation_reference_selectedmailbox_control]
****選択済みメールボックスの操作 [#operation_reference_selectedmailbox_control]
~
以下は選択済みメールボックスの操作に関するメソッドです。 これ以外にも、[[GetChild()>#operation_reference_mailbox_getcreate]]や[[MoveTo()>#operation_reference_mailbox_control]]などImapMailboxInfoから継承されるメソッドも使うことができます。
以下は選択済みメールボックスの操作に関するメソッドです。
 

        

        
 
|*選択済みメールボックスの操作に関するメソッド
|*選択済みメールボックスの操作に関するメソッド
 
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
2147,7 1865,7
 
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
 
****選択済みメールボックスの状態 [#operation_reference_selectedmailbox_status]
****選択済みメールボックスの状態 [#operation_reference_selectedmailbox_status]
~
以下は選択済みメールボックスの状態を表すプロパティです。 これ以外にも、[[ImapMailboxInfoから継承されるプロパティ>#operation_reference_mailbox_status]]も参照することができます。
以下は選択済みメールボックスの状態を表すプロパティです。
 

        

        
 
|*選択済みメールボックスの状態を表すプロパティ
|*選択済みメールボックスの状態を表すプロパティ
 
|~クラス|~プロパティ|~解説|h
|~クラス|~プロパティ|~解説|h
2218,7 1936,7
 
}}|StartWaitForMessageArrivalで開始したアイドル状態から復帰します。 待機中に新着メッセージを受信していた場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。|-|
}}|StartWaitForMessageArrivalで開始したアイドル状態から復帰します。 待機中に新着メッセージを受信していた場合は、戻り値のImapMessageInfoListに新着メッセージが含まれます。|-|
 

        

        
 
:NOOPの送信間隔 (pollingInterval)|サーバがIDLEをサポートしていない場合、IDLEでの待機の代わりに、引数pollingIntervalで指定された間隔でNOOPを送信します。 指定しなかった場合はデフォルトの動作として10分おきにNOOPを送信します。 IDLEをサポートしている場合は、引数pollingIntervalの指定は動作に影響しません。
:NOOPの送信間隔 (pollingInterval)|サーバがIDLEをサポートしていない場合、IDLEでの待機の代わりに、引数pollingIntervalで指定された間隔でNOOPを送信します。 指定しなかった場合はデフォルトの動作として10分おきにNOOPを送信します。 IDLEをサポートしている場合は、引数pollingIntervalの指定は動作に影響しません。
~
:メッセージ属性の取得オプション(ImapMessageFetchAttributeOptions)|ImapMessageFetchAttributeOptionsについては、[[ImapOpenedMailboxInfo.GetMessages()等のメソッドの解説>#operation_reference_message_get]]を参照してください。
:メッセージ属性の取得オプション(ImapMessageFetchAttributeOptions)|ImapMessageFetchAttributeOptionsについては、ImapOpenedMailboxInfo.GetMessages()等のメソッドの解説を参照してください。
 
:待機中の操作とイベント|IDLEを開始してから終了するまでの間は、他のコマンドを実行することはできません。 待機中に他の操作を行おうとした場合、例外をスローします。
:待機中の操作とイベント|IDLEを開始してから終了するまでの間は、他のコマンドを実行することはできません。 待機中に他の操作を行おうとした場合、例外をスローします。
 
また、待機中は受信したレスポンスに応じてImapClient.ExistMessageCountChangedなどのイベントが発生します。
また、待機中は受信したレスポンスに応じてImapClient.ExistMessageCountChangedなどのイベントが発生します。
 
そのため、これらのイベントハンドラで何らかの操作を行うようにしていると、例外がスローされてしまうため注意してください。
そのため、これらのイベントハンドラで何らかの操作を行うようにしていると、例外がスローされてしまうため注意してください。
2236,11 1954,8
 
|~|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|
 
|~|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|
|~|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|
+
|~|GetSortedMessages(ImapSortCriteria)&br;GetSortedMessages(ImapSortCriteria, 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コマンドをサポートしていない場合は、ImapIncapableExceptionをスローします。|SORT|
+
|~|GetThreadedMessages(ImapThreadingAlgorithm)&br;GetThreadedMessages(ImapThreadingAlgorithm, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージを指定したアルゴリズムでスレッド化した状態で取得します。&br;サーバがTHREADコマンドをサポートしていない場合は、ImapIncapableExceptionをスローします。|THREAD|
+
|~|GetThreadedMessages(ImapThreadingAlgorithm, ImapSearchCriteria)&br;GetThreadedMessages(ImapThreadingAlgorithm, ImapSearchCriteria, Encoding)&br;GetThreadedMessages(ImapThreadingAlgorithm, ImapSearchCriteria, Encoding, ImapMessageFetchAttributeOptions)|メールボックスにあるメッセージのうち、指定した検索条件にマッチするメッセージのみを指定したアルゴリズムでスレッド化した状態で取得します。 オプションでエンコーディングを指定できます。&br;サーバがTHREADコマンドをサポートしていない場合は、ImapIncapableExceptionをスローします。|THREAD|
 
|~ImapMessageInfoList|GetEnumerator()|ImapMessageInfoListインスタンスに対して列挙操作を行うことにより、ImapMessageInfoインスタンスを取得できます。|FETCH|
|~ImapMessageInfoList|GetEnumerator()|ImapMessageInfoListインスタンスに対して列挙操作を行うことにより、ImapMessageInfoインスタンスを取得できます。|FETCH|
 
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
2260,70 1975,6
 
:ImapMessageInfoList.GetEnumerator()|このメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
:ImapMessageInfoList.GetEnumerator()|このメソッドは、このメソッドは遅延実行を使用して実装されます。 実際に列挙を開始するまで、コマンドの送受信は行われません。
 
:エンコーディング|サーバーが指定されたエンコーディングをサポートしていないことを示すレスポンス(``[BADCHARSET]``)を返した場合は、例外Smdn.Formats.EncodingNotSupportedExceptionをスローします。
:エンコーディング|サーバーが指定されたエンコーディングをサポートしていないことを示すレスポンス(``[BADCHARSET]``)を返した場合は、例外Smdn.Formats.EncodingNotSupportedExceptionをスローします。
 

        

        
+
*****メッセージの検索クエリ(ImapSearchCriteria) [#operation_reference_message_get_searchcriteria]
+
ImapSearchCriteriaクラスはメッセージの検索クエリを表すクラスです。 各フィールドを単体で指定することができるほか、``&``演算子、``|``演算子やImapSearchCriteria.And(), Or()メソッドを使うことでImapSearchCriteria同士を結合し、複雑な検索クエリを組み立てることもできます。
+

          
+
|*検索クエリのフィールド・メソッド
+
|~クラス|>|~フィールド/メソッド|~検索クエリのマッチ対象|~補足|h
+
|~ImapSearchCriteria|>|All|すべてのメッセージ。||
+
|~|メッセージのフラグ|Answered|返信済みフラグ(``\Answered``)が設定''されている''メッセージ。||
+
|~|~|Unanswered|返信済みフラグ(``\Answered``)が設定''されていない''メッセージ。||
+
|~|~|Deleted|削除予定フラグ(``\Deleted``)が設定''されている''メッセージ。||
+
|~|~|Undeleted|削除予定フラグ(``\Deleted``)が設定''されていない''メッセージ。||
+
|~|~|Draft|下書きフラグ(``\Draft``)が設定''されている''メッセージ。||
+
|~|~|Undraft|下書きフラグ(``\Draft``)が設定''されていない''メッセージ。||
+
|~|~|Flagged|''フラグ済み''フラグ(``\Flagged``)が設定''されている''メッセージ。||
+
|~|~|Unflagged|''フラグ済み''フラグ(``\Flagged``)が設定''されていない''メッセージ。||
+
|~|~|Recent|新着フラグ(``\Recent``)が設定''されている''メッセージ。||
+
|~|~|Seen|既読フラグ(``\Seen``)が設定''されている''メッセージ。||
+
|~|~|Unseen|既読フラグ(``\Seen``)が設定''されていない''メッセージ。||
+
|~|~|Keyword(ImapMessageFlag)&br;Keyword(string)|指定されたキーワードもしくはフラグが設定''されている''メッセージ。||
+
|~|~|Unkeyword(ImapMessageFlag)&br;Unkeyword(string)|指定されたキーワードもしくはフラグが設定''されていない''メッセージ。||
+
|~|~|New|新着フラグ(``\Recent``)が設定されているが、既読フラグ(``\Seen``)が設定が設定されていないメッセージ。&br;``ImapSearchCriteria.Recent & ImapSearchCriteria.Unseen``と同等。||
+
|~|~|Old|新着フラグ(``\Recent``)が設定されていないメッセージ。&br;``!ImapSearchCriteria.Recent``と同等。||
+
|~|メッセージのヘッダ・本文|Body(string)|メッセージ本文に指定された文字列が含まれているメッセージ。||
+
|~|~|Text(string)|メッセージ本文もしくはヘッダ部分に指定された文字列が含まれているメッセージ。||
+
|~|~|Header(string, string)|指定されたヘッダフィールドに指定された文字列が含まれているメッセージ。 空の検索文字列を指定した場合は、単にそのヘッダーフィールドが含まれているメッセージ。||
+
|~|~|Subject(string)|Subjectヘッダに指定された文字列が含まれているメッセージ。||
+
|~|~|From(string)|Fromヘッダに指定された文字列が含まれているメッセージ。||
+
|~|~|To(string)|Toヘッダに指定された文字列が含まれているメッセージ。||
+
|~|~|Cc(string)|CCヘッダに指定された文字列が含まれているメッセージ。||
+
|~|~|Bcc(string)|BCCヘッダに指定された文字列が含まれているメッセージ。||
+
|~|メッセージのサイズ|Larger(long)|サイズが指定されたオクテット数より大きいメッセージ。||
+
|~|~|Smaller(long)|サイズが指定されたオクテット数よりも小さいメッセージ。||
+
|~|メッセージの日付|On(DateTime)|指定された日付にメールボックスに追加されたメッセージ。|日付はINTERNALDATE(ImapMessageInfo.InternalDateの値)で判断されます。&br;指定したDateTimeの時刻部分は無視されます。|
+
|~|~|Before(DateTime)|指定された日付以前にメールボックスに追加されたメッセージ。|~|
+
|~|~|Since(DateTime)|指定された日付以降にメールボックスに追加されたメッセージ。|~|
+
|~|~|Older(TimeSpan)&br;Older(long)|現在時刻から指定された秒数以前にメールボックスに追加されたメッセージ。|時刻はINTERNALDATE(ImapMessageInfo.InternalDateの値)で判断されます。 時刻の解像度は1秒単位です。&br;サーバが&urn2url(urn:ietf:rfc:5032);をサポートしていない場合は、ImapIncapableExceptionをスローします。|
+
|~|~|Younger(TimeSpan)&br;Younger(long)|現在時刻から指定された秒数以内にメールボックスに追加されたメッセージ。|~|
+
|~|~|SentOn(DateTime)|指定された日付に送信されたメッセージ。|日付はDateヘッダの値で判断されます。&br;指定したDateTimeの時刻部分は無視されます。|
+
|~|~|SentBefore(DateTime)|指定された日付以前に送信されたメッセージ。|~|
+
|~|~|SentSince(DateTime)|指定された日付以降に送信されたメッセージ。|~|
+
|~|メッセージの通番・UID|SequenceSet(ImapSequenceSet)|指定された通番を持つメッセージ。|一つ以上の通番・UIDを指定することができます。|
+
|~|~|Uid(ImapSequenceSet)|指定されたUIDを持つメッセージ。|~|
+
|~|~|SequenceOrUidSet(ImapSequenceSet)|指定された通番もしくはUIDを持つメッセージ。|通番とUIDどちらでの検索になるかは指定されるImapSequenceSet.IsUidSetプロパティの値で決まります。|
+
|~|検索クエリの結合|Not()&br;``!``演算子|検索クエリに一致しないメッセージ。|演算子とインスタンスメソッドの他、同名の静的メソッドを使うこともできます。|
+
|~|~|Or(ImapSearchCriteria)&br;``&#x7c;``演算子|二つの検索クエリのどちらかに一致するメッセージ。|~|
+
|~|~|And(ImapSearchCriteria)&br;``&``演算子|二つの検索クエリの両方に一致するメッセージ。|~|
+
|~クラス|>|~フィールド/メソッド|~検索クエリのマッチ対象|~補足|f
+

          
+

          
+
*****メッセージのソート順序(ImapSortCriteria) [#operation_reference_message_get_sortcriteria]
+
ImapSortCriteriaクラスはメッセージのソート順序を表すクラスです。 各フィールドを単体で指定することができるほか、``+``演算子やImapSortCriteria.Combine()メソッドを使うことでImapSortCriteria同士を結合し、一つ目のソート順が同値だった場合に使用する二つ目以降のソート順序を指定することもできます。
+

          
+
|*ソート順序のフィールド
+
|~クラス|~フィールド|~ソート順序|~補足|h
+
|~ImapSortCriteria|Arrival&br;ArrivalReverse|メールボックスに追加された日時に従って、昇順あるいは降順でソートします。|日時はINTERNALDATE(ImapMessageInfo.InternalDateの値)で判断されます。|
+
|~|Date&br;DateReverse|Dateヘッダに設定されている日時に従って、昇順あるいは降順でソートします。||
+
|~|Subject&br;SubjectReverse|Subjectヘッダの内容に従って、昇順あるいは降順でソートします。||
+
|~|Cc&br;CcReverse|CCヘッダに設定されている一つ目のアドレスに従って、昇順あるいは降順でソートします。||
+
|~|From&br;FromReverse|Fromヘッダに設定されている一つ目のアドレスに従って、昇順あるいは降順でソートします。||
+
|~|To&br;ToReverse|Toヘッダに設定されている一つ目のアドレスに従って、昇順あるいは降順でソートします。||
+
|~|Size&br;SizeReverse|メッセージのサイズ(オクテット数)に従って、昇順あるいは降順でソートします。||
+
|~|DisplayFrom|Fromヘッダのdisplay-nameに従って、昇順でソートします。|サーバが&urn2url(urn:ietf:rfc:5957);をサポートしていない場合は、ImapIncapableExceptionをスローします。|
+
|~|DisplayTo|Toヘッダのdisplay-nameに従って、昇順でソートします。|~|
+

          
+

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

        

        
2351,7 2002,7
 
|~|~|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合は、DateTimeOffsetのデフォルト値を返します。 Dateヘッダがない場合などは、nullを返します。|
|~|~|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合は、DateTimeOffsetのデフォルト値を返します。 Dateヘッダがない場合などは、nullを返します。|
 
|~|~|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態で返します。 Subjectヘッダがない場合などは、nullを返します。|
|~|~|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態で返します。 Subjectヘッダがない場合などは、nullを返します。|
 
|~|~|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
|~|~|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
~
|~|~|BodyStructure|メッセージの構造(BODYSTRUCTURE)を表すIImapBodyStructureのインスタンスを返します。|
|~|~|BodyStructure|メッセージのBODYSTRUCTUREを表すIImapBodyStructureのインスタンスを返します。|
 
|~クラス|>|~プロパティ|~解説|f
|~クラス|>|~プロパティ|~解説|f
 

        

        
 
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
2364,31 2015,31
 
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|h
 
|~ImapMessageInfo|{{
|~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>
2399,141 2050,34
 
(Func<Stream, T1, T2, T3, TResult>, T1, T2, T3)
(Func<Stream, T1, T2, T3, TResult>, T1, T2, T3)
 
ReadAs<T1, T2, T3, T4, TResult>
ReadAs<T1, T2, T3, T4, TResult>
 
(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()メソッドでファイルに保存するなどしてください。
+
:セクションの指定|これらすべてのメソッドは、引数でセクション番号あるいはセクションを表すBODYSTRUCTUREのIImapBodyStructureを指定することができるオーバーロードが用意されています。 これらのオーバーロードでは、メッセージ本文全体ではなく指定したセクション部分だけを取得します。 詳細については[[#operation_reference_message_section_bodystructure]]で解説します。
 
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
 
::SetSeen|メッセージ本文の取得と同時に、メッセージを既読にします。 このオプションを指定しない場合は、メッセージの既読/未読の状態をそのままにします。
::SetSeen|メッセージ本文の取得と同時に、メッセージを既読にします。 このオプションを指定しない場合は、メッセージの既読/未読の状態をそのままにします。
~
::DecodeContent|メソッドの引数でIImapBodyStructureを指定した場合のみ有効。 BODYSTRUCTUREからセクションのエンコーディング・文字コードを取得し、メッセージ本文をデコードします。 このオプションを指定しない場合は、セクションをデコードせずに取得します。
::DecodeContent|メソッドの引数でIImapBodyStructureを指定した場合、BODYSTRUCTUREからセクションのエンコーディング・文字コードを取得し、メッセージ本文をデコードします。 このオプションを指定しない場合は、メッセージ本文のデコードをせずに取得します。
~
:::サポートしているエンコーディング(Content-Transfer-Encoding)|7bit, 8bit, binary, base64, quoted-printable, uuencode(ただし、ファイルが複数格納されている場合は先頭のファイルのみ取得可能)
:::サポートしているエンコーディング(Content-Transfer-Encoding)|7bit, 8bit, binary, base64, quoted-printable
 
:::サポートされる文字コード(Content-Typeのcharsetパラメータ)|utf-8, shift_jis, iso-2022-jpほか、ランタイムがサポートする文字コード
:::サポートされる文字コード(Content-Typeのcharsetパラメータ)|utf-8, shift_jis, iso-2022-jpほか、ランタイムがサポートする文字コード
 
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
::Default|オプションのデフォルト値です。 上記オプションのいずれも指定しない場合と同値です。
 

        

        
+

          
+
****メッセージのセクションと構造(BODYSTRUCTURE)に関する操作 [#operation_reference_message_section_bodystructure]
+
以下はメッセージのセクションと構造に関する操作を行うプロパティとメソッドです。
+

          
+
|*メッセージのセクションと構造に関するプロパティ
+
|~クラス|~プロパティ|~解説|h
+
|~ImapMessageInfo|BodyStructure|メッセージ全体の構造(BODYSTRUCTURE)を表すIImapBodyStructureのインスタンスを返します。|
+

          
+
|*メッセージのセクションと構造の取得に関するメソッド
+
|~クラス|~メソッド|~解説|h
+
|~ImapMessageInfo|GetStructureOf(params int[])&br;GetStructureOf(string)|メッセージ内における指定されたセクションの構造(BODYSTRUCTURE)を表すIImapBodyStructureのインスタンスを返します。 該当するセクションが無い場合は``null``を返します。|
+
|~|GetStructureOf<TBodyStructure>(params int[])&br;GetStructureOf<TBodyStructure>(string)|メッセージ内における指定されたセクションの構造(BODYSTRUCTURE)を型TBodyStructureのインスタンスで返します。 該当するセクションの構造と型が一致しない場合は例外をスローします。 該当するセクションが無い場合は``null``を返します。|
+
|~IImapBodyStructure&br;(Smdn.Net.Imap4名前空間)|GetEnumerator()|マルチパート(``multipart/*``)もしくはメッセージをカプセル化(``message/rfc822``)しているセクションのIImapBodyStructureでは、内包しているセクションを列挙するIEnumerator<IImapBodyStructure>を返します。 シングルパートの場合は何も列挙しません。|
+
|~ImapBodyStructureUtils&br;(Smdn.Net.Imap4名前空間、IImapBodyStructureに追加される拡張メソッド)|Traverse(IImapBodyStructure, Action<IImapBodyStructure>)|IImapBodyStructureで表されるセクション内の下位構造を、セクション番号の順で走査します。|
+
|~|Find(IImapBodyStructure, Predicate<IImapBodyStructure>)|IImapBodyStructureで表されるセクション内の下位構造を走査し、条件に一致する最初のセクションのIImapBodyStructureを返します。 一致するものがなければ``null``を返します。|
+
|~|FindAll(IImapBodyStructure, Predicate<IImapBodyStructure>)|IImapBodyStructureで表されるセクション内の下位構造を走査し、条件に一致するすべてのセクションのIImapBodyStructureを返します。|
+
|~|Find(IImapBodyStructure, MimeType)|IImapBodyStructureで表されるセクション内の下位構造を走査し、指定されたメディアタイプに一致する最初のセクションのIImapBodyStructureを返します。 一致するものがなければ``null``を返します。|
+
|~|FindAll(IImapBodyStructure, MimeType|IImapBodyStructureで表されるセクション内の下位構造を走査し、指定されたメディアタイプに一致するすべてのセクションのIImapBodyStructureを返します。|
+
|~|FindSection(IImapBodyStructure, params int[])&br;FindSection(IImapBodyStructure, string)|IImapBodyStructureで表されるセクション内の下位構造を走査し、指定されたセクション番号と一致するセクションのIImapBodyStructureを返します。 一致するものがなければ``null``を返します。|
+
|~|GetRootStructure(IImapBodyStructure)|IImapBodyStructureで表されるセクションを内包しているメッセージ自体のIImapBodyStructure(ImapMessageInfo.BodyStructureと同じインスタンス)を返します。|
+
|~|GetContentFileName(IImapBodyStructure)|IImapBodyStructureで表されるセクションに与えられているファイル名を取得します。 このメソッドは、``Content-Disposition``ヘッダの``filename``パラメータ、``Content-Type``ヘッダの``name``パラメータを順に参照し、値が設定されている場合はその値をデコードした結果を返します。 ヘッダが無い場合、値が指定されていない場合は``null``を返します。|
+
|~クラス|~メソッド|~解説|f
+

          
+
:ImapMessageInfo.GetStructureOf()メソッド、ImapBodyStructureUtils.FindSection()メソッド|文字列``"1.2.3"``の指定と数値``{1,2,3}``の指定は等価です。 これらはどちらもセクション番号``"1.2.3"``を表します。
+
また、文字列""の指定と数値{}の指定は等価です。 ``null``あるいは空のセクション番号を指定した場合はメッセージ全体のBODYSTRUCTURE(つまりImapMessageInfo.BodyStructureと同じインスタンス)を返します。
+
:ImapMessageInfo.BodyStructureプロパティおよびImapMessageInfo.GetStructureOf()メソッド|ImapMessageFetchAttributeOptions.StaticAttributesを指定してメッセージの動的属性をしていない場合は、コマンドを発行してBODYSTRUCTUREを取得してから結果を返します。
+

          
+

          
+
|*メッセージ本文から特定セクションのみを取得するメソッド
+
|~クラス|~メソッド|~解説|h
+
|ImapMessageInfo|{{
+
OpenRead(IImapBodyStructure, ...)
+
OpenText(IImapBodyStructure, ...)
+
ReadAllBytes(IImapBodyStructure, ...)
+
ReadAllLines(IImapBodyStructure, ...)
+
ReadAllText(IImapBodyStructure, ...)
+
ReadLines(IImapBodyStructure, ...)
+
ReadAs(IImapBodyStructure, ...)
+
Save(string, IImapBodyStructure, ...)
+
WriteTo(Stream, IImapBodyStructure, ...)
+
WriteTo(BinaryWriter, IImapBodyStructure, ...)
+
およびIImapBodyStructureを指定する類似のオーバーロード
+
}}|(メッセージ全体ではなく)指定されたIImapBodyStructureで表されるセクション部分のみを取得して読み込み・保存・出力などを行います。 オプションでImapMessageFetchBodyOptions.DecodeContentを指定した場合は、セクションのエンコーディング・文字コードに従って''デコードを行います''。|
+
|~|{{
+
OpenRead(string, ...)
+
OpenText(string, ...)
+
ReadAllBytes(string, ...)
+
ReadAllLines(string, ...)
+
ReadAllText(string, ...)
+
ReadLines(string, ...)
+
ReadAs(string, ...)
+
Save(string, string, ...)
+
WriteTo(Stream, string, ...)
+
WriteTo(BinaryWriter, string, ...)
+
およびセクション番号を文字列で指定する類似のオーバーロード
+
}}|(メッセージ全体ではなく)指定されたセクション部分のみを取得して読み込み・保存・出力などを行います。 オプションでImapMessageFetchBodyOptions.DecodeContentを指定しても、セクションの''デコードは行われません''。|
+
|~クラス|~メソッド|~解説|f
+

          
+
:引数に指定するIImapBodyStructure|異なるImapMessageInfoから取得したIImapBodyStructureを指定した場合、例外ArgumentExceptionをスローします。
+

          
+

          
+
*****BODYSTRUCTUREを表すクラス・インターフェイス [#operation_reference_message_bodystructure_interfaces]
+
以下はBODYSTRUCTUREを表すクラス・インターフェイス、およびそのプロパティです。 ImapMessageInfo.BodyStructureプロパティなどが返すIImapBodyStructureは、以下のいずれかのクラスのインスタンスとなります。
+

          
+
|*セクションの構造(BODYSTRUCTURE)を表すクラス・インターフェイス
+
|~クラス|~プロパティ|~解説|h
+
|~IImapBodyStructure|>|~BODYSTRUCTUREに共通するプロパティを定義したインターフェイス。|
+
|~|ParentStructure|このセクションを内包するセクションのIImapBodyStructureを返します。 メッセージ自体のIImapBodyStructureの場合は``null``を返します。|
+
|~|Section|セクション番号を文字列形式で返します。|
+
|~|MediaType|セクションのメディアタイプを返します。|
+
|~|IsMultiPart|セクションがマルチパート(``multipart/*``)かどうかを表す値を返します。|
+
|~IImapBodyStructureExtension|>|~BODYSTRUCTUREの拡張情報に関するプロパティを定義したインターフェイス。|
+
|~|Disposition|セクションの``Content-Disposition``ヘッダに設定されている情報を返します。 ヘッダが無い場合は``null``を返します。|
+
|~|Languages|セクションの``Content-Language``ヘッダに設定されている値を格納したIListを返します。 ヘッダが無い場合は空のIListを返します。|
+
|~|Location|セクションの``Content-Location``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~|Extensions|現在定義されていないセクションの拡張情報がある場合は、その値を返します。|
+
|~ImapSinglePartBodyStructure|>|~シングルパートセクション(``multipart/*``および``message/rfc822``以外)のBODYSTRUCTUREを定義したクラス。&br;IImapBodyStructureを実装。|
+
|~|Parameters|セクションの``Content-Type``ヘッダに設定されているパラメータを格納したIDictionaryを返します。|
+
|~|Id|セクションの``Content-ID``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~|Description|セクションの``Content-Description``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~|Encoding|セクションの``Content-Transfer-Encoding``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~|Size|セクションのオクテット数(デコード前のサイズ)を返します。|
+
|~|LineCount|セクションの本文行数を返します。|
+
|~ImapMultiPartBodyStructure|>|~マルチパートセクション(``multipart/*``)のBODYSTRUCTUREを定義したクラス。&br;IImapBodyStructureを実装。|
+
|~|NestedStructures|内包しているメッセージのBODYSTRUCTUREを表すIImapBodyStructureのIListを返します。|
+
|~ImapMessageRfc822BodyStructure|>|~カプセル化されたメッセージを含むセクション(``message/rfc822``)のBODYSTRUCTUREを定義したクラス。&br;ImapSinglePartBodyStructureを継承。|
+
|~|Envelope|内包しているメッセージのエンベロープを表すImapEnvelopeのインスタンスを返します。|
+
|~|BodyStructure|内包しているメッセージのBODYSTRUCTUREを表すIImapBodyStructureを返します。|
+
|~ImapExtendedSinglePartBodyStructure|>|~拡張情報を含むシングルパートセクションのBODYSTRUCTUREを定義したクラス。&br;ImapSinglePartBodyStructureを継承、IImapBodyStructureExtensionを実装。|
+
|~|MD5|セクションの``Content-MD5``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~ImapExtendedMultiPartBodyStructure|>|~拡張情報を含むマルチパートセクションのBODYSTRUCTUREを定義したクラス。&br;ImapMultiPartBodyStructureを継承、IImapBodyStructureExtensionを実装。|
+
|~ImapExtendedMessageRfc822BodyStructure|>|~拡張情報を含む``message/rfc822``セクションのBODYSTRUCTUREを定義したクラス。&br;ImapMessageRfc822BodyStructureを継承、IImapBodyStructureExtensionを実装。|
+
|~|MD5|セクションの``Content-MD5``ヘッダに設定されている値を返します。 ヘッダが無い場合は``null``を返します。|
+
|~クラス|~プロパティ|~解説|f
+

          
+
各クラス・インターフェイスの継承関係は次のとおりです。
+

          
+
-IImapBodyStructure
+
--IImapBodyStructureExtension
+
--ImapSinglePartBodyStructure
+
---ImapExtendedSinglePartBodyStructure (+IImapBodyStructureExtension)
+
---ImapMessageRfc822BodyStructure
+
----ImapExtendedMessageRfc822BodyStructure (+IImapBodyStructureExtension)
+
--ImapMultiPartBodyStructure
+
---ImapExtendedMultiPartBodyStructure (+IImapBodyStructureExtension)
+

          
 
****メッセージヘッダの取得 [#operation_reference_message_readheader]
****メッセージヘッダの取得 [#operation_reference_message_readheader]
 
以下はメッセージヘッダ(From, Subject, Content-Type等)の取得に関するメソッドです。
以下はメッセージヘッダ(From, Subject, Content-Type等)の取得に関するメソッドです。
 

        

        
2600,23 2144,16
 
|~ImapMessageInfo および ImapMessageInfoList (ImapMessageInfoBaseから継承)|AddFlags(IImapMessageFlagSet)&br;AddFlags(ImapMessageFlag, params ImapMessageFlag[])&br;AddKeywords(string, params string[])|1つまたは複数のメッセージに対して、指定したフラグ・キーワードを追加します。|STORE|
|~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|
|~|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|
|~|SetFlags(IImapMessageFlagSet)&br;SetFlags(ImapMessageFlag, params ImapMessageFlag[])&br;SetKeywords(string, params string[])|1つまたは複数のメッセージに対して、既に設定されているフラグ・キーワードを置き換えて指定した値に設定します。|STORE|
~
|~|Store(ImapStoreDataItem)|1つまたは複数のメッセージに対して、指定したフラグ・キーワードの追加/削除/設定を行います。|STORE|
|~|Store(ImapStoreDataItem)|1つまたは複数のメッセージに対して、指定したフラグ・キーワードの追加/削除/設定を行います。|STORE|-|
 
|~|MarkAsDeleted()|1つまたは複数のメッセージに削除フラグ(``\Deleted``)を設定します。|STORE|
|~|MarkAsDeleted()|1つまたは複数のメッセージに削除フラグ(``\Deleted``)を設定します。|STORE|
 
|~|MarkAsSeen()|1つまたは複数のメッセージを既読フラグ(``\Seen``)を設定します。|STORE|
|~|MarkAsSeen()|1つまたは複数のメッセージを既読フラグ(``\Seen``)を設定します。|STORE|
 
|~|Delete()|1つまたは複数のメッセージを完全に削除します。&br;サーバがUID EXPUNGEをサポートしていない場合、''既に削除フラグが設定されている他のメッセージも同時に削除されます''。|STORE+EXPUNGE/UID EXPUNGE|
|~|Delete()|1つまたは複数のメッセージを完全に削除します。&br;サーバがUID EXPUNGEをサポートしていない場合、''既に削除フラグが設定されている他のメッセージも同時に削除されます''。|STORE+EXPUNGE/UID EXPUNGE|
 
|~ImapMessageInfo|Refresh()|メッセージの動的属性を更新します。|FETCH|
|~ImapMessageInfo|Refresh()|メッセージの動的属性を更新します。|FETCH|
 
|~|ToggleFlags(IImapMessageFlagSet)&br;ToggleFlags(ImapMessageFlag, params ImapMessageFlag[])&br;ToggleKeywords(string, params string[])|メッセージに設定されているフラグ・キーワードを反転します。&br;例として、メッセージに削除フラグが設定されている場合はフラグを削除し、設定されていない場合は追加します。|STORE|
|~|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
|~クラス|~メソッド|~解説|~対応するIMAPコマンド|f
 

        

        
~
:ImapMessageFlag|以下のフラグを指定することができます。 これ以外のImapMessageFlagを指定した場合は無視されます。

          
+
::ImapMessageFlag.Seen|メッセージが既読であることを表すフラグ(``\Seen``)
+
::ImapMessageFlag.Answered|メッセージが返信済みであることを表すフラグ(``\Answered``)
+
::ImapMessageFlag.Flagged|メッセージに何らかのマーク付け・フラグ付けがされていることを表すフラグ(``\Flagged``)
+
::ImapMessageFlag.Deleted|メッセージが削除予定であることを表すフラグ(``\Deleted``)
+
::ImapMessageFlag.Draft|メッセージが下書きであることを表すフラグ(``\Draft``)
+
:キーワード|[[ImapOpenedMailboxInfo.IsAllowedToCreateKeywords>#operation_reference_selectedmailbox_status]]が``true``のメールボックスでは、メッセージにユーザー定義のキーワードを設定することができます。 それ以外のメールボックスでは、キーワードの設定に成功しても永続的には保持されません。
+
キーワードには``\``から始まる文字列を指定することはできません。 そのほか、制御文字や非ASCII文字、一部の記号など、使用できない文字をキーワードに含んでいる場合は例外ArgumentExceptionをスローします。
+
:IImapMessageFlagSet|IImapMessageFlagSetを実装するImapMessageFlagSetなどのクラスを指定することができます。 ImapMessageFlagSetクラスは複数のフラグ・キーワードをまとめて扱いたい場合に使うことができます。
 

        

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

        

        
 
|*拡張機能をサポートしていない場合はImapIncapableExceptionをスローするメソッド
|*拡張機能をサポートしていない場合はImapIncapableExceptionをスローするメソッド
 
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|h
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|h
+
|~&urn2url(urn:ietf:rfc:5032){WITHIN};|``ImapCapability.Within``|ImapOpenedMailboxInfo.GetMessages(...)などでImapSearchCriteria.YoungerもしくはImapSearchCriteria.Olderを指定した場合。|
 
|~&urn2url(urn:ietf:rfc:5256){SORT};|``ImapCapability.Sort``|ImapOpenedMailboxInfo.GetSortedMessages(...)|
|~&urn2url(urn:ietf:rfc:5256){SORT};|``ImapCapability.Sort``|ImapOpenedMailboxInfo.GetSortedMessages(...)|
+
|~&urn2url(urn:ietf:rfc:5957){SORT=DISPLAY};|``ImapCapability.SortDisplay``|ImapOpenedMailboxInfo.GetSortedMessages(ImapSortCriteria.DisplayFrom, ...)&br;ImapOpenedMailboxInfo.GetSortedMessages(ImapSortCriteria.DisplayTo, ...)|
+
|~&urn2url(urn:ietf:rfc:5256){THREAD=REFERENCES};|``ImapCapability.ThreadReferences``|ImapOpenedMailboxInfo.GetThreadedMessages(ImapThreadingAlgorithm.References, ...)|
+
|~&urn2url(urn:ietf:rfc:5256){THREAD=ORDEREDSUBJECT};|``ImapCapability.ThreadOrderedSubject``|ImapOpenedMailboxInfo.GetThreadedMessages(ImapThreadingAlgorithm.OrderedSubject, ...)|
+
|~&urn2url(urn:ietf:rfc:5957){SORT=DISPLAY};|``ImapCapability.SortDisplay``|ImapOpenedMailboxInfo.GetSortedMessages(...)などでImapSortCriteria.DisplayFromもしくはImapSortCriteria.DisplayToを指定した場合。|
 
|~&urn2url(urn:ietf:rfc:6154){SPECIAL-USE};|``ImapCapability.SpecialUse``|ImapClient.GetMailbox(ImapSpecialMailbox), ImapClient.OpenMailbox(ImapSpecialMailbox)などImapSpecialMailboxを引数にとるメソッド|
|~&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(...)|
|~[[X-GM-EXT-1:https://developers.google.com/gmail/imap_extensions]]|``ImapCapability.GimapGmExt1``|ImapOpenedMailboxInfo.GetMessagesGmailSearch(...)|
 
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|f
|~拡張機能|~対応するImapCapability|~動作が変わるメソッド|f
2721,6 2253,9
 
***IMAPコマンドの引数およびレスポンスのデータ型
***IMAPコマンドの引数およびレスポンスのデータ型
 
(このドキュメントは作成中です)
(このドキュメントは作成中です)
 
-ImapStoreDataItem
-ImapStoreDataItem
-
-ImapSearchCriteria
-
-ImapSortCriteria
-
-IImapMessageFlagSet
 
-IImapMailboxFlagSet
-IImapMailboxFlagSet
 

        

        
 

        

        
2738,7 2273,6
 
|Smdn.Net.Imap4|ImapAuthenticationException|認証に失敗した&br;試行できる認証メカニズムが無い|ImapClient.Connect()|
|Smdn.Net.Imap4|ImapAuthenticationException|認証に失敗した&br;試行できる認証メカニズムが無い|ImapClient.Connect()|
 
|Smdn.Net.Imap4|ImapErrorResponseException|サーバがエラー応答を返した|ImapClientおよび各クラスのメソッド・プロパティ|
|Smdn.Net.Imap4|ImapErrorResponseException|サーバがエラー応答を返した|ImapClientおよび各クラスのメソッド・プロパティ|
 
|Smdn.Net.Imap4|ImapProtocolViolationException|プロトコル上不正な操作を行おうとした|ImapClientおよび各クラスのメソッド・プロパティ|
|Smdn.Net.Imap4|ImapProtocolViolationException|プロトコル上不正な操作を行おうとした|ImapClientおよび各クラスのメソッド・プロパティ|
+
|Smdn.Net.Imap4|ImapIncapableException|サーバがサポートしていない機能、あるいは無効化している機能を使った処理を要求しようとした|ImapClientおよび各クラスのメソッド ([[#operation_reference_extension_specs]])|
 
|Smdn.Net.Imap4.Client|ImapMailboxNotFoundException|指定された名前のメールボックスが見つからない|ImapClient.GetMailbox()&br;ImapMessageInfo.CopyTo()など|
|Smdn.Net.Imap4.Client|ImapMailboxNotFoundException|指定された名前のメールボックスが見つからない|ImapClient.GetMailbox()&br;ImapMessageInfo.CopyTo()など|
 
|Smdn.Net.Imap4.Client|ImapMessageNotFoundException|指定されたUIDもしくは通番を持つメッセージが存在しない|ImapOpenedMailboxInfo.GetMessageByUid()&br;ImapOpenedMailboxInfo.GetMessageBySequence()|
|Smdn.Net.Imap4.Client|ImapMessageNotFoundException|指定されたUIDもしくは通番を持つメッセージが存在しない|ImapOpenedMailboxInfo.GetMessageByUid()&br;ImapOpenedMailboxInfo.GetMessageBySequence()|
 
|Smdn.Net.Imap4.Client|ImapUnavailableException|既に閉じたメールボックス、既に削除・移動したメッセージや取得元のメールボックスが既に閉じているメッセージに対して操作を行おうとした|ImapOpenedMailboxInfoクラス・ImapMessageInfoクラスの各メソッド・プロパティ|
|Smdn.Net.Imap4.Client|ImapUnavailableException|既に閉じたメールボックス、既に削除・移動したメッセージや取得元のメールボックスが既に閉じているメッセージに対して操作を行おうとした|ImapOpenedMailboxInfoクラス・ImapMessageInfoクラスの各メソッド・プロパティ|
2758,7 2292,6
 
---Smdn.Net.Imap4.ImapInvalidOperationException
---Smdn.Net.Imap4.ImapInvalidOperationException
 
----Smdn.Net.Imap4.ImapErrorResponseException
----Smdn.Net.Imap4.ImapErrorResponseException
 
-----Smdn.Net.Imap4.ImapAuthenticationException
-----Smdn.Net.Imap4.ImapAuthenticationException
+
----Smdn.Net.Imap4.ImapIncapableException
 
----Smdn.Net.Imap4.ImapProtocolViolationException
----Smdn.Net.Imap4.ImapProtocolViolationException
 
----Smdn.Net.Imap4.Client.ImapMessageVanishedException
----Smdn.Net.Imap4.Client.ImapMessageVanishedException
 
----Smdn.Net.Imap4.Client.ImapUnavailableException
----Smdn.Net.Imap4.Client.ImapUnavailableException

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.37.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Formats.Mime-0.36.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]]をご覧ください
 

        

        

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

        

        
 
*変更履歴 [#changes]
*変更履歴 [#changes]
+
**0.37 (2014-05-07) [#changes_v0.37]
+
-修正・改善
+
--Mail.AttachedFilesをAttachedFile[]からReadOnlyCollection<AttachedFile>に変更
+

          
 
**0.36 (2014-04-23) [#changes_v0.36]
**0.36 (2014-04-23) [#changes_v0.36]
 
-修正・改善
-修正・改善
 
--&color(red){.NET Framework 2.0のサポートを廃止};
--&color(red){.NET Framework 2.0のサポートを廃止};

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

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

        

        
 
*変更履歴
*変更履歴
+
**1.02 (2014-05-07)
+
-修正・改善
+
--ライブラリのインターフェイス変更にあわせて実装を修正
+

          
 
**1.01 (2014-04-26)
**1.01 (2014-04-26)
 
-修正・改善
-修正・改善
 
--ライブラリのインターフェイス変更にあわせて実装を修正
--ライブラリのインターフェイス変更にあわせて実装を修正