冒険の書

27歳と6ヶ月のときに未経験でITエンジニアに転職した元派遣会社営業職(文系)が綴るブログです。同じように20代後半から未経験でIT技術者に転職することを検討されている人に「27歳からの未経験がどれだけ成長できるか」という点などで参考になれば幸いです。

SMTPについて調べてみる。

メールサーバを構築するにあたって、そのプロトコルであるSMTPについて少し勉強してみようと思う。

 概要

SMTPとは、メールを転送する際の通信方法を定義したプロトコルである。使用ポートは25番。

クライアントとサーバで役割が別れており、クライアントはコマンドをサーバに通知し、サーバはそれに応答することで通信を行う。

SMTPを拡張したESMTPというものがあり、こちらが主流になっている。

SMTPプロトコルの転送の流れ

  1. EHLOコマンドでホストを認識させる。(対応していなければ、HELOコマンド)
  2. サーバより応答がある。成功の場合:250 ホスト名
  3. MAIL FROM:コマンドで送信元を指定する。
  4. サーバより応答がある。成功の場合:250 2.1.0(拡張機能対応の場合) ok
  5. RCPT TO:コマンドで宛先を指定する。成功の場合:250 2.1.5(拡張機能の場合) ok
  6. DATAコマンドで本文入力を宣言。
  7. サーバより応答がある。354 End data with <CR><LF>.<CR><LF>(POSTFIXの場合)
  8. 本文を入力"Hello,world!"
  9. サーバより応答がある。成功の場合:250 2.0.0 Ok
  10. QUITコマンドで終了させる。
  11. サーバより応答がある。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   コネクションを切断する