POP3サーバ(メール受信サーバ)との通信 (TCP利用)

Post Office Protocolは、メールサーバー から自分のメールを取り出す時に使用するメール受信用プロトコルです。
以下ではtelnetコマンドで、POP3サーバに接続して、メールを確認しています。
telnetコマンドは、サーバマシンを遠隔操作(Remote Control)するコマンドですが、 実質的には、キー入力した文字列をサーバへ送信し、受信した文字列を表示しているだけです。
このtelnetコマンドの送受信の機能を利用して、POP3サーバ(メール受信サーバ)へ接続して、 やり取りをしている例です。
ウェルノンポートは110番で、mail.scc01の名前のサーバに接続する部分から始まっています。

(1)認証ステップ:POP3サーバに接続すると、『+OK』から始まる文字列が返されます。
そこで、ユーザーのメールボックスをアクセスするための認証を行わなければなりません。
クライアントから『USER 』の後にユーザー名が続く1行を送ります。
『+OK』から始まる文字列が返されば、パスワードを『PASS 』に続く1行にして送ります。
『+OK』から始まる文字列が返されれば、認証が終わり、各コマンドが送れます。

(2)認証が終われば、『QUIT』コマンドを送るまで、会話的なやり取りが可能になります。

が入力です。また『』の部分は、ユーザーに合わせた変更が必要な箇所です。)

telnet mail.scc01 110
+OK POP3 scc.sundaidenshi.ac.jp v2001.80 server ready
USER 『自分のユーザー名』
+OK User name accepted, password please
PASS 『パスワード』
+OK Mailbox open, 1 messages
STAT
+OK 1 529
LIST
+OK Mailbox scan listing follows
1 529
.
RETR 1
+OK 529 octets
Return-Path: <xyz@sundaidenshi.ac.jp>
Received: from xx.xx.xx.xx (pc-4-193 [192.168.4.193])
        by メール送信元SMPTサーバドメイン名表示部 (8.12.6/8.12.6) with SMTP id i4O0bmSw030531

        for <xyz@sundaidenshi.ac.jp>; Mon, 24 May 2004 09:37:48 +0900
Date: Mon, 24 May 2004 09:37:48 +0900
From: xyz@sundaidenshi.ac.jp
Message-Id: <200405240037.i4O0bmSw030531@メール送信元SMPTサーバドメイン名表示部>
Subject: This is Test Mail
Status:

HELO xx.xx.xx.xx
MAIL FROM:<xyzAAAAAA.@sundaidenshi.ac.jp>
How are you? I am fine.
Well, let's see it again.
.
QUIT
+OK Sayonara

実際のメーラー(mailer)の内部では、このようなやり取りでメールを受信しているわけです。 なお、メーラーはMUA(Message User Agent)と呼ばれることもあります。
以下に、POPサーバに要求する文字列の代表的コマンドを挙げます。

コマンド 意味
USER ユーザー名認証するユーザー名を指定する
PASS パスワード 認証するユーザーのパスワードを指定する
STAT メールボックス内にあるメール個数と、全体のバイト数を要求する。
LIST メールボックス内のメール連番号と、そのサイズが並ぶ行複数行を要求する。 『.』(ピリオド)までが応答文字列になる
RETR メールボックス内のメール連番号 指定されるメール連番号のメール内容を要求する。 『.』(ピリオド)までが応答文字列になる
DELE メールボックス内のメール連番号 連番号で指定されるメールの削除であるが、QUITコマンドでセッションを終了するまで実際の削除は行われない。
QUIT 終了コマンド
NOOP 何もしない
RSET 認証確立後発生した削除処理を全て取り消す
以上までは必須で以下はオプションです。
APOP ユーザー名 チャレンジレスポンス方式でユーザー認証を行う
TOP メッセージ番号 Line数 指定されたメッセージ番号のメッセージの指定されたLine分だけボディを表示する
UIDL [メッセージ番号] 一意なIDリスト(Unique IDentification ListingL)の一覧を表示する

各コマンドは CR-LF (\r\n)で終端させます。 サーバレスポンスの1行目は必ずステータスを示しています。 ステータスは単純で、正常(+OK)かエラー(-ERR)かしか存在しせず、 エラー番号は定義されていません。次の構造です。
  [+OK|-ERR] ステータス・メッセージやパラメータ  

なお、POP3関連のRFC (IETF:Internet Engineering Task Force)を以下に示します。

RFC1939(STD53) Post Office Protocol - Version 3
RFC1734POP3 AUTHentication command
RFC2195IMAP/POP AUTHorize Extension for Simple Challenge/Response
RFC2449POP3 Extension Mechanism