SMTPについて調べてみる。
メールサーバを構築するにあたって、そのプロトコルであるSMTPについて少し勉強してみようと思う。
概要
SMTPとは、メールを転送する際の通信方法を定義したプロトコルである。使用ポートは25番。
クライアントとサーバで役割が別れており、クライアントはコマンドをサーバに通知し、サーバはそれに応答することで通信を行う。
SMTPを拡張したESMTPというものがあり、こちらが主流になっている。
SMTPプロトコルの転送の流れ
- EHLOコマンドでホストを認識させる。(対応していなければ、HELOコマンド)
- サーバより応答がある。成功の場合:250 ホスト名
- MAIL FROM:コマンドで送信元を指定する。
- サーバより応答がある。成功の場合:250 2.1.0(拡張機能対応の場合) ok
- RCPT TO:コマンドで宛先を指定する。成功の場合:250 2.1.5(拡張機能の場合) ok
- DATAコマンドで本文入力を宣言。
- サーバより応答がある。354 End data with <CR><LF>.<CR><LF>(POSTFIXの場合)
- 本文を入力"Hello,world!"
- サーバより応答がある。成功の場合:250 2.0.0 Ok
- QUITコマンドで終了させる。
- サーバより応答がある。221 2.0.0 Bye
SMTPコマンド
コマンド | 引数 | 意味 |
---|---|---|
HELO | domain | クライアントのホスト名または、IPアドレスを指定。この情報は受信側のメールヘッダreceivedに記載される。 |
EHLO | domain | HELOの機能に加え、ESMTPで拡張され使用可能なサービスが表示される。 |
VRFY | user | ユーザアカウントの存在を確認 |
TURN | クライアントとサーバの役割を逆転させる | |
MAIL FROM: | [sender] | 送信元のメールアドレスを指定する |
RCPT TO: | [recipient] | 送信先メールアドレスを指定する |
DATA | メール本文を記述するため、入力開始を宣言する。本文入力を終了する場合は"."を入力する | |
REST | このコマンドを発行する以前に入力したコマンド行をクリアする | |
HELP | command | 使用可能なコマンド一覧を取得する。コマンド名を引数として与えると、そのコマンドに対する情報が得られる |
NOOP | 何もしないが、接続維持のために送出すると効果的。一種のキープアライブパケットの役割として使う事ができる。接続タイムアウトを防ぐ場合に使う | |
QUIT | コネクションを切断する |