原文:ftp://ftp.rfc-editor.org/in-notes/rfc1730.txt
訳注:IMAP4仕様の最新はRFC3501です(2004/02/16時点)。
サイト内関連リンク:RFC 1939 POP3
この文書はインターネットコミュニティの為のインターネット標準トラックプロトコルについて述べており、改良に向けての議論と提案を求めている。このプロトコルの標準化の状態と状況は "Internet Official Protocol Standards"(STD 1)を参照して欲しい。この文書の配布は無制限である。
Internet Message Access Protocol, Version 4 (IMAP4)は、クライアントがサーバー上の電子メールへのアクセスと操作を行う事を可能にする。IMAP4は"メールボックス"と呼ばれるリモートのメッセージフォルダの操作を可能にする。ある程度まで、それはローカルメッセージボックスに対してと同様に機能する。IMAP4はオフラインのクライアントがサーバーと再同期する機能も提供する([IMAP-DISC]参照)。
IMAP4は、メールボックスの作成・削除・名前変更、新規メッセージの確認、メッセージの完全な削除、フラグの設定と解除、RFC822とMIMEの解析、検索、メッセージの属性・文章・一部分からの選択取得の為の操作を含んでいる。IMAP4上のメッセージは数字を用いてアクセスされる。その数字は、メッセージ連番(1から始まりメールボックス内のメッセージ数までの相対位置)、またはユニーク識別子(各々のメッセージに割当てられる不変で厳密に増加する値であり、連番である必要はない)である。
IMAP4は単一サーバーをサポートする。複数IMAP4サーバーをサポートするメカニズムは[IMSP]で議論されている。
IMAP4はメール送信に付いては規定しない。その機能は[SMTP]のようなメール転送プロトコルが扱う。
IMAP4は[IMAP2]プロトコルの上位互換となるように設計されている。互換性の問題は[IMAP-COMPAT]で議論されている。
IMAP4プロトコル規約
1. この文書の構成
1.1. この文書の読み方
1.2. この文書で使用される慣例
2. プロトコル概観
2.1. 回線水準
2.2. 命令と応答
2.2.1. プロトコル送信側クライアントとプロトコル受信側サーバー
2.2.2. プロトコル送信側サーバーとプロトコル受信側クライアント
3. 状態と流れ図
3.1. 未認証状態
3.2. 認証済み状態
3.3. 選択済み状態
3.4. ログアウト状態
4. データフォーマット
4.1. アトム
4.2. 数値
4.3. 文字列
4.3.1. 8ビット及びバイナリの文字列
4.4. 括弧で括られたリスト
4.5. NIL
5. 操作上の考慮
5.1. メールボックスの名前付け
5.2. メールボックスサイズとメッセージス状態の更新
5.3. 命令が進行中ではない場合の応答
5.4. 自動ログアウトタイマー
5.5. 進行中の複数命令
6. クライアント命令
6.1. クライアント命令 - 任意の状態
6.1.1. CAPABILITY 命令
6.1.2. NOOP 命令
6.1.3. LOGOUT 命令
6.2. クライアント命令 - 未認証状態
6.2.1. AUTHENTICATE 命令
6.2.2. LOGIN 命令
6.3. クライアント命令 - 認証済み状態
6.3.1. SELECT 命令
6.3.2. EXAMINE 命令
6.3.3. CREATE 命令
6.3.4. DELETE 命令
6.3.5. RENAME 命令
6.3.6. SUBSCRIBE 命令
6.3.7. UNSUBSCRIBE 命令
6.3.8. LIST 命令
6.3.9. LSUB 命令
6.3.10. APPEND 命令
6.4. クライアント命令 - 選択済み状態
6.4.1. CHECK 命令
6.4.2. CLOSE 命令
6.4.3. EXPUNGE 命令
6.4.4. SEARCH 命令
6.4.5. FETCH 命令
6.4.6. PARTIAL 命令
6.4.7. STORE 命令
6.4.8. COPY 命令
6.4.9. UID 命令
6.5. クライアント命令 - 実験的/拡張
6.5.1. X<アトム> 命令
7. サーバー応答
7.1. サーバー応答 - 状態応答
7.1.1. OK 応答
7.1.2. NO 応答
7.1.3. BAD 応答
7.1.4. PREAUTH 応答
7.1.5. BYE 応答
7.2. サーバー応答 - サーバーとメールボックスの状態
7.2.1. CAPABILITY 応答
7.2.2. LIST 応答
7.2.3. LSUB 応答
7.2.4. SEARCH 応答
7.2.5. FLAGS 応答
7.3. サーバー応答 - メッセージの状態
7.3.1. EXISTS 応答
7.3.2. RECENT 応答
7.3.3. EXPUNGE 応答
7.3.4. FETCH 応答
7.3.5. 時代遅れの応答
7.4. サーバー応答 - 命令継続要求
8. IMAP4セッション例
9. 正式な文法
10. 著者による注記
11. セキュリティ考察
12. 著者のアドレス
付録
A. 時代遅れの命令
A.6.3.OBS.1. FIND ALL.MAILBOXES 命令
A.6.3.OBS.2. FIND MAILBOXES 命令
A.6.3.OBS.3. SUBSCRIBE MAILBOX 命令
A.6.3.OBS.4. UNSUBSCRIBE MAILBOX 命令
B. 時代遅れの応答
B.7.2.OBS.1. MAILBOX 応答
B.7.3.OBS.1. COPY 応答
B.7.3.OBS.2. STORE 応答
C. 参考文献
E. IMAP4キーワードインデックス
この文書はMPAP4クライアントやIMAP4サーバー実装者の視点から書かれている。セクション2のプロトコル概観以降は、このプロトコルの操作を理解しようとする人向けには最適化されていない。セクション3からセクション5の資料は、IMAP4が扱う一般的な状況と定義を提供する。
セクション6・7・9はそれぞれ、IMAPの命令・応答・文法に付いて説明している。これらの関係は、この内のどれでも個別に理解する事はほとんど不可能な類いのものである。特に、命令のセクションのみから命令の文法を推測しようとするべきではない。その代わりに、正式な文法セクションを参照するべきである。
例における"C:"と"S:"は、それぞれクライアントとサーバーから送信される行を示す。
IMAP4プロトコルは、TCPが提供するような信頼出来るデータストリームを仮定する。TCPが使用される場合、IMAP4サーバーはポート143を使用する。
IMAP4セッションは、クライアント/サーバー接続の確立、サーバーからの最初の挨拶、クライアント/サーバーの対話から構成される。クライアント/サーバーの対話は、クライアントの命令、サーバーのデータ、サーバーの完了結果応答から成る。
クライアントとサーバーによって送信される全ての対話は、行形式、すなわちCRLFで終わる文字列である。IMAP4のクライアントやサーバーのプロトコル受信側は、一行を読むか、総数が分かっているオクテット列の後に一行を読む。
クライアントの命令がオペレーションを開始する。各クライアント命令には、"タグ"と呼ばれる識別子(通常は短い英数字の文字列。例えば A0001、A0002など)が置かれる。クライアントによって、各々の命令に対して異なるタグが生成される。
クライアントからの一行が完全な命令を表わさない場合が二つある。ひとつは、命令の引数がオクテット数として参照されている場合(データフォーマットにおける文字列中のリテラルに付いての説明を参照)、もうひとつは、命令の引数がサーバーの応答を必要とする場合(AUTHENTICATE命令を参照)である。どちらの場合も、サーバーが残りのコマンドと(もしあるなら)オクテットの準備が出来ると、命令継続要求応答を送る。この応答は"+"記号を前に置く。
注意: 命令実行中にサーバーがエラーを検出した場合、サーバーはその命令を拒否し、クライアントがその命令をそれ以上送信する事を防ぐ為に、その命令と一致するタグを付けたBAD完了応答(後に説明する)を送信する。
サーバーは、(複数の命令が進行中ならば)他の命令に対する完了応答またはタグ無しデータを送る事も可能である。どちらの場合でも命令継続応答は未解決のままであり、クライアントはその応答に対して適切なアクションを取り、サーバーからの別の応答を待つ。
IMAP4サーバーのプロトコル受信側は、クライアントからの命令行を読み、命令と引数を解析し、サーバーのデータや命令の完了結果応答を送信する。
サーバーからクライアントに送信されるデータや、命令完了を示す以外の状態応答は"*"記号を前に置き、タグ無し応答と呼ばれる。
サーバーデータはクライアント命令の結果として送っても良いし、サーバーから一方的に送っても良い。特定の命令の結果としてのサーバーデータと、一方的に送られるサーバーデータの間に文法的な違いはない。
サーバーの完了結果応答は操作の成功・失敗を表わし、その操作を開始したクライアント命令と同じタグを持つ。これにより、2つ以上の命令が同時進行中の場合、サーバーの完了結果応答のタグはその応答が適用される命令を指す事になる。
3つのサーバー完了応答が存在する:OK(成功を示す)、NO(失敗を示す)、BAD(認識できない命令や文法エラーといったプロトコルエラーを示す)。
IMAP4クライアントのプロトコル受信側は、サーバーからの応答行を読み、応答の最初の記号(タグ、"*"または"+")に基いて行動を起こす。これは上記で説明した通りである。
クライアントは常に、サーバーからのいかなる応答でも受け付ける用意が出来ていなければならない(MUST)。クライアントがサーバーにデータを要求する命令を送るのではなく、記録されたコピーを参照出来るように、サーバーデータは記録されるべきである(SHOULD)。特定のサーバーデータでは、その記録は強制的なものとなる。
この話題はサーバー応答セクションでより詳細に議論される。
IMAP4サーバーは4つの状態の内のひとつを取る。ほとんどの命令は特定の状態でのみ有効である。ある命令が不適切な状態の時にクライアントがその命令を試みる事は、プロトコルエラーとなる。この場合サーバーは、BADまたはNO(サーバーの実装に依存する)を持つ命令完了結果を返す。
未認証状態では、ユーザーは大部分の命令が許可される前に認証証明を提供しなければならない。接続が事前認証されていない限り、接続開始時にこの状態に入る。
認証済み状態ではユーザーは認証されており、メッセージに影響する命令が許可される前に、アクセスするメールボックスを選択しなければならない。この状態には、事前認証接続が開始された時、または受入可能な認証証明が提供された時、またはメールボックス選択中にエラーが起きた後に入る。
選択済み状態では、アクセスするメールボックスが選択されている。この状態にはメールボックスの選択が成功した時に入る。
ログアウト状態ではセッションは終了しようとしており、サーバーは接続を切ろうとしている。この状態には、クライアント要求の結果、または一方的なサーバーの決定によって入る。
+--------------------------------------+ | 初期接続とサーバーの挨拶 | +--------------------------------------+ || (1) || (2) || (3) VV || || +-----------------+ || || | 未認証 | || || +-----------------+ || || || (7) || (4) || || || VV VV || || +----------------+ || || | 認証済み |<=++ || || +----------------+ || || || || (7) || (5) || (6) || || || VV || || || || +--------+ || || || || |選択済み|==++ || || || +--------+ || || || || (7) || VV VV VV VV +--------------------------------------+ | ログアウトと接続終了 | +--------------------------------------+ (1) 事前認証のない接続 (OK greeting) (2) 事前認証された接続 (PREAUTH greeting) (3) 接続拒否 (BYE greeting) (4) LOGIN命令またはAUTHENTICATE命令の成功 (5) SELECT命令またはEXAMINE命令の成功 (6) CLOSE命令の後, または SELECT命令・EXAMINE命令の失敗 (7) LOGOUT命令、サーバーシャットダウン、または接続終了
IMAP4はテキスト形式の命令と応答を使用する。IMAP4のデータは次の形式のひとつを取る事が出来る:アトム、数値、文字列、括弧で括られたリスト、NIL。
アトムはひとつ以上の非特殊文字から成る。
数値はひとつ以上の数字からなり、数値を表わす。
文字列は二つの形式の内のひとつを取る: リテラル、または引用符付き文字列。リテラル形式は文字列の一般的形式である。引用符付き文字列形式は、引用符付き文字列の中に含まれる文字の制限を犠牲にして、リテラルの処理のオーバーヘッドを避ける為の選択である。
リテラルは連続する0個以上のオクテット(CR、LFを含む)であり、左ブレース("{")・オクテット数・右ブレース("}")・CRLFという形式のオクテット数を前に置く。サーバーからクライアントにリテラルが送信される場合、オクテットデータの直後にCRLFが続く。クライアントからサーバーにリテラルが送信される場合、クライアントはオクテットデータ(および命令の残り)を送信する前に、命令継続要求(この文書内で後に説明する)の受信を待たなければならない。
引用符付き文字列は0個以上の7ビット文字の連続であり、CRLFを含まず、両端に二重引用符(<">)を持つ。
空文字列は、""(二重引用符の間に0文字を持つ引用符付き文字列)、または{0}の後にCRLFを付けて(オクテット数0のリテラルとして)表現される。
注意: オクテット数が0の場合でも、リテラルを送信するクライアントは命令継続要求を待たなければならない。
8ビットテキスト及びバイナリのメールは、[MIME-1]エンコードを通してサポートされる。IMAP4の実装は、リテラルとして8ビットまたは複数オクテットの文字を送信しても良い(MAY)が、それはその文字セットが識別可能な場合のみに限るべきである。
バイナリの本文のエンコードは定義されているが、エンコードされていないバイナリ文字列は許可されない。"バイナリ文字列"は、NUL文字を伴う任意の文字列である。データを送信する前に、実装はバイナリデータをBASE64のようなテキスト形式にエンコードしなければならない(MUST)。必須ではないが、多量のCTL文字を含む文字列もバイナリと見なして良い。
データ構造は"括弧で括られたリスト"(空白で区切られたデータ項目の並びで、両端を括弧で括る)として表わされる。括弧で括られたリストは、ネストを表す複数レベルの括弧を使用して、それ自身に別の括弧で括られたリストを含んでも良い。
空のリストは、()(メンバーを持たない括弧で括られたリスト)で表現される。
特殊なアトムである"NIL"は、文字列や括弧で括られたリストにおいて値が存在しない事を表わし、空文字列""や空のリスト()とは区別される。
メールボックス名の解釈は実装に依存する。ただし、INBOXというメールボックス名は、"このサーバー上でのこのユーザーの主要なメールボックス"を意味する為に予約された特別な名前である。階層的なメールボックス名をエクスポートしたい場合、メールボックス名は階層レベルを区切る為の単一文字を用いた左から右への階層構造にしなければならない。ひとつの名前の中では、全ての階層レベルの為に同じ階層区切り文字を使用する。
サーバーは、クライアントが要求していないデータをいつでも送信出来る。時々このような動作が必要になる。例えばサーバーとは別のエージェントがメールボックスにメッセージを追加したり(例えば新規メールの配送)、メールボックス中のメッセージのフラグを変更したり、メールボックスからメッセージを削除する場合である。命令処理中にメールボックスサイズの変更が検出された場合、サーバーは自動的にメールボックスサイズ更新を送信しなければならない(MUST)。クライアントからの明確な更新要求がない場合でも、サーバーは自動的にメッセージフラグ更新を送信するべきである(SHOULD)。メッセージの削除による同期エラーを防ぐ為に、サーバーからクライアントへの特別な規則の通知が存在する。詳細はEXPUNGE応答の説明を参照して欲しい。
クライアントがサーバーからのデータの記録を行うかどうかという実装の決定には関係なく、クライアントはメールボックスサイズの更新を記録しなければならない(MUST)。クライアントは最初のメールボックス選択後のいかなる命令も、メールボックスのサイズを返す事を仮定してはならない(MUST NOT)。
サーバー実装は、命令(EXPUNGEを除く)が進行中でない間にタグ無し応答を送信しても良い。このような応答を送信するサーバー実装は、フロー制御を扱わなければならない(MUST)。具体的には、(1)データのサイズが下層トランスポートで利用可能なウィンドウサイズを越えない事を確かめるか、(2)非ブロッキング書き込みを使用しなければならない。
サーバーが非アクティブ自動ログアウトタイマーを持つ場合、タイマーは最低でも30分間持続時間を持たなければならない(MUST)。その間隔内でのクライアントからのいかなる命令の受信でも、自動ログアウトタイマーをリセットする為には十分であるべきである。
クライアントは、別の命令を送る前に完了結果応答を待つ必要はない(下層のフロー制御の影響は受ける)。同様にサーバーは、命令の結果が別の命令に影響を与えるような不明確さがない限り、次の命令処理を開始する前に別の命令を完了する必要はない。不明確さがある場合、サーバーはクライアントから与えられた順序で完了するように命令を実行する。
このセクションではIMAP4の命令を説明する。命令は、その命令が許可される状態によってグループ化されている。複数の状態において許可される命令は、許可される最低限の状態にリストされている(例えば認証済み状態と選択済み状態で有効な命令は、認証済み状態にリストされている)。
以下の説明中の引数("引数:"で示されている)は、文法に従ってではなく、機能に従って説明されている。引数の正確な文法は、正式な文法セクションで説明されている。
いくつかの命令は特定のサーバーデータの返信を発生させる。これらは以下の説明中、"データ:"で示されている。これらの応答に付いての情報は応答セクションを参照し、正確な文法に付いては正式な文法セクション内の応答の説明を参照して欲しい。任意の命令の結果としてサーバーデータを送信する事が可能である。つまり、サーバーデータを特に必要としない命令では、"無し"の代わりに"その命令に対する特別なデータでは無い"データを指定しても良い。
説明中の"結果:"は、命令へのあり得るタグ付き状態応答と、それらの状態応答の特別な解釈に付いて言及している。
次の命令はいかなる状態でも有効である:CAPABILITY,NOOP,LOGOUT
未認証状態ではAUTHENTICATE命令またはLOGIN命令が認証を確立し、認証状態に入る。LOGIN命令が伝統的なユーザー名と平文パスワードの組合せを使用するのに対し、AUTHENTICATE命令は様々な認証技術の為の一般的メカニズムを提供する。
サーバー実装は、特定のメールボックスへの未認証アクセスを許可しても良い。慣例的には、ユーザーID"anonymous"でLOGIN命令を使用する。パスワードは必要である。パスワードに何を要求するかや、匿名ユーザーにどのようなアクセス制限を課すかは実装依存である。
一旦認証(匿名も含めて)されると、未認証状態に戻る事は出来ない。
汎用命令(CAPABILITY、NOOP、LOGOUT)に加えて、未認証状態では次の命令が有効である:AUTHENTICATE、LOGIN。
認証済み状態では、メールボックスを一塊として扱う命令が許可される。これらの命令の内SELECT命令とEXAMINE命令がアクセスするメールボックスを選択し、選択済み状態に入らせる。
認証済み状態では、汎用命令(CAPABILITY、NOOP、LOGOUT)に加えて次の命令が有効である:SELECT、 EXAMINE、 CREATE、 DELETE、 RENAME、 SUBSCRIBE、 UNSUBSCRIBE、 LIST、 LSUB、 APPEND。
参照 メールボックス名 解釈 ------------ --------------- -------------- ~smith/Mail/ foo.* ~smith/Mail/foo.* archive/ % archive/% #news. comp.mail.* #news.comp.mail.* ~smith/Mail/ /usr/doc/foo /usr/doc/foo archive/ ~fred/Mail/* ~fred/Mail/*
選択済み状態では、メールボックス中のメッセージを操作する命令が許可される。
汎用命令(CAPABILITY、 NOOP、 LOGOUT)と、認証済み状態命令(SELECT、 EXAMINE、 CREATE、 DELETE、 RENAME、 SUBSCRIBE、 UNSUBSCRIBE、 LIST、 LSUB、 FIND ALL.MAILBOXES、 FIND MAILBOXES、 APPEND)に加えて、選択済み状態では次の命令が有効である:CHECK、 CLOSE、 EXPUNGE、 SEARCH、 FETCH、 PARTIAL、 STORE、 COPY、 UID。
0 | (メッセージの[RFC-822]ヘッダ) |
MULTIPART/MIXED | |
1 | TEXT/PLAIN |
2 | APPLICATION/OCTET-STREAM |
3 | MESSAGE/RFC822 |
3.0 | (メッセージの[RFC-822]ヘッダ) |
3.1 | TEXT/PLAIN |
3.2 | APPLICATION/OCTET-STREAM |
MULTIPART/MIXED | |
4.1 | IMAGE/GIF |
4.2 | MESSAGE/RFC822 |
4.2.0 | (メッセージの[RFC-822]ヘッダ) |
4.2.1 | TEXT/PLAIN |
MULTIPART/ALTERNATIVE | |
4.2.2.1 | TEXT/PLAIN |
4.2.2.2 | TEXT/RICHTEXT |
サーバー応答は三つの形式を持つ:状態応答、サーバーデータ、命令継続要求。
下記の説明中"データ:"で示されるサーバー応答情報は、文法に従ってではなく、機能に従って記述されている。サーバー応答の正確な文法は、正式な文法セクションで説明されている。
クライアントは常に、サーバーからのいかなる応答でも受け付ける準備が出来ていなければならない(MUST)。
タグ付きの状態応答はクライアント命令の完了結果を示し、命令と同じタグを持つ。
いくつかの状態応答と全てのサーバーデータは、タグ無しである。タグ無し応答はタグの代わりに記号"*"で表される。タグ無しの状態応答は、サーバー挨拶、または命令の完了を表さないサーバー状態を表す。厳密には一方的サーバーデータのみが真に"未承諾情報(unsolicited data)"なのだが、歴史的理由により、タグ無しサーバーデータ応答が"未承諾(unsolicited)"とも呼ばれる。
特定のサーバーデータは、それが受信された時にクライアントによって記録されなければならない(MUST)。これはそのデータの説明で注記する。そのようなデータは後続の命令と応答の解釈に影響する重要な情報(例えばメッセージの生成や破棄に影響する更新)を伝える。
他のサーバーデータは、後で参照出来るように記録されるべき(SHOULD)だが、そのデータを記録する必要が無いか、そのデータの記録に明確な目的がない場合(例えばSEARCH命令が実行されていない間のSEARCH応答)、そのデータは無視されるべきである(SHOULD)。
一方的タグ無し応答の例は、IMAP接続が選択済み状態の時に発生する。選択済み状態では、サーバーは各命令実行動作の一部として、新規メッセージの確認の為にメールボックスをチェックする。新規メッセージが見つかった場合、サーバーはメールボックスの新しいサイズを反映したタグ無しのEXISTS応答とRECENT応答を送信する。さらに、同じメールボックスへの複数同時アクセスを提供するサーバー実装は、別のエージェントがメッセージフラグの状態を変更したりメッセージを削除した場合に、適切な一方的タグ無しのFETCH応答とEXPUNGE応答を送信する。
命令継続要求応答は、タグの代わりに"+"記号を使用する。これらの応答は、不完全なクライアント命令の受け付けや、残りの命令への準備完了を示す為に、サーバーから送信される。
ステータス応答は任意の応答コードを含んでも良い。応答コードは、スクエアブラケットの内のアトム形式のデータから構成され、たいていは空白と引数がそれに続く。応答コードは、クライアントソフトウェアの為の追加情報やOK/NO/BAD以上のステータスコードを含み、クライアントが追加情報に基いて取る事の出来る特定の動作がある場合に定義される。
現在定義されている応答コードは以下の通り。
特定のクライアント実装またはサーバー実装によって定義される追加の応答コードは、それがこのプロトコルの改訂により追加されない限り、"X"を前に置くべきである。クライアント実装は認識できない応答コードを無視するべきである。
これらの応答は常にタグ無しである。これはしばしば、同名命令の結果として、サーバーからクライアントにどのようなデータが送信されたかを示す。
これらの応答は常にタグ無しである。これはしばしば、同名命令の結果として、サーバーからクライアントにどのようなメッセージデータが送信されたかを示す。"*"の直後に続くのは、メッセージ連番またはメッセージ総数のどちらかを表す数値である。
ここまでに挙げた応答に加え、クライアント実装は、付録Bで説明される時代遅れの応答の受入れと実装を行わなければならない(MUST)。
命令完了要求応答はタグの代わりに"+"で示される。この応答形式は、サーバーがクライアントからの命令の続きを受け付ける準備が出来た事を示す。この応答の残りはテキスト行である。
この応答はAUTHORIZATION命令中にサーバーのデータをクライアントに送信する為に使用され、クライアントの追加データを要求する。また、命令の引数がリテラルの場合にも使用される。
サーバーがリテラルのオクテットを要求するまで、クライアントはリテラルのオクテットを送信する事を許されない。これにより、サーバーが逐次行(line-by-line)の原則に基づいて命令処理とエラー拒否を行う事が可能になる。命令の残り(終端のCRLFを含む)は、このリテラルのオクテットの後に続く。追加の命令引数がある場合、このリテラルの後に、空白とその引数が続く。
以下は、あるIMAP4セッションの記録である。長い行は編集上の配慮により区切られている。
S: * OK IMAP4 Service Ready C: a001 login mrc secret S: a001 OK LOGIN completed C: a002 select inbox S: * 18 EXISTS S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) S: * 2 RECENT S: * OK [UNSEEN 17] Message 17 is the first unseen message S: * OK [UIDVALIDITY 3857529045] UIDs valid S: a002 OK [READ-WRITE] SELECT completed C: a003 fetch 12 full S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "14-Jul-1993 02:44:25 -0700" RFC822.SIZE 4282 ENVELOPE ("Wed, 14 Jul 1993 02:23:25 -0700 (PDT)" "IMAP4 WG mtg summary and minutes" (("Terry Gray" NIL "gray" "cac.washington.edu")) (("Terry Gray" NIL "gray" "cac.washington.edu")) (("Terry Gray" NIL "gray" "cac.washington.edu")) ((NIL NIL "imap" "cac.washington.edu")) ((NIL NIL "minutes" "CNRI.Reston.VA.US") ("John Klensin" NIL "KLENSIN" "INFOODS.MIT.EDU")) NIL NIL "<B27397-0100000@cac.washington.edu>") BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 3028 92)) S: a003 OK FETCH completed C: a004 fetch 12 rfc822.header S: * 12 FETCH (RFC822.HEADER {346} S: Date: Wed, 14 Jul 1993 02:23:25 -0700 (PDT) S: From: Terry Gray <gray@cac.washington.edu> S: Subject: IMAP4 WG mtg summary and minutes S: To: imap@cac.washington.edu S: cc: minutes@CNRI.Reston.VA.US, John Klensin <KLENSIN@INFOODS.MIT.EDU> S: Message-Id: <B27397-0100000@cac.washington.edu> S: MIME-Version: 1.0 S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII S: S: ) S: a004 OK FETCH completed C: a005 store 12 +flags \deleted S: * 12 FETCH (FLAGS (\Seen \Deleted)) S: a005 OK +FLAGS completed C: a006 logout S: * BYE IMAP4 server terminating connection S: a006 OK LOGOUT completed
以下の文法仕様は、一つの例外("#"構造の区切り記号は単独の空白(SPACE)であり、カンマではない)を除き、[RFC-822]で規定されるAugmented Backus-Naur Form(ABNF)記法を使用している。
特に注記がなければ、全てのアルファベットの大文字・小文字は区別されない。トークン文字列を定義する為の大文字・小文字の使用は、単に編集上の配慮である。実装は大文字・小文字を区別しない様式でこれらの文字列を受入れなければならない(MUST)。
obsolete(時代遅れ)と記されている文法は、このプロトコルの以前のバージョン(例えばIMAP2)用に作られた実装で使用される。新しい実装は入力としてそ文法を受入れるべき(SHOULD)だが、他ではそのような文法を使用してはならない(MUST NOT)。
address | ::= | "(" addr_name SPACE addr_adl SPACE addr_mailbox SPACE addr_host ")" |
addr_adl | ::= | nstring |
addr_host | ::= |
nstring ;; NILは[RFC-822]グループの文法を表す |
addr_mailbox | ::= |
nstring ;; NILは[RFC-822]グループの終わりを表す ;; NILではなく、かつaddr_hostがNILLの場合、 ;; [RFC-822]グループの名称である |
addr_name | ::= | nstring |
alpha | ::= |
"A" / "B" / "C" / "D" / "E" / "F" / "G" / "H" / "I" / "J" / "K" / "L" / "M" / "N" / "O" / "P" / "Q" / "R" / "S" / "T" / "U" / "V" / "W" / "X" / "Y" / "Z" / "a" / "b" / "c" / "d" / "e" / "f" / "g" / "h" / "i" / "j" / "k" / "l" / "m" / "n" / "o" / "p" / "q" / "r" / "s" / "t" / "u" / "v" / "w" / "x" / "y" / "z" / ;; 大文字・小文字は区別される |
append | ::= | "APPEND" SPACE mailbox [SPACE flag_list][SPACE date_time] SPACE literal |
astring | ::= | atom / string |
atom | ::= | 1*ATOM_CHAR |
ATOM_CHAR | ::= | <atom_specialsを除く任意のCHAR> |
atom_specials | ::= | "(" / ")" / "{" / SPACE / CTLs / list_wildcards / quoted_specials |
authenticate | ::= | "AUTHENTICATE" SPACE auth_type *(CRLF base64) |
auth_type | ::= | atom |
base64 | ::= | *(4base64_char) [base64_terminal] |
base64_char | ::= | alpha / digit / "+" / "/" |
base64_terminal | ::= | (2base64_char "==") / (3base64_char "=") |
body | ::= | "(" body_type_1part / body_type_mpart ")" |
body_extension | ::= |
nstring / number / "(" 1#body_extension ")" ;; 将来の拡張用。 ;; クライアント実装はbody_extensionフィール ;; ドを受け入れなければならない(MUST)。 ;; サーバー実装は、この仕様の将来の改定で ;; 定義されない限り、このフィールドを ;; 生成してはならない(MUST NOT)。 |
body_ext_1part | ::= |
body_fld_md5 [SPACE 1#body_extension] ;; 拡張不可能な"BODY"の取得に対して返されて ;; はならない(MUST NOT) |
body_ext_mpart | ::= |
body_fld_param [SPACE 1#body_extension]]
;; 拡張不可能な"BODY"の取得に対して返されて ;; はならない(MUST NOT) |
body_fields | ::= | body_fld_param SPACE body_fld_id SPACE body_fld_desc SPACE body_fld_enc SPACE body_fld_octets |
body_fld_desc | ::= | nstring |
body_fld_enc | ::= | (<"> ("7BIT" / "8BIT" / "BINARY" / "BASE64"/ "QUOTED-PRINTABLE") <">) / string |
body_fld_id | ::= | nstring |
body_fld_lines | ::= | number |
body_fld_md5 | ::= | nstring |
body_fld_octets | ::= | number |
body_fld_param | ::= | "(" 1#(string string) ")" / nil |
body_fld_subtyp | ::= | string |
body_type_1part | ::= | (body_type_basic / body_type_msg / body_type_text) [SPACE body_ext_1part] |
body_type_basic | ::= |
(<"> ("APPLICATION" / "AUDIO" / "IMAGE" / "MESSAGE" / "VIDEO") <">) / string) SPACE body_fld_subtyp SPACE body_fields ;; サブタイプMESSAGEは"RFC822"であっては ;; ならない(MUST NOT)。 |
body_type_mpart | ::= | 1*body SPACE body_fld_subtyp [SPACE body_ext_mpart] |
body_type_msg | ::= | <"> "MESSAGE" <"> SPACE <"> "RFC822" <"> SPACE body_fields SPACE envelope SPACE body SPACE body_fld_lines |
body_type_text | ::= | <"> "TEXT" <"> SPACE body_fld_subtyp SPACE body_fields SPACE body_fld_lines |
capability | ::= |
atom ;; "X"de始まるか、IANAによって標準として ;; 登録されていなければならない |
capability_data | ::= | "CAPABILITY" SPACE "IMAP4" [SPACE 1#capability] |
CHAR | ::= | <NULとを除く任意の7ビットUS-ASCII文字 0x01 - 0x7f> |
CHAR8 | ::= | <NULを除く任意の8ビットオクテット 0x01 - 0xff> |
command | ::= |
tag SPACE (command_any / command_auth / command_nonauth / command_select) CRLF ;; 状態に基づく |
command_any | ::= |
"CAPABILITY" / "LOGOUT" / "NOOP" / x_command ;; 全ての状態で有効 |
command_auth | ::= |
append / create / delete / examine / find / list / lsub / rename / select / subscribe / unsubscribe / ;; 認証済み状態または選択済み状態でのみ有効 |
command_nonauth | ::= |
login / authenticate ;; 未認証状態でのみ有効 |
command_select | ::= |
"CHECK" / "CLOSE" / "EXPUNGE" / copy / fetch / partial / store / uid / search ;; 選択済み状態でのみ有効 |
continue_req | ::= | "+" SPACE (resp_text / base64) |
copy | ::= | "COPY" SPACE set SPACE mailbox |
CR | ::= | <ASCII CR, carriage return, 0x0C> |
create | ::= |
"CREATE" SPACE mailbox ;; INBOXの場合はNOエラーになる |
CRLF | ::= | CR LF |
CTL | ::= |
<ASCII制御文字およびDEL、0x00 - 0x1f、0x7f> |
date | ::= | date_text / <"> date_text <"> |
date_day | ::= |
1*2digit ;; 日 |
date_day_fixed | ::= |
(SPACE digit) / 2digit ;; date_dayの固定フォーマット版 |
date_month | ::= | "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec" |
date_text | ::= | date_day "-" date_month "-" (date_year / date_year_old) |
date_year | ::= | 4digit |
date_year_old | ::= |
2digit ;; 時代遅れ(obsolete)、(year - 1900) |
date_time | ::= | <"> (date_time_new / date_time_old) <"> |
date_time_new | ::= | date_day_fixed "-" date_month "-" date_year SPACE time SPACE zone |
date_time_old | ::= |
date_day_fixed "-" date_month "-" date_year_old SPACE time "-" zone_old ;; 時代遅れ(obsolete) |
delete | ::= |
"DELETE" SPACE mailbox ;; INBOXの場合はNOエラーになる |
digit | ::= | "0" / digit_nz |
digit_nz | ::= | "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" |
envelope | ::= | "(" env_date SPACE env_subject SPACE env_from SPACE env_sender SPACE env_reply-to SPACE env_to SPACE env_cc SPACE env_bcc SPACE env_in-reply-to SPACE env_message-id ")" |
env_bcc | ::= | "(" 1*address ")" / nil |
env_cc | ::= | "(" 1*address ")" / nil |
env_date | ::= | nstring |
env_from | ::= | "(" 1*address ")" / nil |
env_in-reply-to | ::= | nstring |
env_message-id | ::= | nstring |
env_reply-to | ::= | "(" 1*address ")" / nil |
env_sender | ::= | "(" 1*address ")" / nil |
env_subject | ::= | nstring |
env_to | ::= | "(" 1*address ")" / nil |
examine | ::= | "EXAMINE" SPACE mailbox |
fetch | ::= | "FETCH" SPACE set SPACE ("ALL" / "FULL" / "FAST" / fetch_att / "(" 1#fetch_att ")") |
fetch_att | ::= | "BODY" / "BODYSTRUCTURE" / "BODY" [".PEEK"] "[" section "]" / "ENVELOPE" / "FLAGS" / "INTERNALDATE" / "UID" / "RFC822" (([".TEXT"] [".PEEK"]) / ".SIZE" / (".HEADER" [".LINES" [".NOT"] SPACE header_list]) |
find | ::= |
"FIND" SPACE ["ALL."] "MAILBOXES" SPACE list_mailbox ;; 時代遅れ(obsolete)OBSOLETE |
flag | ::= | "\Answered" / "\Flagged" / "\Deleted" / "\Seen" / "\Draft" / flag_keyword / flag_extension |
flag_extension | ::= |
"\" atom ;; 将来の拡張用。 ;; クライアント実装はflag_extensionフィール ;; ドを受け入れなければならない(MUST)。 ;; サーバー実装は、この仕様の将来の改定で ;; 定義されない限り、このフィールドを ;; 生成してはならない(MUST NOT)。 |
flag_keyword | ::= | atom |
flag_list | ::= | "(" #flag ")" |
greeting | ::= | "*" SPACE (resp_cond_auth / resp_cond_bye) CRLF |
header_line | ::= | astring |
header_list | ::= | "(" 1#header_line ")" |
LF | ::= | <ASCII LF, line feed, 0x0A> |
list | ::= | "LIST" SPACE mailbox SPACE list_mailbox |
list_mailbox | ::= | 1*(ATOM_CHAR / list_wildcards) / string |
list_wildcards | ::= | "%" / "*" |
literal | ::= |
"{" number "}" CRLF *CHAR8 ;; numberはCHAR8オクテットの数字を表す |
login | ::= | "LOGIN" SPACE userid SPACE password |
lsub | ::= | "LSUB" SPACE mailbox SPACE list_mailbox |
mailbox | ::= |
"INBOX" / astring ;; INBOXの大文字・小文字は区別されない ;; その他の名前の大文字・小文字の区 ;; 別は実装に依存する |
mailbox_data | ::= | "FLAGS" SPACE flag_list / "LIST" SPACE mailbox_list / "LSUB" SPACE mailbox_list / "MAILBOX" SPACE text / "SEARCH" [SPACE 1#nz_number] / number SPACE "EXISTS" / number SPACE "RECENT" |
mailbox_list | ::= | "(" #("\Marked" / "\Noinferiors" / "\Noselect" / "\Unmarked" / flag_extension) ")" SPACE (<"> QUOTED_CHAR <"> / nil) SPACE mailbox |
message_data | ::= | nz_number SPACE ("EXPUNGE" / ("FETCH" SPACE msg_fetch) / msg_obsolete) |
msg_fetch | ::= | "(" 1#("BODY" SPACE body / "BODYSTRUCTURE" SPACE body / "BODY[" section "]" SPACE nstring / "ENVELOPE" SPACE envelope / "FLAGS" SPACE "(" #(flag / "\Recent") ")" / "INTERNALDATE" SPACE date_time / "RFC822" [".HEADER" / ".TEXT"] SPACE nstring / "RFC822.SIZE" SPACE number / "UID" SPACE uniqueid) ")" |
msg_obsolete | ::= |
"COPY" / ("STORE" SPACE msg_fetch) ;; 時代遅れ(obsolete)のタグ無し応答 |
nil | ::= | "NIL" |
nstring | ::= | string / nil |
number | ::= |
1*digit ;; 符号無し32ビット整数 ;; (0 <= n < 4,294,967,296) |
nz_number | ::= |
digit_nz *digit
;; 非ゼロの符号無し32ビット整数 ;; (0 < n < 4,294,967,296) |
partial | ::= | "PARTIAL" SPACE nz_number SPACE ("BODY" [".PEEK"] "[" section "]" / "RFC822" (([".TEXT"] [".PEEK"]) / ".HEADER") SPACE number SPACE number |
password | ::= | astring |
quoted | ::= | <"> *QUOTED_CHAR <"> |
QUOTED_CHAR | ::= | <any TEXT_CHAR except quoted_specials> / "\" quoted_specials |
quoted_specials | ::= | <"> / "\" |
rename | ::= |
"RENAME" SPACE mailbox SPACE mailbox ;; 変更先にINBOXUを使用するとNOエラーになる |
response | ::= | *response_data response_done |
response_data | ::= | "*" SPACE (resp_cond_state / resp_cond_bye / mailbox_data / message_data / capability_data) CRLF |
response_done | ::= | response_tagged / response_fatal |
response_fatal | ::= | "*" SPACE resp_cond_bye CRLF |
response_tagged | ::= | tag SPACE resp_cond_state CRLF |
resp_cond_auth | ::= |
("OK" / "PREAUTH") SPACE resp_text ;; 認証条件 |
resp_cond_bye | ::= |
"BYE" SPACE resp_text ;; サーバーの切断条件 |
resp_cond_state | ::= |
("OK" / "NO" / "BAD") SPACE resp_text ;; 状態条件 |
resp_text | ::= | ["[" resp_text_code "]" SPACE] (text_mime2 / text) |
resp_text_code | ::= | "ALERT" / "PARSE" / "PERMANENTFLAGS" SPACE "(" #(flag / "\*") ")" / "READ-ONLY" / "READ-WRITE" / "TRYCREATE" / "UIDVALIDITY" SPACE nz_number / "UNSEEN" SPACE nz_number / atom [SPACE 1*<any TEXT_CHAR except "]">] |
search | ::= |
"SEARCH" SPACE ["CHARSET" SPACE astring SPACE] search_criteria ;; 文字セット(CHARSET)は、IANAによっ ;; てMIME文字セットとして登録済みでな ければならない |
search_criteria | ::= | 1#search_key |
search_key | ::= | search_new / search_old |
search_new | ::= |
"DRAFT" / "HEADER" SPACE header_line SPACE astring / "LARGER" SPACE number / "NOT" SPACE search_key / "OR" SPACE search_key SPACE search_key / "SENTBEFORE" SPACE date / "SENTON" SPACE date / "SENTSINCE" SPACE date / "SMALLER" SPACE number / "UID" SPACE set / "UNDRAFT" / set / "(" search_criteria ")" ;; IMAP4で追加された |
search_old | ::= |
"ALL" / "ANSWERED" / "BCC" SPACE astring / "BEFORE" SPACE date / "BODY" SPACE astring / "CC" SPACE astring / "DELETED" / "FLAGGED" / "FROM" SPACE astring / "KEYWORD" SPACE flag_keyword / "NEW" / "OLD" / "ON" SPACE date / "RECENT" / "SEEN" / "SINCE" SPACE date / "SUBJECT" SPACE astring / "TEXT" SPACE astring / "TO" SPACE astring / "UNANSWERED" / "UNDELETED" / "UNFLAGGED" / "UNKEYWORD" SPACE flag_keyword / "UNSEEN" ;; [IMAP2]で定義されている |
section | ::= | "0" / nz_number ["." section] |
select | ::= | "SELECT" SPACE mailbox |
sequence_num | ::= |
nz_number / "*" ;; *は使用中の最大の数値を表す。メッセー ;; ジ連番の場合、メールボックス内のメッセー ;; ジ数。ユニーク識別子の場合、メールボック ;; ス内の最後のメッセージのユニーク識別子 |
set | ::= |
sequence_num / (sequence_num ":" sequence_num) / (set "," set) ;; メッセージの集合を表す。 ;; メッセージ連番の場合、それらは1からメー ;; ルボックス内のメール数までの連続する番号 ;; である。カンマは個々の数字の区切り、コロ ;; ンは範囲指定の二つの数字の区切りである。 ;; 例: 15のメッセージを持つメールボックスに ;; おける 2,4:7,9,12:* は2,4,5,6,7,9,12,13, ;; 14,15を表す。 |
SPACE | ::= | <ASCII SP, space, 0x20> |
store | ::= | "STORE" SPACE set SPACE store_att_flags |
store_att_flags | ::= | (["+" / "-"] "FLAGS" [".SILENT"]) SPACE (flag_list / #flag) |
string | ::= | quoted / literal |
subscribe | ::= | ("SUBSCRIBE" SPACE mailbox) / subscribe_obs |
subscribe_obs | ::= |
"SUBSCRIBE" SPACE "MAILBOX" SPACE mailbox ;; 時代遅れ(obsolete) |
tag | ::= | 1*<any ATOM_CHAR except "+"> |
text | ::= | 1*TEXT_CHAR |
text_mime2 | ::= |
"=?" <charset> "?" <encoding> "?" <encoded-text> "?=" ;; 文法は[MIME-2]で定義されている |
TEXT_CHAR | ::= | <any CHAR except CR and LF> |
time | ::= |
2digit ":" 2digit ":" 2digit ;; 時 分 秒 |
uid | ::= |
"UID" SPACE (copy / fetch / search / store) ;; メッセージ連番の代わりに使用されるユニー ;; ク識別子 |
uniqueid | ::= |
nz_number ;; 厳密に増加するStrictly ascending |
unsubscribe | ::= | ("UNSUBSCRIBE" SPACE mailbox) / unsubscribe_obs |
unsubscribe_obs | ::= |
"UNSUBSCRIBE" SPACE "MAILBOX" SPACE mailbox ;; 時代遅れ(obsolete) |
userid | ::= | astring |
x_command | ::= | "X" atom <experimental command arguments> |
zone | ::= |
("+" / "-") 4digit ;; 西半球の時間・分を表す符号付4桁数字(グリ ;; ニッジ標準時との差異) ;; 与えられた時刻からタイムゾーンを減算する ;; と万国標準時形式となる。 ;; 万国標準時のゾーンは"+0000"である。 |
zone_old | ::= |
"UT" / "GMT" / "Z" / ;; +0000 "AST" / "EDT" / ;; -0400 "EST" / "CDT" / ;; -0500 "CST" / "MDT" / ;; -0600 "MST" / "PDT" / ;; -0700 "PST" / "YDT" / ;; -0800 "YST" / "HDT" / ;; -0900 "HST" / "BDT" / ;; -1000 "BST" / ;; -1100 "A" / "B" / "C" / "D" / "E" / "F" / ;; +1 to +6 "G" / "H" / "I" / "K" / "L" / "M" / ;; +7 to +12 "N" / "O" / "P" / "Q" / "R" / "S" / ;; -1 to -6 "T" / "U" / "V" / "W" / "X" / "Y" ;; -7 to -12 ;; 時代遅れ(obsolete) |
この文書は以前の文書の書き換えまたは改訂であり、以下のプロトコル規定の文書に取って代わる物である:IMAP4 Internet drafts, the IMAP2bis Internet drafts, IMAP2bis.TXT(未公開), RFC 1176, and RFC 1064。
AUTHENTICATE命令でオプションの秘密保護が取り決められていない限り、IMAPプロトコルのやり取り(電子メールの内容も含む)は、ネットワーク上をそのまま送信される。
無効な証明書により失敗したAUTHENTICATE命令に対するサーバーエラーメッセージは、その証明書が無効である理由を詳述するべきではない。
LOGIN命令を使用する場合、パスワードは平文で送信される。代わりにAUTHENTICATE命令を使用する事で避けられる。
LOGIN命令の失敗に対するサーバーエラーメッセージは、(パスワードではなく)ユーザー名が無効であると指摘するべきではない。
AUTHENTICATE命令とLOGIN命令について議論したセクションで、さらなるセキュリティ考察が議論されている。
Mark R. Crispin
Networks and Distributed Computing, JE-30
University of Washington
Seattle, WA 98195
Phone: (206) 543-5762
EMail: MRC@CAC.Washington.EDU
以下の命令は時代遅れである。新しいサーバー実装では、これらの命令をサポートする必要はない。これは古いクライアント実装との互換性の為にこれらをサポーする事を望む実装者の為にここに記述されている。
各命令のセクション表題は、それが時代遅れでなかった場合に文書中で置かれていたであろう関連する場所を示している
以下の応答は時代遅れである。注記されている場合を除き、これらの応答は新しいサーバー実装によって送信されてはならない(MUST NOT)。
各命令のセクション表題は、それが時代遅れでなかった場合に主文書中で置かれていたであろう関連する場所を示している
[IMAP-AUTH] Myers, J., "IMAP4 Authentication Mechanism", RFC 1731.
Carnegie-Mellon University, December 1994.
[IMAP-COMPAT] Crispin, M. "IMAP4 Compatibility with IMAP2 and
IMAP2bis", RFC 1732, University of Washington, December 1994.
[IMAP-DISC] Austein, R. "Synchronization Operations for Disconnected
IMAP4 Clients", Work in Progress.
[IMAP-MODEL] Crispin, M. "Distributed Electronic Mail Models in
IMAP4", RFC 1733, University of Washington, December 1994.
[IMAP-NAMING] Crispin, M. "Mailbox Naming Convention in IMAP4", Work
in Progress.
[IMAP2] Crispin, M., "Interactive Mail Access Protocol - Version 2",
RFC 1176, University of Washington, August 1990.
[IMSP] Myers, J. "IMSP -- Internet Message Support Protocol", Work in
Progress.
[MIME-1] Borenstein, N., and Freed, N., "MIME (Multipurpose Internet
Mail Extensions) Part One: Mechanisms for Specifying and Describing
the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft,
September 1993.
[MIME-2] Moore, K., "MIME (Multipurpose Internet Mail Extensions)
Part Two: Message Header Extensions for Non-ASCII Text", RFC 1522,
University of Tennessee, September 1993.
[RFC-822] Crocker, D., "Standard for the Format of ARPA Internet Text
Messages", STD 11, RFC 822, University of Delaware, August 1982.
[SMTP] Postel, Jonathan B. "Simple Mail Transfer Protocol", STD 10,
RFC 821, USC/Information Sciences Institute, August 1982.
+FLAGS <フラグリスト> (STORE命令のデータ項目)
+FLAGS.SILENT <フラグリスト> (STORE命令のデータ項目)
-FLAGS <フラグリスト> (STORE命令のデータ項目)
-FLAGS.SILENT <フラグリスト> (STORE命令のデータ項目)
ALERT (応答コード)
ALL (FETCH命令の項目)
ALL (SEARCH命令の検索キー)
ANSWERED (SEARCH命令の検索キー)
APPEND (命令)
AUTHENTICATE (命令)
BAD (応答)
BCC <文字列> (SEARCH命令の検索キー)
BEFORE <日付> (SEARCH命令の検索キー)
BODY (FETCH命令の項目)
BODY (FETCH応答の結果)
BODY <文字列> (SEARCH命令の検索キー)
BODY.PEEK[<セクション>] (FETCH命令の項目)
BODYSTRUCTURE (FETCH命令の項目)
BODYSTRUCTURE (FETCH応答の結果)
BODY[<セクション>] (FETCH命令の項目)
BODY[セクション] (FETCH応答の結果)
BYE (応答)
CAPABILITY (命令)
CAPABILITY (応答)
CC <文字列> (SEARCH命令の検索キー)
CHECK (命令)
CLOSE (命令)
COPY (命令)
COPY (応答)
CREATE (命令)
DELETE (命令)
DELETED (SEARCH命令の検索キー)
DRAFT (SEARCH命令の検索キー)
ENVELOPE (FETCH命令の項目)
ENVELOPE (FETCH応答の結果)
EXAMINE (命令)
EXISTS (応答)
EXPUNGE (命令)
EXPUNGE (応答)
FAST (FETCH命令の項目)
FETCH (命令)
FETCH (応答)
FIND ALL.MAILBOXES (命令)
FIND MAILBOXES (命令)
FLAGGED (SEARCH命令の検索キー)
FLAGS (FETCH命令の項目)
FLAGS (FETCH応答の結果)
FLAGS (応答)
FLAGS <フラグリスト> (STORE命令のデータ項目)
FLAGS.SILENT <フラグリスト> (STORE命令のデータ項目)
FROM <文字列> (SEARCH命令の検索キー)
FULL (FETCH命令の項目)
HEADER <フィールド名> <文字列> (SEARCH命令の検索キー)
INTERNALDATE (FETCH命令の項目)
INTERNALDATE (FETCH応答の結果)
KEYWORD <フラグ> (SEARCH命令の検索キー)
LARGER <n> (SEARCH命令の検索キー)
LIST (命令)
LIST (応答)
LOGIN (命令)
LOGOUT (命令)
LSUB (命令)
LSUB (応答)
MAILBOX (応答)
NEW (SEARCH命令の検索キー)
NO (応答)
NOOP (命令)
NOT <検索キー> (SEARCH命令の検索キー)
OK (応答)
OLD (SEARCH命令の検索キー)
ON <日付> (SEARCH命令の検索キー)
OR <検索キー1> <検索キー2> (SEARCH命令の検索キー)
PARSE (応答コード)
PARTIAL (命令)
PERMANENTFLAGS (応答コード)
PREAUTH (応答)
READ-ONLY (応答コード)
READ-WRITE (応答コード)
RECENT (応答)
RECENT (SEARCH命令の検索キー)
RENAME (命令)
RFC822 (FETCH命令の項目)
RFC822 (FETCH応答の結果)
RFC822.HEADER (FETCH命令の項目)
RFC822.HEADER (FETCH応答の結果)
RFC822.HEADER.LINES <ヘッダーリスト> (FETCH命令の項目)
RFC822.HEADER.LINES.NOT <ヘッダーリスト> (FETCH命令の項目)
RFC822.PEEK (FETCH命令の項目)
RFC822.SIZE (FETCH命令の項目)
RFC822.SIZE (FETCH応答の結果)
RFC822.TEXT (FETCH命令の項目)
RFC822.TEXT (FETCH応答の結果)
RFC822.TEXT.PEEK (FETCH命令の項目)
SEARCH (命令)
SEARCH (応答)
SEEN (SEARCH命令の検索キー)
SELECT (命令)
SENTBEFORE <日付> (SEARCH命令の検索キー)
SENTON <日付> (SEARCH命令の検索キー)
SENTSINCE <日付> (SEARCH命令の検索キー)
SINCE <日付> (SEARCH命令の検索キー)
SMALLER <n> (SEARCH命令の検索キー)
STORE (命令)
STORE (応答)
SUBJECT <文字列> (SEARCH命令の検索キー)
SUBSCRIBE (命令)
SUBSCRIBE MAILBOX (命令)
TEXT <文字列> (SEARCH命令の検索キー)
TO <文字列> (SEARCH命令の検索キー)
TRYCREATE (応答コード)
UID (命令)
UID (FETCH命令の項目)
UID (FETCH応答の結果)
UID <メッセージセット> (SEARCH命令の検索キー)
UIDVALIDITY (応答コード)
UNANSWERED (SEARCH命令の検索キー)
UNDELETED (SEARCH命令の検索キー)
UNDRAFT (SEARCH命令の検索キー)
UNFLAGGED (SEARCH命令の検索キー)
UNKEYWORD <フラグ> (SEARCH命令の検索キー)
UNSEEN (応答コード)
UNSEEN (SEARCH命令の検索キー)
UNSUBSCRIBE (命令)
UNSUBSCRIBE MAILBOX (命令)
X<アトム> (命令)
\Answered (システムフラグ)
\Deleted (システムフラグ)
\Draft (システムフラグ)
\Flagged (システムフラグ)
\Marked (メールボックス名の属性)
\Noinferiors (メールボックス名の属性)
\Noselect (メールボックス名の属性)
\Recent (システムフラグ)
\Seen (システムフラグ)
\Unmarked (メールボックス名の属性)