■ SMTP
さてさて、ネット君。メールシステムというものの概略がわかったと思うが。
え〜っと、MTAとMUA。「メールを送る」と「メールを取りにいく」でしたよね。
そうだな、前回使った図だとこうなるな。
[Figure78-09:SMTPとPOP/IMAP]
そうそう、SMTPとPOP/IMAP。
今回はその「送る」と「取りに行く」のうち、「送る」の説明をしよう。
まぁ、メールシステムのうちでもメインの部分と言っていいだろう。
「送る」…SMTPでしたっけ?
しんぷるめーるとらんすふぁーぷろとこる。簡単メール転送プロトコル?
なんとも直接的な訳だが、まぁ、その通り。プロトコル自体はいたってシンプルだ。
だからこそ、実装面は大変だという話もあるが、それは置いておくとして。
そうなんですか?
まぁな。ともかく、「メールを送る」ためのプロトコルがSMTPだ。
はい。
つまり、SMTPクライアント、まぁMUAもしくはMTAのことだが、このクライアントからSMTPサーバであるMTAへメールを送る時に使われるわけだ。
クライアントとサーバ。
MUAとMTA。
さっきの図をもう一度見てもらってわかるとおり、メールを受け取ったMTAはそれが自身が持つメールボックス宛ならば、メールボックスへ内部配信する。他のサーバ宛ならば、中継するという動作を行うわけだ。
内部配信?
まぁ、「サーバが保有するメールボックスへ送る」という「配信」を行う、ということだな。
SMTPの場合、外部へ送るのを「転送」。内部の自分自身のメールボックスへ送るのを「配信」ということが多いな。
ははぁ、転送と配信。
まぁ、簡単に言うとこんな感じかな。
ん、ん〜っと、さっきの図でいうと、まずユーザが使ってるMUAが、MTAへメールを送るわけですね?
そうだな。MUAがSMTPクライアント、MTAがSMTPサーバになるな。
で、メールを受け取ったMTAが、メールボックスのあるMTAへメールを送る?
うむ。今度は最初にメールを受け取ったMTAがSMTPクライアント、メールボックスのあるMTAがSMTPサーバになる。
ははぁ、MTAはクライアントになったり、サーバになったりするわけですね。
■ SMTPコマンドとレスポンス
さて、SMTPクライアント、SMTPサーバの動作をだが。
この動作(メール転送プロセス)は、いままででおなじみのものだ。
おなじみ?
うむ。クライアントからのコマンドと、それに対するレスポンスという形でやりとりされるわけだ。
あ〜、確かにおなじみかも。FTPやHTTP、DNSもそうでしたよね。
そして、これまたおなじみのASCIIにより、文字列でコマンド・レスポンスをやりとりするわけだ。
まず、使用されるコマンドの代表的なものは次の通り。
HELO | 接続確認 |
EHLO | 接続確認。HELOの拡張版 |
メールの送信元 | |
RCPT | メールの宛元 |
DATA | メール本文 |
QUIT | 切断 |
[Table79-01:代表的なSMTPコマンド]
これらのコマンドに対して、サーバはレポンスを返す。
レスポンスは3桁のレスポンスコードと、文字列からなる。まず、レスポンスコードコードの意味。
1xx | 肯定先行 | 動作は正常であり、現在動作中なため次のレスポンスを待つ必要がある。 |
---|---|---|
2xx | 肯定完了 | 動作は正常に完了した。 |
3xx | 肯定中間 | 正常な動作であり、さらに新しいコマンドで新たな情報を送る必要がある。 |
4xx | 一時否定完了 | コマンドが受理されなかった。エラー原因は一時的なものであるため、再送が必要。 |
5xx | 否定完了 | コマンドが受理されなかった。エラー原因は恒久的なものであるので、修復してから再送する必要がある。 |
[Table79-02:レスポンスコード・100番台]
x0x | 構文 | コマンドは構文エラーである。 |
---|---|---|
x1x | 情報 | 状態やヘルプなどの情報要求への応答。 |
x2x | コネクション | コネクションに関する応答。 |
x3x | 認証・アカウント | ログインとアカウントに関する応答。 |
x5x | メールシステム | サーバのメールシステムに関する応答。 |
[Table79-03:レスポンスコード・10番台]
あ〜これ、みたことありますよ。FTPの時にも出てきた。
む。よく気づいたな。第58回でFTPで同じことを確かに説明した。
実を言うと、レスポンスコードはFTPもSMTPも意味は同じなのだ。
え? あれ? ほんとだ。「x5x」が「メールシステム」になっている以外、あとは全く同じだ。
博士、コピー&ペーストしましたね?
レスポンスコードの各桁の意味は、FTP、HTTP、SMTPみんな同じなのだよ。別にコピー&ペーストでもいいだろう?
代表的なレスポンスコードとその意味は、次のようになる。
220 | 準備完了・受信確認応答 |
221 | 切断 |
250 | コマンド正常実行 |
354 | メール本文を入力待ち |
421 | メールサービスの使用不可による切断 |
500 | 構文エラー |
501 | パラメータエラー |
502 | コマンドを利用できない |
550 | 宛先メールボックスがない |
551 | ユーザが存在しない |
[Table79-04:代表的なレスポンスコード]
まぁ、このようなコマンドとレスポンスをやりとりして、メールを転送していくわけだな。
なるほど。
では、どのようなやりとりをするかといえば。
[Figure79-01:SMTPの動作]
HELO、MAIL、RCPT、DATA、QUITの順?
そうだな、その順だ。
で、DATAがメール本文で。最後に「.(ドット)」だけ送るとおしまい、と。
そうなる。
もし、複数の宛先に同じメールを送る場合、「RCPT」を何回か送ることになる。
メールの宛先に複数指定した場合ですね?
その場合、サーバはどうするんですか?
メールメッセージをコピーして、複数のサーバ宛に送ることになる。
さて、実際にSMTPで送ってみた場合を見てもらおう。
へへぇ、どうやってですか?
それはお約束のTelnet接続に決まっている。
メールサーバは「サッポロワークス」の「BlackJumboDog」だ。 ▼ link
[Figure79-02:SMTPの動作]
まぁ、見てわかるとおもうが、赤がサーバのレスポンス、青がクライアントのコマンドだ。
へ〜。さっきの通りですね。
当たり前だ。この受け取ったメールをサーバは自分のメールボックス宛ならば内部配送し、他サーバ宛ならば自身がクライアントとなって転送するわけだな。
なるほどです。
あと、話しておくことがあるとすれば。
そうだな、ネット君。さきほどのコマンド一覧でEHLOというのがあったろう?
ありましたね、EHLO。「接続確認。HELOの拡張版」だそうですが。
拡張版?
SMTPを時代の要求にしたがって拡張したものがESMTPだ。
ESMTPではSMTPで使えなかった拡張コマンドが使用できるようになっている。
へぇ、どんな拡張です?
例えば、認証、送信ファイルサイズ、暗号化、などの機能が使えるようになる。
サーバにどの拡張機能が使えるかどうか問い合わせるのが、EHLOなのだ。
[Figure79-03:EHLO]
EHLOを送ると、サーバは自身が使うことのできる拡張機能を通知するわけだ。
ん〜っと、もしサーバがESMPTに非対応だったら?
その場合は、「502」のコマンドが使用できないエラーが返って来るので、EHLOではなくHELOを送ればよい。
なるほど。
■ エンベロープとメッセージ
SMTPの動作は上記のような形のわけだが。このSMTPで送られるメールについていくつかポイントがある。
まず、SMTPはすべてASCIIコードで行われる。
ははぁ、ASCIIコード。
TELNETやFTPでもおなじみですね。
うむ。コマンド、レスポンス、それに送るメール本文もASCIIのみだ。
へ?
あれ? ASCIIって英数字記号の文字コードでしたよね?
うむ。英数字記号の7ビット文字コードだ。
ですよね、ですよね。
でも、メール本文って普通に日本語が使えますし、画像ファイルとか添付できますよ?
確かにできる。
それは、MIMEと呼ばれる拡張規格があるからだ。
まいむ? 拡張規格?
うむ。MIMEについては先の回で話す。
とりあえずは、メールはASCIIコードのみ、と覚えておきたまえ。
む〜、わかりました。
それと、現実世界の郵便を模写したメールシステムだが、現実世界の郵便と似たようなところがあるという話はしたな。
でした。というよりそっくりですよね。
うむ。なので、メールでも「封筒」と「便箋」というものがある。
封筒? 便箋? メールに?
封筒には普通何が書いてある?
郵便番号、住所、あて名。あと、送り元?
「郵便番号、住所、あて名」はメールアドレス。「送り元」もメールアドレスだな。
送り先と送信元のメールアドレスがさっきでてこなかったか?
あ〜、MAILとRCPTコマンドで出てきましたね。
そうだ。つまり、その部分がエンベロープと呼ばれる。
えんぺろーぶ?
違う、エンベロープだ。意味はそのまま「封筒」だ。
一方のメール本文はメッセージだ。DATAコマンド部分だな。
[Figure79-04:エンベロープとメッセージ]
ははぁ、確かにDATAコマンドのメッセージ部分を、それ以外のエンベロープが包んでる形ですね。
封筒みたいに。
うむ。MTAはエンベロープに書かれた宛先を見て転送処理をする。
メッセージには何がかかれていようが関係ない。
ん?なんか当たり前ですよ?
郵便屋さんは中身はどうあれ、封筒の宛名で手紙を送るって当然でしょ?
まぁ、なぜわざわざこんなことを言うかというと、ちゃんと理由がある。
それはメールヘッダの説明をすればわかる。
メールヘッダ?
HTTPヘッダとか、そういうのと同じヘッダですか?
そういうことだな。メールヘッダについては次回だ。
はい。
もう一度SMTPの動作について、まとめておくと。
[Figure79-05:SMTPによるメールの転送]
MUAからSMTPコマンドを使って、MTAにメールが転送される。
MTAはそれが自身のメールボックス宛ならば内部配送し、外部ならば宛先サーバへさらに転送する。
でした。
ま、実際SMTPの動作自体はいたって簡単だ。
「Simple Mail Transfer」と呼ばれるだけはある。
う〜ん、そういわれればそうかも。
という所で今回は終了。
次回はメールヘッダについて話す。
了解です。 3分間ネットワーキングでした〜♪
- BlackJumboDog
-
サッポロワークスのプロキシサーバソフト。
メインはプロキシサーバだが、他にもHTTP、FTP、メール、DNSなども使える。
使いやすくってとても便利。
- ESMTP
-
[SMTP Service Extensions]
RFC1425で規定された拡張規格。
ただ、RFC1425は現在ではSMTPの現行バージョンと同じRFC2821になっている。
- MIME
- [Multipurpose Internet Mail Extensions encoding]
- エンベロープ
- [envelope]
- ネット君の今日のポイント
-
- SMTPはメールの転送を担うプロトコル。
- SMTPクライアントからSMTPサーバへメールが転送される。
- メールサーバは受け取ったメールが自身のメールボックス宛ならそこへ保存する(内部配送)。
- 受け取ったメールが他メールボックス宛ならそこへ転送する(外部転送)。
- SMTPはクライアントのコマンドと、サーバのレスポンスでやりとりする。
- メールはASCIIコードしか使えない。
- メールはエンベロープとメッセージからなる。
- SMTPはメールの転送を担うプロトコル。