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

3. Basic Operation (基本動作)

最初に、サーバーホストはTCPポート110をリスニングすることでPOP3サービスを開始します。クライアントホストがサービスを使用したい場合、サーバーホストとのTCP接続を確立します。接続が確立されると、POP3サーバーは挨拶メッセージを送信します。その後、クライアントとPOP3サーバーは、接続が閉じられるか中断されるまで、コマンドとレスポンス (それぞれcommandとresponse) を交換します。

POP3のコマンドは、大文字小文字を区別しないキーワードで構成され、その後に1つ以上の引数が続く場合があります。すべてのコマンドはCRLFペアで終了します。キーワードと引数は、印刷可能なASCII文字で構成されます。キーワードと引数は、それぞれ単一のスペース文字で区切られます。キーワードの長さは3文字または4文字です。各引数の長さは最大40文字です。

POP3のレスポンスは、ステータスインジケータとキーワードで構成され、その後に追加情報が続く場合があります。すべてのレスポンスはCRLFペアで終了します。レスポンスは、終了CRLFを含めて最大512文字の長さです。現在、ステータスインジケータには、肯定的 ("+OK") と否定的 ("-ERR") の2種類があります。サーバーは、"+OK"と"-ERR"を大文字で送信しなければなりません (MUST)。

特定のコマンドに対するレスポンスは複数行になります。これらの場合 (以下で明示的に記載)、レスポンスの最初の行とCRLFを送信した後、追加の行が送信され、それぞれCRLFペアで終了します。レスポンスのすべての行が送信されると、最終行が送信されます。これは、終了オクテット (10進コード046、".") とCRLFペアで構成されます。複数行レスポンスのいずれかの行が終了オクテットで始まる場合、そのレスポンスの行の前に終了オクテットを付加することで「バイトスタッフィング (byte-stuffed)」されます。したがって、複数行レスポンスは5オクテット"CRLF.CRLF"で終了します。複数行レスポンスを検査する際、クライアントは行が終了オクテットで始まるかどうかを確認します。もしそうで、CRLF以外のオクテットが続く場合、その行の最初のオクテット (終了オクテット) が取り除かれます。もしそうで、CRLFが終了文字の直後に続く場合、POP3サーバーからのレスポンスが終了し、".CRLF"を含む行は複数行レスポンスの一部とは見なされません。

POP3セッションは、その存続期間中に複数の状態を経ます。TCP接続が開かれ、POP3サーバーが挨拶を送信すると、セッションは認証状態 (AUTHORIZATION state) に入ります。この状態では、クライアントはPOP3サーバーに対して自身を識別しなければなりません (MUST)。クライアントがこれを正常に完了すると、サーバーはクライアントのメールドロップに関連するリソースを取得し、セッションはトランザクション状態 (TRANSACTION state) に入ります。この状態では、クライアントはPOP3サーバーにアクションを要求します。クライアントがQUITコマンドを発行すると、セッションは更新状態 (UPDATE state) に入ります。この状態では、POP3サーバーはトランザクション状態中に取得したリソースを解放し、別れの挨拶をします。その後、TCP接続が閉じられます。

サーバーは、認識されない、実装されていない、または構文的に無効なコマンドに対して、否定的なステータスインジケータで応答しなければなりません (MUST)。サーバーは、セッションが不適切な状態にあるときに発行されたコマンドに対して、否定的なステータスインジケータで応答しなければなりません (MUST)。クライアントには、オプショナルコマンドを実装していないサーバーと、コマンドを処理したくない、または処理できないサーバーを区別する一般的な方法はありません。

POP3サーバーは、非アクティブ自動ログアウトタイマーを持つことができます (MAY)。このようなタイマーは、少なくとも10分間の持続時間でなければなりません (MUST)。その間隔中にクライアントから任意のコマンドを受信すると、自動ログアウトタイマーをリセットするのに十分です。タイマーが期限切れになると、セッションは更新状態に入りません。サーバーは、メッセージを削除せず、クライアントにレスポンスを送信せずにTCP接続を閉じるべきです。


用語集:

  • CRLF: キャリッジリターンラインフィード (Carriage Return Line Feed)
  • AUTHORIZATION state: 認証状態
  • TRANSACTION state: トランザクション状態
  • UPDATE state: 更新状態
  • byte-stuffed: バイトスタッフィング
  • status indicator: ステータスインジケータ
  • maildrop: メールドロップ

RFC 2119キーワード:

  • MUST (しなければならない): 絶対要件
  • MAY (してもよい): 任意である