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

3. 状態とフローダイアグラム (State and Flow Diagram)

クライアントとサーバー間の接続が確立されると、IMAP4rev2 接続は 4 つの状態のいずれかになります。初期状態はサーバーの挨拶で識別されます。ほとんどのコマンドは特定の状態でのみ有効です。接続が不適切な状態にあるときにクライアントがコマンドを試みることはプロトコルエラーであり、サーバーは BAD または NO (サーバー実装に依存) のコマンド完了結果で応答します。

3.1 未認証状態 (Not Authenticated State)

未認証状態では、クライアントはほとんどのコマンドが許可される前に認証資格情報を提供しなければなりません (しなければならない)。この状態は、接続が事前認証されていない限り、接続が開始されたときに入ります。

3.2 認証済み状態 (Authenticated State)

認証済み状態では、クライアントは認証されており、メッセージに影響を与えるコマンドが許可される前に、アクセスするメールボックスを選択しなければなりません (しなければならない)。この状態は、事前認証された接続が開始されたとき、許容可能な認証資格情報が提供されたとき、メールボックスの選択にエラーが発生した後、または CLOSE または UNSELECT コマンドが成功した後に入ります。

3.3 選択済み状態 (Selected State)

選択済み状態では、アクセスするメールボックスが選択されています。この状態は、メールボックスが正常に選択されたときに入ります。

3.4 ログアウト状態 (Logout State)

ログアウト状態では、接続が終了されています。この状態は、クライアント要求 (LOGOUT コマンド経由) の結果として、またはクライアントまたはサーバーのいずれかの側による一方的なアクションによって入ることができます。

クライアントがログアウト状態を要求する場合、サーバーは、サーバーが接続を閉じる前に、タグなしの BYE レスポンスと LOGOUT コマンドへのタグ付き OK レスポンスを送信しなければならず (しなければならない)、クライアントは、クライアントが接続を閉じる前に LOGOUT コマンドへのタグ付き OK レスポンスを読み取らなければなりません (しなければならない)。

サーバーは、まずそうする理由を含むタグなしの BYE レスポンスを送信せずに一方的に接続を閉じるべきではありません (すべきでない)。クライアントは一方的に接続を閉じるべきではなく (すべきでない)、代わりに LOGOUT コマンドを発行すべきです (すべきである)。サーバーがクライアントが一方的に接続を閉じたことを検出した場合、サーバーはタグなしの BYE レスポンスを省略し、単にその接続を閉じてもよい (してもよい)。

状態遷移図

                  +----------------------+
|connection established|
+----------------------+
||
\/
+--------------------------------------+
| server greeting |
+--------------------------------------+
|| (1) || (2) || (3)
\/ || ||
+-----------------+ || ||
|Not Authenticated| || ||
+-----------------+ || ||
|| (7) || (4) || ||
|| \/ \/ ||
|| +----------------+ ||
|| | Authenticated |<=++ ||
|| +----------------+ || ||
|| || (7) || (5) || (6) ||
|| || \/ || ||
|| || +--------+ || ||
|| || |Selected|==++ ||
|| || +--------+ ||
|| || || (7) ||
\/ \/ \/ \/
+--------------------------------------+
| Logout |
+--------------------------------------+
||
\/
+-------------------------------+
|both sides close the connection|
+-------------------------------+

凡例

  • (1) 事前認証なしの接続 (OK 挨拶)
  • (2) 事前認証済み接続 (PREAUTH 挨拶)
  • (3) 拒否された接続 (BYE 挨拶)
  • (4) 成功した LOGIN または AUTHENTICATE コマンド
  • (5) 成功した SELECT または EXAMINE コマンド
  • (6) CLOSE または UNSELECT コマンド、要請されていない CLOSED レスポンスコード、または失敗した SELECT または EXAMINE コマンド
  • (7) LOGOUT コマンド、サーバーシャットダウン、または接続クローズ