Lesson2ではメールを送信するのに使うSMTPについて詳しく見ていこう。SMTPで使われているコマンドとそれらがやりとりされる手順をしっかり理解しておきたい。また,メールを複数のあて先に同報するときの動作についても知っておこう。

情報を送信するとサーバーが返答

 SMTPは,メーラーからメール・サーバーにメールを送るときと,メール・サーバー間でメールを転送するときに使われている。図2-1では,例としてメーラーとメール・サーバーでのやりとりを示している。

図2-1●SMTPでの基本的なやりとり
図2-1●SMTPでの基本的なやりとり
メールを送るときは,送信元とあて先の情報を送ってから,メールの本体を送る。SMTPはRFC2821で規定されている。
[画像のクリックで拡大表示]

 SMTPのやりとりはとてもシンプルだ。TCPで接続後,メールの送信元アドレス,あて先アドレス,メールの本文という順番でデータを送る。この動作を,送るメールの数だけ繰り返す。データを送るときは,それぞれ決められたコマンドを使って,サーバーの応答を確認しながらやりとりする。

 具体的な動作を見ていこう。まずSMTPではTCPの25番ポートを使ってメール・サーバーと接続する。最初のやりとりは,人間の世界と同様にあいさつから始まる。あいさつに使うのがHELOコマンド。SMTPの拡張仕様をサポートしている場合は,HELOではなくEHLOコマンドを使う。

 メール・サーバーからOKという返事が来たら,きちんとやりとりできている証拠だ。ちなみに,メール・サーバーが返答するメッセージには3桁の数字が含まれている。これは返答に使うコードで,コマンドで要求した動作が完了したときは「250 OK」が返ってくる。

 このほかにも,要求を伝えるコードやエラーの発生を通知するコードなどが決められている。例えば,「452」はサーバーの記憶容量が不足しているため要求された動作ができなかったことを示す。

送信元とあて先の情報から送る

 あいさつが終わると,メール・クライアントはメールの送信元アドレスを送信する。具体的にはMAILというコマンドを使い,「FROM:nnw@example.com」のような送信元アドレスを送る。送信元アドレスを送ったら,続けてRCPTというコマンドであて先アドレスを送る。

 アドレス情報を送り終えたら,いよいよメールの本体を送信する。データ量が多いときは,データを複数に分けて,連続したパケットで送る。データを送り終えたら,データの終わりを示すコードで締めくくる。メール・サーバーがOKと返事をしたら,データは無事に送信完了だ。

 メール送信の最後は,QUITコマンドで終わりを宣言する。これを受け取ったサーバーからOKの返事が来たあとに,TCP接続を切断する。

同報のあて先はまとめて送る

 ここでは,メールを一つのあて先アドレスに1通送るときの流れを示した。このほか,続けて別のメールを送信したり,複数のあて先に同報する場合もある。そうしたケースも見ていこう。

 メールを続けて送信するきは,単純にMAILコマンドから繰り返し,すべてのメールを送信し終わってからQUITコマンドで終了する。

 同じ内容のメールを複数の人に同報する場合は,RCPTコマンドでメールのあて先アドレスを送るときに,複数のあて先アドレスをまとめて送ってしまう。10人に同報する場合は,RCPTコマンドを10回繰り返し,アドレスを一つずつ送る。こうしてあて先をすべて送ってから,メールの本体を1回だけ送信する。すると異なるあて先アドレスに同じ本文を送信できるのである。