SMTP
SMTPとは、メール転送のための通信プロトコルです。
主にメールを管理するメールサーバーが他のメールサーバーにメールを転送するためにこのプロトコル用います。
メールサーバーとメール転送
SMTPの通信内容について説明する前に、そもそもメールがどのように配送され、送り先に届くのか、簡単に見てみましょう。
私たちは普段、PCやスマートフォン上でメールを書き、それを送りたい相手へと送信します。PCであればOutlookやGmail、スマートフォンであればGmailやキャリアの用意したメールアプリなどを使いますね。このような、メールを作成したり送信したりするプログラムをメーラー(メールクライアント)と呼びます。
メーラーを使って私たちがメールを送信すると、メールはメールサーバーと呼ばれるサーバーに一旦送られます。メールサーバーはユーザーのメールボックスを保持しており、メーラーはこのメールボックスを参照することで相手からのメールを受信することができます。このようなメーラー、もといメールクライアントは、メールの配送や転送のサービスを享受する側としてMail User Agent(MUA)と呼ばれます。
例えば、Aさんがメーラーとしてデスクトップ版Gmailを使ってメールを送る場合、下図のようになります。
メールサーバーはメールを受け取ると、その宛先によって取るべきアクションを変えます。
① メールの宛先が自分が管理するユーザの場合、ユーザのメールボックスに配送する
② メールの宛先が自分が管理するユーザでない場合、他のメールサーバーに転送する
① メールの配送
メールサーバーは受け取ったメールの宛先を確認し、もし自分が管理するユーザー宛であれば、そのユーザのメールボックスにメールを配送します。
例えば、メールサーバーαがAさんとBさんの情報、そして彼らのメールボックスを管理しているとします。このときAさんがBさん宛にメールを送信すると、メールサーバーはメールの宛先を確認し、Bさんのメールボックスにメールを配送します。
Bさんのメーラーは適宜メールサーバー上のBさんのメールボックスを参照します(この参照はIMAP/POP3などのプロトコルを用いて行われます)
② メールの転送
メールサーバーの受け取ったメールの宛先が、メールサーバーの管理するユーザー宛でなければ、そのユーザを管理する他のメールサーバーへと転送します。
今度はAさんがCさん宛にメールを送信したとしましょう。メールサーバーはメールの宛先を確認し、Cさんが自分の管理下にいないとわかると、Cさんを管理する別のメールサーバーへと転送しようとします。
このとき、メールサーバーαから、Cさんを管理下に置くメールサーバーβへメールの転送を行いますが、この転送時に用いられる通信プロトコルがSMTPになります。またメールサーバーはメールネットワークのなかでメール転送する役割を担うことから、Mail Transfer Agent(MTA)とも呼ばれます。
ちなみにどうやってCさんを管理するメールサーバーを見つけるのか?と疑問に思うかもしれませんが、これはあて先のメールアドレスを使って解決します。
メールアドレスは{ユーザ名}@{ドメイン名orメールサーバー名}
という、左側にメールサーバーで一意なユーザ名、右側にドメイン名またはメールサーバー名が書かれている構成になっています。このうち、右側のメールサーバー名とドメイン名は、DNSとよばれる仕組み(とプロトコル)を使って、サーバーの居場所(IPアドレス)を突き止めることができます。IPアドレスがわかれば、あとはそのIPアドレス先のホストに対してSMTPでメールを転送するだけです。
SMTPの通信フロー
SMTPの通信フローは以下の5段階からなります。
① Greeting
② 送信元メールアドレスの送信
③ 宛先メールアドレスの送信
④ メールコンテンツの送信
⑤ 通信終了
① Greeting
メールを転送したいサーバーαがSMTPによる通信を開始するとき、送信先のメールサーバーβに対して通信開始の合図として「HELO」文字列を送ります(設定によっては「EHLO」を送ることもあります)。この挨拶に対して、メールサーバーβが250番応答を返したとき、Greetingは成功とし、SMTP通信が開始されます。
② 送信元メールアドレスの送信
Greetingが完了すると、メールサーバーαはメールサーバーβに対してメールの送信元アドレスを送信します。この送信に対してメールサーバーβが250番応答を返すと送信成功となります。
③ 宛先メールアドレスの送信
次に、メールサーバーαはメールサーバーβに対してメールの宛先アドレスを送信します。この送信に対してメールサーバーβが250番応答を返すと送信成功となります。
④ メールコンテンツの送信
送信元・宛先メールアドレスを送信し終わると、メールサーバーαはメールの内容を送る準備を開始します。その合図としてメールサーバーαは「DATA」の文字列をメールサーバーβに送信し、それに対してメールサーバーβは354番応答を返します。ここからメール内容の送信が開始されます。
送信されるメール内容は
- 日付
- 送信元メールアドレス
- 宛先メールアドレス
- メールの主題
- メーラーのバージョン情報
- メールの内容 ...
となります。
このメール内容送信に対してメールサーバーが250番応答を返すことで、メール内容送信は成功となります。
⑤ 通信終了
最後にメールサーバーαが「QUIT」メッセージをメールサーバーβに送信し、メールサーバーβが221番応答を返すことでSMTP通信が終了となります。
参考
Simple Mail Transfer Protocol - Wikipedia
SMTP(Simple Mail Transfer Protocol)〜前編:インターネット・プロトコル詳説(5) - @IT
(素材をお借りしました。ありがとうございました!) flat-icon-design.com