2015-02-17T22:25:33の更新内容

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

        

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

        

        
1861,6 1861,214
 
</html>
</html>
 
}}
}}
 

        

        
-

          
-
****(廃止予定) メッセージの構造(BODYSTRUCTURE) [#operation_examples_message_bodystructure]
-
(&color(red){廃止予定};:[[#operation_examples_message_messagepart]]を参照してください)
-

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

          
-
メッセージ全体の構造は[[ImapMessageInfo.BodyStructureプロパティ>#operation_reference_message_section_bodystructure]]を参照することで取得することができます。 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.Count);
-

          
-
    // このセクションで入れ子になっている構造を列挙して再帰的に表示する
-
    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の各クラスにキャストすることもできます。 各クラスとインターフェイスの継承関係や取得できる情報の詳細については[[#operation_reference_message_bodystructure_interfaces]]を参照してください。
-

          
-
特定のセクションのBODYSTRUCTUREを取得したい場合には、[[ImapMessageInfo.GetStructureOf()メソッド>#operation_reference_message_section_bodystructure]]を使うことができます。 このメソッドでは、セクション番号を文字列または数値で指定することにより、そのセクションのBODYSTRUCTUREを取得することができます。 また、[[Find()またはFindAll()メソッド>#operation_reference_message_section_bodystructure]]を使うと、特定の条件(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)) {
-
        // Content-TypeまたはContent-Dispositionヘッダからファイル名を取得する
-
        var filename = attachmentSection.GetContentFileName();
-

          
-
        if (filename == null)
-
          // (取得できなかった場合は、適当なファイル名を与える必要がある)
-
          filename = "attachment-file.xxx";
-

          
-
        // セクションの内容を取得・デコードしてファイルに保存する
-
        message.Save(filename, 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);
-

          
-
  // (この実装では、Content-Dispositionヘッダのないものは添付ファイルとして扱われない点に注意)
-
}
-
}}
-
#tabpage-end
-

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

        

        
3047,6 3255,7
 
|~|~|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合・Dateヘッダがない場合などはnullを返します。 このプロパティは参照される度にヘッダのパースを行います。|
|~|~|EnvelopeDate|メッセージのDateヘッダをパースした値をNullable<DateTimeOffset>で返します。 パースに失敗した場合・Dateヘッダがない場合などはnullを返します。 このプロパティは参照される度にヘッダのパースを行います。|
 
|~|~|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態の値を返します。 Subjectヘッダがない場合などは、nullを返します。 このプロパティは参照される度にヘッダのデコードを行います。|
|~|~|EnvelopeSubject|メッセージのSubjectヘッダをデコードした値をstringで返します。 デコードに失敗した場合は、デコードされていない状態の値を返します。 Subjectヘッダがない場合などは、nullを返します。 このプロパティは参照される度にヘッダのデコードを行います。|
 
|~|~|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
|~|~|InternalDate|メッセージがメールボックスに追加された(受信もしくはアップロードした)日時をDateTimeOffsetで返します。|
-
|~|~|BodyStructure|(&color(red){廃止予定};:MessagePartプロパティを使用してください) メッセージの構造(BODYSTRUCTURE)を表すIImapBodyStructureのインスタンスを返します。|
 
|~クラス|>|~プロパティ|~解説|f
|~クラス|>|~プロパティ|~解説|f
 

        

        
 
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
:動的属性を表すプロパティ|メッセージ取得時にImapMessageFetchAttributeOptionsで動的属性を取得するように指定しなかった場合、プロパティの値を参照する際、コマンドを発行してから結果を返します。
3135,6 3344,8
 
:OpenRead()/OpenText()が返すStream/StreamReaderのクローズ|OpenRead()/OpenText()メソッドによって取得したStream/StreamReaderに対してClose()メソッドを呼び出さない限り、ImapClient.IsBusyはtrueのままとなり、他の操作を開始しようとしてもInvalidOperationExceptionをスローします。 OpenRead()/OpenText()メソッドを使用する場合は、次の操作を開始するまでに取得したStream/StreamReaderのClose()メソッドを呼び出すようにしてください。 また、読み込み処理を行いながら他の操作を行いたい場合は、Download()メソッドで取得したStreamを使用するなどしてください。
:OpenRead()/OpenText()が返すStream/StreamReaderのクローズ|OpenRead()/OpenText()メソッドによって取得したStream/StreamReaderに対してClose()メソッドを呼び出さない限り、ImapClient.IsBusyはtrueのままとなり、他の操作を開始しようとしてもInvalidOperationExceptionをスローします。 OpenRead()/OpenText()メソッドを使用する場合は、次の操作を開始するまでに取得したStream/StreamReaderのClose()メソッドを呼び出すようにしてください。 また、読み込み処理を行いながら他の操作を行いたい場合は、Download()メソッドで取得したStreamを使用するなどしてください。
 
:ReadLines()が返すIEnumerable<string>|ReadLines()は遅延実行するIEnumerable<string>を返します。 列挙操作が完了するまではImapClient.IsBusyはtrueのままとなり、他の操作を開始しようとしてもInvalidOperationExceptionをスローします。 列挙中に他の操作を行いたい場合は、遅延実行を行わないReadAllLines()メソッドを使用してください。
:ReadLines()が返すIEnumerable<string>|ReadLines()は遅延実行するIEnumerable<string>を返します。 列挙操作が完了するまではImapClient.IsBusyはtrueのままとなり、他の操作を開始しようとしてもInvalidOperationExceptionをスローします。 列挙中に他の操作を行いたい場合は、遅延実行を行わないReadAllLines()メソッドを使用してください。
 
:非同期バージョンのメソッド|OpenReadAsync()など名前がAsyncで終わるメソッドは非同期バージョンのメソッドです。 非同期的に動作する以外は同期バージョンと同じです。 非同期バージョンのメソッドを使う際の注意点は[[#async_operations]]を参照してください。
:非同期バージョンのメソッド|OpenReadAsync()など名前がAsyncで終わるメソッドは非同期バージョンのメソッドです。 非同期的に動作する以外は同期バージョンと同じです。 非同期バージョンのメソッドを使う際の注意点は[[#async_operations]]を参照してください。
-
:セクションの指定|(&color(red){廃止予定};:ImapMessagePartInfoクラスのメソッドを使用してください)
-
これらすべてのメソッドは、引数でセクション番号あるいはセクションを表すBODYSTRUCTUREのIImapBodyStructureを指定することができるオーバーロードが用意されています。 これらのオーバーロードでは、メッセージ本文全体ではなく指定したセクション部分だけを取得します。 詳細については[[#operation_reference_message_section_bodystructure]]で解説します。
 
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
:メッセージ本文の取得オプション(ImapMessageFetchBodyOptions)|これらのメソッドには、ImapMessageFetchBodyOptionsを引数にとるバージョンのオーバーロードを用意してあります。 ImapMessageFetchBodyOptionsを指定することで、メッセージ本文取得時の動作を指定することができます。 以下の値を組み合わせて指定できます。
 
::SetSeen|メッセージ本文の取得と同時に、メッセージを既読にします。 このオプションを指定しない場合は、メッセージの既読/未読の状態をそのままにします。
::SetSeen|メッセージ本文の取得と同時に、メッセージを既読にします。 このオプションを指定しない場合は、メッセージの既読/未読の状態をそのままにします。
 
::OmitHeader|メッセージ本文のうち、ヘッダ部分を省略したボディ部分のみを取得します。
::OmitHeader|メッセージ本文のうち、ヘッダ部分を省略したボディ部分のみを取得します。
3165,6 3376,114
 
:ImapMessageInfo.GetMessagePart()|文字列``"1.2.3"``の指定と数値``{1,2,3}``の指定は等価です。 これらはどちらも``"1.2.3"``で表されるメッセージパートを表します。
:ImapMessageInfo.GetMessagePart()|文字列``"1.2.3"``の指定と数値``{1,2,3}``の指定は等価です。 これらはどちらも``"1.2.3"``で表されるメッセージパートを表します。
 
:ImapMessageInfo.FindMessagePart()およびImapMessageInfo.FindAllMessageParts()|引数として[[ImapMessagePartInfo.Predicatesクラスに定義済みのメソッド>#operation_reference_messagepart_find]]を指定することができます。
:ImapMessageInfo.FindMessagePart()およびImapMessageInfo.FindAllMessageParts()|引数として[[ImapMessagePartInfo.Predicatesクラスに定義済みのメソッド>#operation_reference_messagepart_find]]を指定することができます。
 

        

        
-

          
-
****(廃止予定) メッセージのセクションと構造(BODYSTRUCTURE)に関する操作 [#operation_reference_message_section_bodystructure]
-
(&color(red){廃止予定};:[[ImapMessageInfo.GetMessagePart()などのメソッド>#operation_reference_message_messagepart]]および[[ImapMessagePartInfoクラス>#operation_reference_messagepart]]を使用してください)
-

          
-
以下はメッセージのセクションと構造に関する操作を行うプロパティとメソッドです。
-

          
-
|*メッセージのセクションと構造に関するプロパティ
-
|~クラス|~プロパティ|~解説|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等)の取得に関するメソッドです。
 

        

        

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

current previous
13,7 13,8
 
*ダウンロード
*ダウンロード
 
本ライブラリは[[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.14.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Net.Imap4.Client-1.05.tar.bz2}
-
${smdncms:distfilelink,Smdn.Net.Imap4.Client-1.13.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]]をご覧ください
 

        

        
115,15 116,12
 
以下のIMAPサーバに対して概ね問題なく動作することを確認済みです。 この他にも、IMAPでのアクセスが可能なメールサービスでの動作報告を頂いています。
以下のIMAPサーバに対して概ね問題なく動作することを確認済みです。 この他にも、IMAPでのアクセスが可能なメールサービスでの動作報告を頂いています。
 
-GMail (Gimap)
-GMail (Gimap)
 
-AIM Mail
-AIM Mail
+
-Yahoo!メール
+
--ただし、本ライブラリを使用したIMAPアクセスはサポート対象外([[http://www.yahoo-help.jp/app/answers/detail/a_id/77496/p/622]])であり、また一部機能はIMAP仕様と異なる結果となることを確認しています
 
-Dovecot (1.2.11, 2.1.9, 2.2.3)
-Dovecot (1.2.11, 2.1.9, 2.2.3)
 

        

        
 
以下の環境で概ね問題なく動作することを確認済みです。 テストはしていますが、予期しないバグがあるかもしれません。
以下の環境で概ね問題なく動作することを確認済みです。 テストはしていますが、予期しないバグがあるかもしれません。
 
-.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.6.0
 
-Mono 3.4.0
-Mono 3.4.0
 
-Mono 3.2.8
-Mono 3.2.8
 
-Mono 3.0.12
-Mono 3.0.12

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

        

        
 
*変更履歴 [#changes]
*変更履歴 [#changes]
+
**1.14 (2015-02-17) [#changes_v1.14]
+
-修正・改善
+
--NAMESPACEレスポンスの階層区切り文字が``NIL``だった場合にレスポンス解析エラーとなる不具合を修正
+
--Yahoo!メールIMAPサーバーがRFCに反するSEARCHレスポンスを返送してくる問題に対するワークアラウンドを適用
+
--[[v1.11>#changes_v1.11]]にてobsoleteにしたメンバの実装を削除し、メンバを呼び出そうとする場合はコンパイルエラーとするようにした
+

          
 
**1.13 (2015-02-04) [#changes_v1.13]
**1.13 (2015-02-04) [#changes_v1.13]
 
-修正・改善
-修正・改善
 
--Yahoo!メールなど``INBOX``の名称が大文字小文字混在となるサーバーでSTATUSコマンドによるINBOXのステータスが取得出来ない不具合を修正
--Yahoo!メールなど``INBOX``の名称が大文字小文字混在となるサーバーでSTATUSコマンドによるINBOXのステータスが取得出来ない不具合を修正

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.1x
-1.1x
+
--${smdncms:distfilelink,SimpleMailer-1.14.tar.bz2}
+
---下記ライブラリのソースを同梱しています
+
----[[works/libs/Smdn.Net.Imap4.Client]] 1.14
+
----[[works/libs/Smdn.Net.Pop3.Client]] 1.26
+
----[[works/libs/Smdn.Security.Authentication.Sasl]] 1.00
+
----[[works/libs/Smdn.Formats.Mime]] 0.39
+
----[[works/libs/Smdn.Formats.Ini]] 0.22
 
--${smdncms:distfilelink,SimpleMailer-1.12.tar.bz2}
--${smdncms:distfilelink,SimpleMailer-1.12.tar.bz2}
 
---下記ライブラリのソースを同梱しています
---下記ライブラリのソースを同梱しています
 
----[[works/libs/Smdn.Net.Imap4.Client]] 1.12
----[[works/libs/Smdn.Net.Imap4.Client]] 1.12
166,9 159,6
 

        

        
 
*変更履歴
*変更履歴
 

        

        
+
**1.14 (2015-02-17)
+
-ライブラリの更新のみ、本体部分は変更なし
+

          
 
**1.12 (2014-08-15)
**1.12 (2014-08-15)
 
-ライブラリの更新のみ、本体部分は変更なし
-ライブラリの更新のみ、本体部分は変更なし