PR

 「フォーマットの変換が終わったから,次の仕事にとりかかろう。次はメールをインターネットに送り出す仕事だな。サーバー君を呼び出してメールを1通ずつ送らなきゃ」――。

 ここからは,電子メールがインターネット上でどのようにやりとりされているのかという“動き”を見ていく。

 さっそく,メーラーのメール送信処理を追っていこう。ユーザーが作成したメールを,メーラーがどのようにインターネットに送り出しているのかがわかれば,最終的にインターネットを介してつながる相手までメールが届くしくみがすべてわかる。

 ユーザーがメールを書いてメーラーの送信ボタンをクリックすると,メーラーが仕事を始める。メーラーはまず,ユーザーが書いたメールを,インターネットに送れるように,7ビットASCIIコードで表す標準フォーマットに変換する。ここまでは,フォーマット編で見てきた通りだ。

SMTPを使ってサーバーとやりとり

 次にメーラーは,標準フォーマットのメールをインターネットに送り出す。このときメールを送る相手は,あらかじめメーラーにアドレス(ホスト名)を設定しておいたプロバイダや社内のメール・サーバーである。メーラーは,SMTP*1と呼ぶプロトコルを使ってこれらのメール・サーバーと対話することで,あて先までメールを届けてくれるようにサーバーに依頼するのである(図2-1)。

図2-1●電子メールを送信する
図2-1●電子メールを送信する
ユーザーがメール送信ボタンをクリックすると,メーラーはメール・サーバーとSMTPと呼ぶプロトコルを使って会話を始める。インターネット・メールである限り,このしくみは世界中どこでも共通だ。
[画像のクリックで拡大表示]

 でも,なぜ直接相手に送らずにメール・サーバーに依頼するのだろうか。理由はいくつかある。主な理由は,個人がクライアント・パソコンで使うメーラーには,なるべくメール送信の負担をかけたくないからだ。

 もし,メーラーが直接相手にメールを届けるとすると,メーラーはまずインターネットの中からあて先となる相手を探さなければならない。また,相手が一時的な事情でメールを受け取れないと,しばらく待ってから再送するといった処理も必要になる。

 手紙を相手に届けるとき,わざわざ自分で相手の家まで持って行かずに郵便を使うだろう。近くのポストに投函すれば,あとは郵便局側が責任を持ってあて先まで配送してくれる。メーラーがSMTPサーバーを経由してメールを送るのも,これと同じ考え方だ。

サーバーと対話しながら処理を進める

 ではさっそく,メーラーがSMTPを使ってメール・サーバーにメール配信を依頼するやりとりを見ていこう。

 SMTPはTCP*2上で動作するプロトコルである。ポート番号*3は25番を使う。つまり,メーラーは最初に,メール・サーバーの25番ポートにTCPで接続する*4のである(図2-2の(1))。

図2-2●SMTPのやりとり
図2-2●SMTPのやりとり
SMTPを使ったメールの送信手順は,一通りしかない。メールを連続して送る場合は,(6)のあと(3)以降の動作を繰り返す。

 無事に接続できたら,メーラーはサーバーとSMTPを使って対話を始める。やりとりの基本は,メーラーがテキスト・ベースのコマンドを一つ送ると,それに対するテキスト・ベースの応答がサーバーから返ってくるという形になる。これを繰り返すことで,メール送信の手順を進めていく。

 サーバーに接続したあと,メーラーは,最初に「HELO(ハロー)」というコマンドを使ってあいさつする(同(2))このときメーラーは,HELOコマンドに続けて,メールの送信元である自分のマシン名かドメイン名を伝える*5

  HELOコマンドを送ると,サーバーから即座にSMTPの応答メッセージが返ってくる。このメッセージは,「250 OK」というように,3桁の数字とそれに続く単語や文章という組み合わせになっている。この3桁の数字を「ステータス・コード」と呼び,メール・サーバーがメーラーに対してコマンドの実行結果やサーバーの状況,エラーなど*6を詳しく伝えるために使われる。

 メーラーがメール・サーバーにコマンドを送り,それに対してメール・サーバーがステータス・コード付きの応答を返す――。HELOコマンドに限らず,SMTPのやりとりはすべて,このくり返しなのだ。

送信元とあて先をサーバーに指示

 HELOコマンドによるあいさつが終わったら,次はメールを送信するために必要な情報をサーバーに伝える段階に入る。まず,MAIL(メール) FROM(フロム)コマンドで送信元メール・アドレスをサーバーに伝え(同(3)),続いてRCPT(レシピエント)TO(トゥー)コマンドを使ってあて先メール・アドレスを通知する(同(4))。

 これで,メール送信のための準備は終わり。ここからは,いよいよメール本体をサーバーに送信する。

 まず,DATA(データ)コマンドでサーバーにメールの送信開始を通知する(同(5))。サーバーがOKを返すと,メーラーはメール本体の送信を始める(同(6))。このとき,メーラーは標準フォーマットのメールを先頭から一気に送る。つまり,メール・ヘッダーから始まって,区切りの空白行とメッセージ本体をIPパケットに乗せて送るのだ。メールのデータが一つのパケットに入りきらないときは,複数のパケットにデータを連続して格納して送る。

 そして,メーラーがメールの終わりを示す区切りとして,改行コード*7,「 . (ピリオド)」,改行コードという特別な文字列をメールの最後に付けて送る。するとサーバーは,メール本体の送信が終わったことを判断する。

 以上でメールの送信処理は終了だ。メーラーはサーバーにQUIT(クイット)コマンドを送って接続を切断する(同(7))。

 実は,ここまで見てきたのは,SMTPを使って一つのあて先にメールを1通送るという最も単純なケース。でも,メーラーが実際にメールを送るケースはこればかりではない。異なるメールを連続して送ったり,同じメールを複数の人に同報することもある。メーラーはこれらの場合,どのように送信を処理するのだろうか。