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

3. 状態とフロー図 (State and Flow Diagram)

IMAP4rev1プロトコルには4つの状態があります。ほとんどのコマンドは、特定の状態でのみ有効です。

3.1. 未認証状態 (Not Authenticated State)

未認証状態 (Not Authenticated State) では、クライアントは接続を確立しましたが、認証はまだ行われていません。この状態では、サーバーはまだクライアントを信頼していません。

未認証状態で有効なコマンドは:

  • CAPABILITY - サーバーの機能を照会します
  • NOOP - 何もしません(接続を維持)
  • LOGOUT - 接続を終了します
  • STARTTLS - TLS暗号化を開始します
  • AUTHENTICATE - SASL認証メカニズムを使用して認証します
  • LOGIN - ユーザー名とパスワードで認証します

認証が成功すると、プロトコルは認証済み状態 (Authenticated State) に移行します。

3.2. 認証済み状態 (Authenticated State)

認証済み状態 (Authenticated State) では、クライアントは認証されていますが、メールボックスはまだ選択されていません。この状態では、メールボックスレベルの操作が可能です。

認証済み状態で有効なコマンドは:

  • 未認証状態のすべてのコマンド
  • SELECT - メールボックスを選択して、選択済み状態に移行します
  • EXAMINE - メールボックスを読み取り専用で選択します
  • CREATE - 新しいメールボックスを作成します
  • DELETE - メールボックスを削除します
  • RENAME - メールボックスの名前を変更します
  • SUBSCRIBE - メールボックスをサブスクライブします
  • UNSUBSCRIBE - メールボックスのサブスクライブを解除します
  • LIST - メールボックスのリストを取得します
  • LSUB - サブスクライブされたメールボックスのリストを取得します
  • STATUS - メールボックスのステータス情報を取得します
  • APPEND - メールボックスにメッセージを追加します

SELECTまたはEXAMINEコマンドが成功すると、プロトコルは選択済み状態 (Selected State) に移行します。

3.3. 選択済み状態 (Selected State)

選択済み状態 (Selected State) では、メールボックスが選択されており、メッセージレベルの操作が可能です。この状態では、メッセージの読み取り、検索、変更、削除などの操作を実行できます。

選択済み状態で有効なコマンドは:

  • 認証済み状態のすべてのコマンド
  • CHECK - メールボックスのチェックポイントを要求します
  • CLOSE - 選択されたメールボックスを閉じて、認証済み状態に戻ります
  • EXPUNGE - 削除マークの付いたメッセージを永久に削除します
  • SEARCH - メールボックス内のメッセージを検索します
  • FETCH - メッセージデータを取得します
  • STORE - メッセージフラグを変更します
  • COPY - メッセージを別のメールボックスにコピーします
  • UID - UIDを使用してコマンドを実行します

別のメールボックスのSELECTまたはEXAMINE、CLOSEコマンド、またはLOGOUTコマンドによって、選択済み状態が終了します。

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

ログアウト状態 (Logout State) では、接続が終了しています。サーバーはBYEレスポンスを送信し、接続を閉じます。

LOGOUTコマンドは、どの状態からでも発行できます。LOGOUTコマンドが発行されると、サーバーはタグなしBYEレスポンスを送信し、その後タグ付きOKレスポンスを送信して、接続を閉じます。


状態遷移図:

     +----------------------+
|connection established|
+----------------------+
||
\/
+-------------------------------+
| initial greeting |
+-------------------------------+
|| (1)
\/
+-------------------------------+
| 未認証状態 |
| Not Authenticated State |
+-------------------------------+
|| (2)
\/
+-------------------------------+
| 認証済み状態 |
| Authenticated State |
+-------------------------------+
|| (3)
\/
+-------------------------------+
| 選択済み状態 |
| Selected State |
+-------------------------------+
|| (4)
\/
+-------------------------------+
| ログアウト状態 |
| Logout State |
+-------------------------------+
||
\/
+-------------------------------+
| connection closed |
+-------------------------------+

遷移:

  • (1) 接続確立後、自動的に未認証状態に入ります
  • (2) LOGINまたはAUTHENTICATEコマンドの成功により認証済み状態に移行
  • (3) SELECTまたはEXAMINEコマンドの成功により選択済み状態に移行
  • (4) LOGOUTコマンドまたは接続切断によりログアウト状態に移行

重要な注意事項:

  • クライアントは、現在の状態で有効なコマンドのみを送信すべきです (SHOULD)
  • サーバーは、現在の状態で無効なコマンドに対してBADレスポンスを返すべきです (SHOULD)
  • LOGOUTコマンドは、すべての状態から実行できます