メインコンテンツまでスキップ

7. サーバーレスポンス (Server Responses)

リスト内の名前の 1 つと一致するフィールド名を持つヘッダーフィールドのみが含まれる. 同様に, HEADER.FIELDS.NOT によって返されるサブセットには, 一致しないフィールド名を持つヘッダーフィールドのみが含まれる. フィールドマッチングは大文字と小文字を区別しないが, それ以外は正確である. サブセット化は, ヘッダーとボディの間の [RFC-2822] 区切り空行を除外しない. 空行は, ボディも空行もないメッセージの場合を除き, すべてのヘッダーフェッチに含まれる.

     MIME パート指定子は, このパートの [MIME-IMB] ヘッダーを参照する.

TEXT パート指定子は, メッセージのテキストボディを参照し, [RFC-2822] ヘッダーを省略する.

ここに, 一部のパート指定子を持つ複雑なメッセージの例を示す:

HEADER (メッセージの [RFC-2822] ヘッダー)
TEXT (メッセージの [RFC-2822] テキストボディ) MULTIPART/MIXED
1 TEXT/PLAIN
2 APPLICATION/OCTET-STREAM
3 MESSAGE/RFC822
3.HEADER (メッセージの [RFC-2822] ヘッダー)
3.TEXT (メッセージの [RFC-2822] テキストボディ) MULTIPART/MIXED
3.1 TEXT/PLAIN
3.2 APPLICATION/OCTET-STREAM
4 MULTIPART/MIXED
4.1 IMAGE/GIF
4.1.MIME (IMAGE/GIF の [MIME-IMB] ヘッダー)
4.2 MESSAGE/RFC822
4.2.HEADER (メッセージの [RFC-2822] ヘッダー)
4.2.TEXT (メッセージの [RFC-2822] テキストボディ) MULTIPART/MIXED
4.2.1 TEXT/PLAIN
4.2.2 MULTIPART/ALTERNATIVE
4.2.2.1 TEXT/PLAIN
4.2.2.2 TEXT/RICHTEXT

指定されたテキストの部分文字列をフェッチすることが可能である. これは, 開き山括弧 ("\<"), 最初に望むオクテットのオクテット位置, ピリオド, 望むオクテットの最大数, 閉じ山括弧 (">") をパート指定子に追加することによって行われる. 開始オクテットがテキストの末尾を超えている場合, 空文字列が返される.

RFC 3501 IMAPv4 March 2003

     テキストの末尾を超えて読み取ろうとする部分フェッチは, 適切に切り捨てられる. オクテット 0 から始まる部分フェッチは, この切り捨てが発生した場合でも, 部分フェッチとして返される.

注記: これは, 1500 オクテットのメッセージの BODY[]``<0.2048>`` が, BODY[] ではなく, サイズ 1500 のリテラルを持つ BODY[]\<0> を返すことを意味する.

注記: HEADER.FIELDS または HEADER.FIELDS.NOT パート指定子の部分文字列フェッチは, ヘッダーのサブセット化の後に計算される.

\Seen フラグは暗黙的に設定される. これによりフラグが変更される場合, それらは FETCH レスポンスの一部として含まれるべきである (SHOULD).

BODY.PEEK[\<section>]\&lt;\&lt;partial>>
\Seen フラグを暗黙的に設定しない BODY[\<section>] の代替形式.

BODYSTRUCTURE
メッセージの [MIME-IMB] ボディ構造. これは, サーバーが [RFC-2822] ヘッダーと [MIME-IMB] ヘッダー内の [MIME-IMB] ヘッダーフィールドを解析することによって計算される.

ENVELOPE
メッセージのエンベロープ構造. これは, サーバーが [RFC-2822] ヘッダーを構成部分に解析し, 必要に応じてさまざまなフィールドをデフォルト設定することによって計算される.

FLAGS
このメッセージに設定されているフラグ.

INTERNALDATE
メッセージの内部日付.

RFC822
BODY[] と機能的に同等であり, 結果のタグなし FETCH データの構文 (RFC822 が返される) が異なる.

RFC822.HEADER
BODY.PEEK[HEADER] と機能的に同等であり, 結果のタグなし FETCH データの構文 (RFC822.HEADER が返される) が異なる.

RFC822.SIZE
メッセージの [RFC-2822] サイズ.

RFC 3501 IMAPv4 March 2003

  RFC822.TEXT
BODY[TEXT] と機能的に同等であり, 結果のタグなし FETCH データの構文 (RFC822.TEXT が返される) が異なる.

UID
メッセージの一意識別子.

例: C: A654 FETCH 2:4 (FLAGS BODY[HEADER.FIELDS (DATE FROM)]) S: * 2 FETCH .... S: * 3 FETCH .... S: * 4 FETCH .... S: A654 OK FETCH completed

6.4.6. STORE コマンド​

引数 (Arguments): シーケンスセット メッセージデータ項目名 メッセージデータ項目の値

レスポンス (Responses): タグなしレスポンス: FETCH

結果 (Result): OK - store 完了 NO - store エラー: そのデータを保存できない BAD - コマンド不明または引数が無効

  STORE コマンドは, メールボックス内のメッセージに関連付けられたデータを変更する. 通常, STORE はデータの更新値をタグなし FETCH レスポンスで返す. データ項目名の接尾辞 ".SILENT" はタグなし FETCH を防止し, サーバーはクライアントが更新値を自分で決定したか, 更新値を気にしないと想定すべきである (SHOULD).

注記: ".SILENT" 接尾辞が使用されたかどうかに関係なく, 外部ソースからのメッセージフラグの変更が観察された場合, サーバーはタグなし FETCH レスポンスを送信すべきである (SHOULD). その意図は, 競合状態なしにフラグのステータスが決定されることである.

RFC 3501 IMAPv4 March 2003

  現在定義されている, 保存できるデータ項目は以下のとおりである:

FLAGS \&lt;flag list>
メッセージのフラグ (\Recent 以外) を引数で置き換える. フラグの新しい値は, それらのフラグの FETCH が行われたかのように返される.

FLAGS.SILENT \&lt;flag list>
FLAGS と同等であるが, 新しい値を返さない.

+FLAGS \&lt;flag list>
メッセージのフラグに引数を追加する. フラグの新しい値は, それらのフラグの FETCH が行われたかのように返される.

+FLAGS.SILENT \&lt;flag list>
+FLAGS と同等であるが, 新しい値を返さない.

-FLAGS \&lt;flag list>
メッセージのフラグから引数を削除する. フラグの新しい値は, それらのフラグの FETCH が行われたかのように返される.

-FLAGS.SILENT \&lt;flag list>
-FLAGS と同等であるが, 新しい値を返さない.

例: C: A003 STORE 2:4 +FLAGS (\Deleted) S: * 2 FETCH (FLAGS (\Deleted \Seen)) S: * 3 FETCH (FLAGS (\Deleted)) S: * 4 FETCH (FLAGS (\Deleted \Flagged \Seen)) S: A003 OK STORE completed

6.4.7. COPY コマンド​

引数 (Arguments): シーケンスセット メールボックス名

レスポンス (Responses): このコマンドに対する特定のレスポンスはない

結果 (Result): OK - copy 完了 NO - copy エラー: それらのメッセージをコピーできない, またはその名前へコピーできない BAD - コマンド不明または引数が無効

RFC 3501 IMAPv4 March 2003

  COPY コマンドは, 指定されたメッセージを指定された宛先メールボックスの末尾にコピーする. メッセージのフラグと内部日付はコピーで保持されるべきであり (SHOULD), Recent フラグは設定されるべきである (SHOULD).

宛先メールボックスが存在しない場合, サーバーはエラーを返すべきである (SHOULD). メールボックスを自動的に作成すべきではない (SHOULD NOT). 宛先メールボックスを作成できないことが確実でない限り, サーバーはタグ付き NO レスポンスのテキストの接頭辞としてレスポンスコード "[TRYCREATE]" を送信しなければならない (MUST). これにより, クライアントは CREATE コマンドを試み, CREATE が成功した場合に COPY を再試行できるというヒントが得られる.

COPY コマンドが何らかの理由で失敗した場合, サーバー実装は宛先メールボックスを COPY 試行前の状態に復元しなければならない (MUST).

例: C: A003 COPY 2:4 MEETING S: A003 OK COPY completed

6.4.8. UID コマンド​

引数 (Arguments): コマンド名 コマンド引数

レスポンス (Responses): タグなしレスポンス: FETCH, SEARCH

結果 (Result): OK - UID コマンド完了 NO - UID コマンドエラー BAD - コマンド不明または引数が無効

  UID コマンドには 2 つの形式がある. 最初の形式では, 引数として, 関連するコマンドに適した引数を持つ COPY, FETCH, または STORE コマンドを取る. ただし, シーケンスセット引数の数値は, メッセージシーケンス番号ではなく一意識別子である. シーケンスセットの範囲は許可されているが, 一意識別子が連続することは保証されない.

存在しない一意識別子は, エラーメッセージを生成せずに無視される. したがって, UID FETCH コマンドがデータなしで OK を返したり, UID COPY または UID STORE が操作を実行せずに OK を返したりすることが可能である.

2 番目の形式では, UID コマンドは SEARCH コマンド引数を持つ SEARCH コマンドを取る. 引数の解釈は SEARCH と同じである. ただし, UID SEARCH コマンドの SEARCH レスポンスで返される数値は, メッセージシーケンス番号ではなく一意識別子である.

RFC 3501 IMAPv4 March 2003

  例えば, コマンド UID SEARCH 1:100 UID 443:557 は, 2 つのシーケンスセットの共通部分, すなわちメッセージシーケンス番号範囲 1:100 と UID 範囲 443:557 に対応する一意識別子を返す.

注記: 上記の例では, UID 範囲 443:557 が現れる. 存在しない一意識別子がエラーメッセージなしで無視されるという同じコメントがここにも当てはまる. したがって, UID 443 も 557 も存在しない場合でも, この範囲は有効であり, 既存の UID 495 を含むことになる.

また, UID 範囲 559:* は, 559 が割り当てられた UID 値より高い場合でも, 常にメールボックス内の最後のメッセージの UID を含むことに注意すること. これは, 範囲の内容が範囲の端点の順序に依存しないためである. したがって, 端点の 1 つとして * を持つ UID 範囲は, メールボックスが空でない限り, 少なくとも 1 つのメッセージ (最も番号の大きい UID を持つメッセージ) を示す.

タグなし FETCH レスポンスの "*" の後の数値は, UID コマンドレスポンスの場合でも, 常に一意識別子ではなくメッセージシーケンス番号である. ただし, サーバー実装は, UID が FETCH へのメッセージデータ項目として指定されたかどうかに関係なく, UID コマンドによって引き起こされる任意の FETCH レスポンスの一部として UID メッセージデータ項目を暗黙的に含めなければならない (MUST).

注記: UID メッセージデータ項目を FETCH レスポンスの一部として含める規則は, 主に UID FETCH と UID STORE コマンドに適用され, UID をメッセージデータ項目として含まない UID FETCH コマンドも含まれる. 他の UID コマンドがタグなし FETCH を引き起こす可能性は低いが, この規則はこれらのコマンドにも適用される.

例: C: A999 UID FETCH 4827313:4828442 FLAGS S: * 23 FETCH (FLAGS (\Seen) UID 4827313) S: * 24 FETCH (FLAGS (\Seen) UID 4827943) S: * 25 FETCH (FLAGS (\Seen) UID 4828442) S: A999 OK UID FETCH completed

RFC 3501 IMAPv4 March 2003

6.5. クライアントコマンド - 実験的/拡張 (Client Commands - Experimental/Expansion)​

6.5.1. X&lt;atom> コマンド​

引数 (Arguments): 実装定義

レスポンス (Responses): 実装定義

結果 (Result): OK - コマンド完了 NO - 失敗 BAD - コマンド不明または引数が無効

  X で接頭辞されたコマンドはすべて実験的コマンドである. この仕様の一部でないコマンド, この仕様の標準または標準トラック改訂, または IESG 承認済みの実験的プロトコルは, X 接頭辞を使用しなければならない (MUST).

実験的コマンドによって発行される追加のタグなしレスポンスも, X で接頭辞されなければならない (MUST). サーバー実装は, クライアントが関連する実験的コマンドを発行して要求しない限り, そのようなタグなしレスポンスを送信してはならない (MUST NOT).

例: C: a441 CAPABILITY S: * CAPABILITY IMAP4rev1 XPIG-LATIN S: a441 OK CAPABILITY completed C: A442 XPIG-LATIN S: * XPIG-LATIN ow-nay eaking-spay ig-pay atin-lay S: A442 OK XPIG-LATIN ompleted-cay

  1.  サーバーレスポンス (Server Responses)

    サーバーレスポンスには 3 つの形式がある: ステータスレスポンス, サーバーデータ, コマンド継続リクエスト. 以下のレスポンス説明で「Contents:」によって識別されるサーバーレスポンスに含まれる情報は, 構文ではなく機能によって説明される. サーバーレスポンスの正確な構文は, 正式構文 (Formal Syntax) セクションで説明される.

    クライアントは常に任意のレスポンスを受け入れる準備ができていなければならない (MUST).

    ステータスレスポンスは, タグ付きまたはタグなしのいずれかにできる. タグ付きステータスレスポンスは, クライアントコマンドの完了結果 (OK, NO, BAD ステータス) を示し, コマンドに一致するタグを持つ.

    一部のステータスレスポンスとすべてのサーバーデータはタグなしである. タグなしレスポンスは, タグの代わりにトークン "*" によって示される. タグなしステータスレスポンスは, サーバーグリーティング, またはコマンドの完了を示さないサーバーステータスを示す.

RFC 3501 IMAPv4 March 2003

(例えば, 差し迫ったシステムシャットダウンの警告). 歴史的な理由から, タグなしサーバーデータレスポンスは「非要求データ (unsolicited data)」とも呼ばれる. ただし, 厳密に言えば, 一方的なサーバーデータのみが真に「非要求」である.

特定のサーバーデータは, 受信時にクライアントによって記録されなければならない (MUST). これはそのデータの説明に記載されている. そのようなデータは, 後続のすべてのコマンドとレスポンスの解釈に影響を与える重要な情報を伝える (例えば, メッセージの作成または破棄を反映する更新).

他のサーバーデータは, 後で参照するために記録すべきである (SHOULD). クライアントがデータを記録する必要がない場合, またはデータの記録に明らかな目的がない場合 (例えば, 進行中の SEARCH コマンドがないときの SEARCH レスポンス), そのデータは無視すべきである (SHOULD).

一方的なタグなしサーバーデータの例は, IMAP 接続が選択済み状態のときに発生する. 選択済み状態では, サーバーはコマンド実行の一部として新しいメッセージがないかメールボックスをチェックする. 通常, これはすべてのコマンドの実行の一部である. したがって, NOOP コマンドで新しいメッセージをチェックするのに十分である. 新しいメッセージが見つかった場合, サーバーはメールボックスの新しいサイズを反映するタグなし EXISTS と RECENT レスポンスを送信する. 同じメールボックスへの複数の同時アクセスを提供するサーバー実装は, 別のエージェントが任意のメッセージフラグの状態を変更したり, メッセージを expunge したりした場合, 適切な一方的なタグなし FETCH と EXPUNGE レスポンスも送信すべきである (SHOULD).

コマンド継続リクエストレスポンスは, タグの代わりにトークン "+" を使用する. これらのレスポンスは, 不完全なクライアントコマンドの受け入れと, コマンドの残りの部分への準備ができていることを示すためにサーバーによって送信される.

7.1. サーバーレスポンス - ステータスレスポンス (Server Responses - Status Responses)​

ステータスレスポンスは OK, NO, BAD, PREAUTH, BYE である. OK, NO, BAD はタグ付きまたはタグなしにできる. PREAUTH と BYE は常にタグなしである.

ステータスレスポンスには, オプションの「レスポンスコード」を含めることができる (MAY). レスポンスコードは, 角括弧内のアトムの形式のデータで構成され, 必要に応じてスペースと引数が続く. レスポンスコードには, OK/NO/BAD 条件を超えた追加情報またはステータスコードが含まれ, 追加情報に基づいてクライアントが実行できる特定のアクションがある場合に定義される.

RFC 3501 IMAPv4 March 2003

現在定義されているレスポンスコードは以下のとおりである:

  ALERT

人間が読めるテキストには, ユーザーの注意をメッセージに向けさせる方法でユーザーに提示されなければならない (MUST) 特別な警告が含まれている.

BADCHARSET

必要に応じて, 文字セットの括弧付きリストが続く. 指定された文字セットがこの実装でサポートされていないため, SEARCH が失敗した. オプションの文字セットリストが指定された場合, これはこの実装でサポートされている文字セットをリストする.

CAPABILITY

機能のリストが続く. これは, 初期の機能リストを送信するために, 初期の OK または PREAUTH レスポンスに現れることができる. これにより, クライアントがこのレスポンスを認識する場合, 個別の CAPABILITY コマンドを送信する必要がなくなる.

PARSE

人間が読めるテキストは, メールボックス内のメッセージの [RFC-2822] ヘッダーまたは [MIME-IMB] ヘッダーの解析におけるエラーを表す.

PERMANENTFLAGS

フラグの括弧付きリストが続き, クライアントが永続的に変更できる既知のフラグを示す. FLAGS タグなしレスポンスにはあるが PERMANENTFLAGS リストにはないフラグは, 永続的に設定できない. クライアントが PERMANENTFLAGS リストにないフラグを STORE しようとした場合, サーバーは変更を無視するか, 現在のセッションの残りの間だけ状態変更を保存する. PERMANENTFLAGS リストには, 特別なフラグ \* を含めることもできる. これは, メールボックスにそれらのフラグを保存しようとすることによって新しいキーワードを作成できることを示す.

RFC 3501 IMAPv4 March 2003

  READ-ONLY

メールボックスが読み取り専用として選択されている, または選択中のアクセスが読み書きから読み取り専用に変更された.

READ-WRITE

メールボックスが読み書きとして選択されている, または選択中のアクセスが読み取り専用から読み書きに変更された.

TRYCREATE

APPEND または COPY の試行が, (他の理由ではなく) ターゲットメールボックスが存在しないために失敗している. これは, メールボックスが最初に CREATE コマンドで作成されれば操作が成功できるというヒントをクライアントに与える.

UIDNEXT

10 進数が続き, 次の一意識別子値を示す. 詳細についてはセクション 2.3.1.1 を参照のこと.

UIDVALIDITY

10 進数が続き, 一意識別子有効性値を示す. 詳細についてはセクション 2.3.1.1 を参照のこと.

UNSEEN

10 進数が続き, \Seen フラグが設定されていない最初のメッセージの番号を示す.

特定のクライアントまたはサーバー実装によって定義された追加のレスポンスコードは, このプロトコルの改訂に追加されるまで, "X" で接頭辞されるべきである (SHOULD). クライアント実装は, 認識しないレスポンスコードを無視すべきである (SHOULD).

7.1.1. OK レスポンス​

Contents: オプションのレスポンスコード 人間が読めるテキスト

  OK レスポンスは, サーバーからの情報メッセージを示す. タグ付きの場合, 関連するコマンドの正常な完了を示す. 人間が読めるテキストは, 情報メッセージとしてユーザーに提示されてもよい (MAY). タグなし形式は情報のみのメッセージを示す. 情報の性質はレスポンスコードによって示される場合がある.

RFC 3501 IMAPv4 March 2003

  タグなし形式は, 接続開始時の 3 つの可能なグリーティングの 1 つとしても使用される. これは, 接続がまだ認証されておらず, LOGIN コマンドが必要であることを示す.

例: S: * OK IMAP4rev1 server ready C: A001 LOGIN fred blurdybloop S: * OK [ALERT] System shutdown in 10 minutes S: A001 OK LOGIN Completed

7.1.2. NO レスポンス​

Contents: オプションのレスポンスコード 人間が読めるテキスト

  NO レスポンスは, サーバーからの運用上のエラーメッセージを示す. タグ付きの場合, 関連するコマンドの失敗を示す. タグなし形式は警告を示し, コマンドは正常に完了し得る. 人間が読めるテキストは状態を説明する.

例: C: A222 COPY 1:2 owatagusiam S: * NO Disk is 98% full, please delete unnecessary data S: A222 OK COPY completed C: A223 COPY 3:200 blurdybloop S: * NO Disk is 98% full, please delete unnecessary data S: * NO Disk is 99% full, please delete unnecessary data S: A223 NO COPY failed: disk is full

7.1.3. BAD レスポンス​

Contents: オプションのレスポンスコード 人間が読めるテキスト

  BAD レスポンスは, サーバーからのエラーメッセージを示す. タグ付きの場合, クライアントのコマンドにおけるプロトコルレベルのエラーを報告し, タグはエラーの原因となったコマンドを示す. タグなし形式は, 関連するコマンドを特定できないプロトコルレベルのエラーを示し, サーバーの内部障害を示すこともある. 人間が読めるテキストは状態を説明する.

RFC 3501 IMAPv4 March 2003

例: C: ...very long command line... S: * BAD Command line too long C: ...empty line... S: * BAD Empty command line C: A443 EXPUNGE S: * BAD Disk crash, attempting salvage to a new disk! S: * OK Salvage successful, no data lost S: A443 OK Expunge completed

7.1.4. PREAUTH レスポンス​

Contents: オプションのレスポンスコード 人間が読めるテキスト

  PREAUTH レスポンスは常にタグなしであり, 接続開始時の 3 つの可能なグリーティングの 1 つである. 接続が外部の手段によってすでに認証されていることを示し, したがって LOGIN コマンドは不要である.

例: S: * PREAUTH IMAP4rev1 server logged in as Smith

7.1.5. BYE レスポンス​

Contents: オプションのレスポンスコード 人間が読めるテキスト

  BYE レスポンスは常にタグなしであり, サーバーが接続を閉じようとしていることを示す. 人間が読めるテキストは, クライアントによってステータスレポートでユーザーに表示されてもよい (MAY). BYE レスポンスは次の 4 つの条件のいずれかで送信される:

1) 通常のログアウトシーケンスの一部として. サーバーは, LOGOUT コマンドへのタグ付き OK レスポンスを送信した後, 接続を閉じる.

2) パニックシャットダウンの告知として. サーバーは接続を直ちに閉じる.

3) 非アクティブ自動ログアウトの告知として. サーバーは接続を直ちに閉じる.

4) 接続開始時の 3 つの可能なグリーティングの 1 つとして, サーバーがこのクライアントからの接続を受け入れる意思がないことを示す. サーバーは接続を直ちに閉じる.

RFC 3501 IMAPv4 March 2003

  通常の LOGOUT シーケンスの一部として発生する BYE (最初の場合) と, 障害が原因で発生する BYE (他の 3 つの場合) の違いは, 障害の場合には接続が直ちに閉じられることである. すべての場合において, クライアントは接続が閉じられるまでサーバーからのレスポンスデータを読み続けるべきである (SHOULD). これにより, 保留中のタグなしレスポンスまたは完了レスポンスが読み取られ処理されることが保証される.

例: S: * BYE Autologout; idle for too long

7.2. サーバーレスポンス - サーバーおよびメールボックスのステータス (Server Responses - Server and Mailbox Status)​

これらのレスポンスは常にタグなしである. これは, サーバーおよびメールボックスのステータスデータがサーバーからクライアントへ送信される方法である. これらのレスポンスの多くは, 通常, 同じ名前のコマンドの結果として発生する.

7.2.1. CAPABILITY レスポンス​

Contents: 機能リスト (capability listing)

  CAPABILITY レスポンスは, CAPABILITY コマンドの結果として発生する. 機能リストには, サーバーがサポートする機能名のスペース区切りのリストが含まれる. 機能リストには, アトム "IMAP4rev1" が含まれなければならない (MUST).

さらに, クライアントとサーバーの実装は, STARTTLS, LOGINDISABLED, AUTH=PLAIN ( [IMAP-TLS] で説明) の各機能を実装しなければならない (MUST). 重要な情報については, セキュリティに関する考慮事項のセクションを参照のこと.

"AUTH=" で始まる機能名は, サーバーがその特定の認証メカニズムをサポートしていることを示す.

LOGINDISABLED 機能は, LOGIN コマンドが無効であることを示し, ユーザー名とパスワードが有効であっても, LOGIN コマンドを使用しようとする試みに対してサーバーがタグ付き NO レスポンスで応答することを示す. IMAP クライアントは, サーバーが LOGINDISABLED 機能を通知している場合, LOGIN コマンドを発行してはならない (MUST NOT).

他の機能名は, サーバーが IMAP4rev1 プロトコルへの拡張, 改訂, または修正をサポートしていることを示す. サーバーレスポンスは, クライアントが関連する機能を使用するコマンドを発行するまで, この文書に準拠しなければならない (MUST).

機能名は, "X" で始まるか, IANA に登録された標準または標準トラックの IMAP4rev1 拡張, 改訂, または修正のいずれかでなければならない (MUST). サーバーは, そのような名前が "X" で接頭辞されない限り, 未登録または非標準の機能名を提供してはならない (MUST NOT).

RFC 3501 IMAPv4 March 2003

  クライアント実装は, "IMAP4rev1" 以外の機能名を要求すべきではなく (SHOULD NOT), 未知の機能名はすべて無視しなければならない (MUST).

サーバーは, 初期の PREAUTH または OK レスポンスで CAPABILITY レスポンスコードを使用し, 認証成功の一部としてタグ付き OK レスポンスで更新された CAPABILITY レスポンスコードを送信することによって, 機能を自動的に送信してもよい (MAY). クライアントがこれらの自動機能を認識する場合, 個別の CAPABILITY コマンドを送信する必要はない.

例: S: * CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN

7.2.2. LIST レスポンス​

Contents: 名前属性 (name attributes) 階層区切り文字 (hierarchy delimiter) 名前 (name)

  LIST レスポンスは, LIST コマンドの結果として発生する. LIST 仕様に一致する単一の名前を返す. 単一の LIST コマンドに対して複数の LIST レスポンスが存在し得る.

4 つの名前属性が定義されている:

\Noinferiors
この名前の下に階層の子レベルが存在することは不可能である. 現在子レベルは存在せず, 将来作成することもできない.

\Noselect
この名前を選択可能なメールボックスとして使用することはできない.

\Marked
メールボックスはサーバーによって「興味深い」とマークされている. メールボックスには, 最後にメールボックスが選択された後に追加されたメッセージがおそらく含まれる.

\Unmarked
メールボックスには, 最後にメールボックスが選択された後, 追加のメッセージが含まれていない.

RFC 3501 IMAPv4 March 2003

  サーバーがメールボックスが「興味深い」かどうかを判断できない場合, または名前が \Noselect 名である場合, サーバーは \Marked または \Unmarked のいずれも送信すべきではない (SHOULD NOT).

階層区切り文字は, メールボックス名の階層レベルを区切るために使用される文字である. クライアントはそれを使用して子メールボックスを作成し, 命名階層の上位または下位レベルを検索できる. トップレベルの階層ノードのすべての子は, 同じ区切り文字を使用しなければならない (MUST). NIL の階層区切り文字は, 階層が存在しないことを意味し, 名前は「フラット」な名前である.

名前は曖昧さのない左から右への階層を表し, LIST および LSUB コマンドで参照として使用するために有効でなければならない (MUST). \Noselect が示されていない限り, 名前は SELECT などメールボックス名を受け入れるコマンドの引数としても有効でなければならない (MUST).

例: S: * LIST (\Noselect) "/" ~/Mail/foo

7.2.3. LSUB レスポンス​

Contents: 名前属性 (name attributes) 階層区切り文字 (hierarchy delimiter) 名前 (name)

  LSUB レスポンスは, LSUB コマンドの結果として発生する. LSUB 仕様に一致する単一の名前を返す. 単一の LSUB コマンドに対して複数の LSUB レスポンスが存在し得る. データの形式は LIST レスポンスと同一である.

例: S: * LSUB () "." #news.comp.mail.misc

7.2.4. STATUS レスポンス​

Contents: 名前 (name) ステータス括弧付きリスト (status parenthesized list)

  STATUS レスポンスは, STATUS コマンドの結果として発生する. STATUS 仕様に一致するメールボックス名と, 要求されたメールボックスのステータス情報を返す.

例: S: * STATUS blurdybloop (MESSAGES 231 UIDNEXT 44292)

RFC 3501 IMAPv4 March 2003

7.2.5. SEARCH レスポンス​

Contents: ゼロ個以上の数値 (zero or more numbers)

  SEARCH レスポンスは, SEARCH または UID SEARCH コマンドの結果として発生する. 数値は, 検索条件に一致するメッセージを参照する. SEARCH の場合, これらはメッセージシーケンス番号であり, UID SEARCH の場合, これらは一意識別子である. 各数値はスペースで区切られる.

例: S: * SEARCH 2 3 6

7.2.6. FLAGS レスポンス​

Contents: フラグ括弧付きリスト (flag parenthesized list)

  FLAGS レスポンスは, SELECT または EXAMINE コマンドの結果として発生する. フラグ括弧付きリストは, このメールボックスに適用可能なフラグ (最低でもシステム定義フラグ) を識別する. システムフラグ以外のフラグも, サーバー実装に応じて存在し得る.

FLAGS レスポンスからの更新は, クライアントによって記録されなければならない (MUST).

例: S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)

7.3. サーバーレスポンス - メールボックスサイズ (Server Responses - Mailbox Size)​

これらのレスポンスは常にタグなしである. これは, メールボックスのサイズの変化がサーバーからクライアントへ送信される方法である. "*" トークンの直後に, メッセージ数を表す数値が続く.

7.3.1. EXISTS レスポンス​

Contents: なし (none)

  EXISTS レスポンスは, メールボックス内のメッセージ数を報告する. このレスポンスは, SELECT または EXAMINE コマンドの結果として, およびメールボックスのサイズが変化した場合 (例: 新しいメッセージ) に発生する.

EXISTS レスポンスからの更新は, クライアントによって記録されなければならない (MUST).

例: S: * 23 EXISTS

RFC 3501 IMAPv4 March 2003

7.3.2. RECENT レスポンス​

Contents: なし (none)

  RECENT レスポンスは, \Recent フラグが設定されたメッセージの数を報告する. このレスポンスは, SELECT または EXAMINE コマンドの結果として, およびメールボックスのサイズが変化した場合 (例: 新しいメッセージ) に発生する.

注記: 最近のメッセージのメッセージシーケンス番号が, メールボックス内の最も高い n 個のメッセージの連続範囲になることは保証されない (n は RECENT レスポンスによって報告される値). そうでない場合の例は, 複数のクライアントが同じメールボックスを開いている場合 (最初に通知されたセッションはそれを recent として見るが, 他のセッションはおそらく非 recent として見る), およびメールボックスが非 IMAP エージェントによって並べ替えられた場合である.

最近のメッセージを識別する信頼できる唯一の方法は, メッセージフラグを見て \Recent フラグが設定されているかを確認するか, SEARCH RECENT を実行することである.

RECENT レスポンスからの更新は, クライアントによって記録されなければならない (MUST).

例: S: * 5 RECENT

7.4. サーバーレスポンス - メッセージステータス (Server Responses - Message Status)​

これらのレスポンスは常にタグなしである. これは, メッセージデータがサーバーからクライアントへ送信される方法であり, 多くの場合, 同じ名前のコマンドの結果として送信される. "*" トークンの直後に, メッセージシーケンス番号を表す数値が続く.

7.4.1. EXPUNGE レスポンス​

Contents: なし (none)

  EXPUNGE レスポンスは, 指定されたメッセージシーケンス番号がメールボックスから永久に削除されたことを報告する. メールボックス内の後続の各メッセージのメッセージシーケンス番号は直ちに 1 減らされ, この減算は後続のレスポンス (他のタグなし EXPUNGE レスポンスを含む) のメッセージシーケンス番号に反映される.

RFC 3501 IMAPv4 March 2003

  EXPUNGE レスポンスは, メールボックス内のメッセージ数も減らす. 新しい値を持つ EXISTS レスポンスを送信する必要はない.

即時減算規則の結果として, 一連の EXPUNGE レスポンスに現れるメッセージシーケンス番号は, メッセージが低い番号から高い番号へ削除されるか, 高い番号から低い番号へ削除されるかによって異なる. 例えば, 9 メッセージのメールボックスの最後の 5 メッセージが expunge される場合, 「低い方から高い方」のサーバーはメッセージシーケンス番号 5 に対して 5 つのタグなし EXPUNGE レスポンスを送信するのに対し, 「高い方から低い方」のサーバーはメッセージシーケンス番号 9, 8, 7, 6, 5 に対して連続するタグなし EXPUNGE レスポンスを送信する.

EXPUNGE レスポンスは, コマンドの実行中でないとき, および FETCH, STORE, または SEARCH コマンドへの応答中には送信されてはならない (MUST NOT). この規則は, クライアントとサーバー間のメッセージシーケンス番号の同期喪失を防ぐために必要である. コマンドは, 完全なコマンドが受信されるまで「実行中」ではない. 特に, コマンド継続の交渉中はコマンドは「実行中」ではない.

注記: UID FETCH, UID STORE, UID SEARCH は, FETCH, STORE, SEARCH とは異なるコマンドである. EXPUNGE レスポンスは, UID コマンドの実行中に送信されてもよい (MAY).

EXPUNGE レスポンスからの更新は, クライアントによって記録されなければならない (MUST).

例: S: * 44 EXPUNGE

7.4.2. FETCH レスポンス​

Contents: メッセージデータ (message data)

  FETCH レスポンスは, メッセージに関するデータをクライアントに返す. データは, 括弧内のデータ項目名とその値のペアである. このレスポンスは, FETCH または STORE コマンドの結果として, および一方的なサーバーの決定 (例: フラグ更新) によって発生する.

現在のデータ項目は以下のとおりである:

BODY
拡張データのない BODYSTRUCTURE の形式.

RFC 3501 IMAPv4 March 2003

  BODY[\<section>]\&lt;\&lt;origin octet>>
指定されたセクションのボディ内容を表す文字列. 文字列は, コンテンツ転送エンコーディング, ボディタイプ, サブタイプに従ってクライアントによって解釈されるべきである (SHOULD).

起点オクテットが指定された場合, この文字列は, その起点オクテットで始まるボディ全体の部分文字列である. これは, BODY[]\&lt;0> は切り捨てられてもよい (MAY) が, BODY[] が切り捨てられることは決してないことを意味する.

注記: 起点オクテット機能は, クライアントが BODY[\<section>]\&lt;\&lt;partial>> データ項目の FETCH によって明示的に要求しない限り, サーバーが FETCH レスポンスで使用してはならない (MUST NOT).

8 ビットのテキストデータは, [CHARSET] 識別子がこのセクションのボディパラメータ括弧付きリストの一部である場合に許可される. ヘッダー (パート指定子 HEADER または MIME, または MESSAGE/RFC822 パートのヘッダー部分) は 7 ビットでなければならない (MUST) ことに注意. ヘッダーでは 8 ビット文字は許可されない. また, ヘッダーとボディの間の [RFC-2822] 区切り空行は, ヘッダー行のサブセット化の影響を受けないことにも注意. 空行は, ボディも空行もないメッセージの場合を除き, 常にヘッダーデータの一部として含まれる.

バイナリデータなどの非テキストデータは, クライアントに送信される前に, BASE64 などのテキスト形式に転送エンコードされなければならない (MUST). 元のバイナリデータを導出するために, クライアントは転送エンコードされた文字列をデコードしなければならない (MUST).

BODYSTRUCTURE
[MIME-IMB] ボディ構造を記述する括弧付きリスト. これは, [MIME-IMB] ヘッダーフィールドを解析し, 必要に応じてさまざまなフィールドをデフォルト設定することによってサーバーによって計算される.

例として, 48 行 2279 オクテットの単純なテキストメッセージは, 次のようなボディ構造を持ち得る: ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 2279 48)

複数パーツは, 括弧の入れ子によって示される. 括弧付きリストの最初の要素としてボディタイプを持つ代わりに, 1 つ以上の入れ子のボディ構造のシーケンスがある. 括弧付きリストの 2 番目の要素は, マルチパートサブタイプ (mixed, digest, parallel, alternative など) である.

RFC 3501 IMAPv4 March 2003

     例として, テキストと BASE64 エンコードされたテキスト添付ファイルからなる 2 パーツメッセージは, 次のようなボディ構造を持ち得る: (("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 1152 23)("TEXT" "PLAIN" ("CHARSET" "US-ASCII" "NAME" "cc.diff") "``&lt;[email protected]&gt;``" "Compiler diff" "BASE64" 4554 73) "MIXED")

拡張データは, マルチパートサブタイプに続く. 拡張データは, BODY フェッチでは決して返されないが, BODYSTRUCTURE フェッチでは返され得る. 拡張データが存在する場合, 定義された順序でなければならない (MUST). マルチパートボディパートの拡張データは次の順序である:

body parameter parenthesized list
属性/値のペアの括弧付きリスト [例: ("foo" "bar" "baz" "rag") ここで "bar" は "foo" の値, "rag" は "baz" の値] ( [MIME-IMB] で定義).

body disposition
配置タイプの文字列, およびその後に [DISPOSITION] で定義される配置属性/値のペアの括弧付きリストからなる, 括弧付きリスト.

body language
[LANGUAGE-TAGS] で定義されるボディ言語値を与える文字列または括弧付きリスト.

body location
[LOCATION] で定義されるボディコンテンツ URI を与える文字列リスト.

これに続く拡張データは, このプロトコルのこのバージョンではまだ定義されていない. そのような拡張データは, ゼロ個以上の NIL, 文字列, 数値, またはそのようなデータの潜在的に入れ子になった括弧付きリストから構成され得る. BODYSTRUCTURE フェッチを行うクライアント実装は, そのような拡張データを受け入れる準備ができていなければならない (MUST). サーバー実装は, このプロトコルの改訂によって定義されるまで, そのような拡張データを送信してはならない (MUST NOT).

非マルチパートボディパートの基本フィールドは次の順序である:

body type
[MIME-IMB] で定義されるコンテンツメディアタイプ名を与える文字列.

RFC 3501 IMAPv4 March 2003

     body subtype
[MIME-IMB] で定義されるコンテンツサブタイプ名を与える文字列.

body parameter parenthesized list
属性/値のペアの括弧付きリスト [例: ("foo" "bar" "baz" "rag") ここで "bar" は "foo" の値, "rag" は "baz" の値] ( [MIME-IMB] で定義).

body id
[MIME-IMB] で定義されるコンテンツ id を与える文字列.

body description
[MIME-IMB] で定義されるコンテンツ説明を与える文字列.

body encoding
[MIME-IMB] で定義されるコンテンツ転送エンコーディングを与える文字列.

body size
ボディのサイズをオクテットで与える数値. このサイズは, 転送エンコーディングにおけるサイズであり, いかなるデコード後の結果サイズではないことに注意.

MESSAGE タイプでサブタイプが RFC822 であるボディタイプは, 基本フィールドの直後に, カプセル化されたメッセージのエンベロープ構造, ボディ構造, およびテキスト行数でのサイズを含む.