3.1 メール配信の仕組み

メール配信の仕組みは一見複雑に見えますが、実は郵便の配達方法と似ている部分が多く、秩序だったものになっています。

3.1.1 メールの作成と配信

通常、メールは、Outlook や Becky や Thunderbird などに代表されるメールクライアントソフト(MUA:MailUserAgent)を利用してメールを作成します。 メールを書き終えると、メールクライアントソフトで送信を行います。ここでいう送信とは、メールクライアントの設定であらかじめ登録している メールサーバにメールの送信を依頼する事になります。
こうして送信されたメールは、直接あて先のメールサーバに届けることはせず、登録しているメールサーバに送信を依頼することなります。 また、メールクライアントからメールサーバにメールを受け渡すときには、プロトコルとして SMTP(Simple Mail Transfer Protlcol)が利用されます。

3.1.2 メールサーバでの配送

メールクライアントからメール送信要求を受け付けたメールサーバは、本来届けられるべきメールサーバにメールを配送しようとします。 まずはじめに、どのメールサーバにメールを送り届けるべきかを調べます。宛先メールアドレスのホスト部(@以降の部分)について、DNSサーバに MX レコードの問い合わせを行います。配送すべきメールサーバの IP アドレスがわかったら、SMTP を利用してそのメールサーバにメールを送り届けます。
メールを受け取ったメールサーバは、メールボックスにメールを格納します。

3.1.3 メールの受信

宛先のメールボックスにメールが配信されても、まだメールの受取手がメールを目にしたわけではありません。 メールボックスに配送されたメールを参照するには、いくつかの方法がありますが、もっとも一般的なのが、クライアント側にメールを ダウンロードさせる方法です。そのためのプロトコルが POP (Post Office Protocol)がよく利用されます。このプロトコルによりダウンロード されて初めて受取手にメールが読まれる事になります。

3.2 メールサーバの役割

3.2.1 ローカル配送とリモート配送

メール配信の仕組みを整理すると次のようになっています。

  1. メールクライアントでメールを作成する
  2. メールクライアントが送信用メールサーバにメールを送る
  3. 送信用メールサーバが、宛先ユーザのメールボックスがあるメールサーバを調べ、そのサーバに対してメールを送る
  4. メールを受け取ったメールサーバが、届けられるべきメールボックスにメールを配置する
  5. 宛先ユーザがメールサーバからメールをダウンロードし、メールを読む

メールサーバの動作に注目し、どのように処理を行うか見てみましょう。配送は、大きく2つのケースがあります。 1つはサーバ内にメールボックスがあり、そのメールボックスにメールを格納するものです。もう1つは他のメールサーバに メールボックスがあるため、そのメールサーバにメールを届けてあげるというものです。 前者をローカル配信、後者をリモート配信といいます。

3.2.2 メールの中継と制限

メールサーバがリモート配送を行う場合、受け取ったメールはそのままでは他のメールサーバに配送する事になります。 そのように自分宛ではないメールを受け取り、リモート配送することを「メールの中継(リレー)」といいます。
実は、迷惑メール(spam)の送信にこの中継機能が悪用される事が多くなってきています。迷惑メール送信者は、中継を行って くれるメールサーバを見つけ、送信の要求を行うのです。これにより、意図せずに迷惑メール送信に協力する事になっていまいます。 メールサーバのリソースの無駄遣いにもなるので、不必要に中継をしないように設定することが必要になります。 しかし、メールクライアントから送られてくるメールを外部のメールサーバに送信する際には、中継を利用する必要があります。 その為、通常はメールクライアントがある社内や組織内のネットワークからのみ中継を受付るようにして、 それ以外は、自分宛のメールのみを受け取るように設定します。
すなわち、メールサーバは受け取ったメールに対して以下のいずれかの処理を行います。

  1. 宛先のユーザが自分のホスト内に存在すれば、所定のファイルにそのメールを保存する。
  2. 宛先のユーザが自分のホスト内に存在しなければ、配送されるべきメールサーバを DNS から判断し、そのメールサーバへメールを中継する
  3. 宛先のユーザが存在しないなどの送信エラーが存在すれば、送信者にその旨を通史する

このメールサーバ間の通信にも前述の SMTP が用いられます。

3.2.3 宛先と名前解決

メールサーバはメールを受け取ると、宛先に記載されているドメイン名またはホスト名を見て、該当するゾーンのネームサーバに問い合わせをします。 このときに参照されるのは、ゾーンの「MX レコード(mail exchanger)」です。MX レコードとして記載されたホストは、そのゾーンのメールサーバを表します。

3.2.4 メールの受信

受信用メールサーバは、POP サーバや IMAP サーバという種類のプログラムで構成されます。 受信用メールサーバ側とメールクライアントソフトの間の通信には、POP(Post Office Protocol)や IMAP(Internet Message Access Protocol) などのプロトコルが使われます。
多くの場合、送信用メールサーバと受信用メールサーバは同じホストで動作しており、総じて「メールサーバ」と呼ばれることになります。

3.2.5 メールサーバの構成要素

一般的に送信用メールサーバソフトの事を MTA(Mail Transfer Agent)MTA が受信したメールの配送先を詳細に分けることができるソフト のことを MDA(Mail Delivery Agent)と呼びます。これ以外に、受信用メールサーバソフトのことを MRA(Mail Retriaval Agent) メーラーのことを MUA(Mail User Agent)と呼びこれらがメールサーバの構成要素となります。

送信の流れ
MUA -(SMTP)-> MTA -> MDA -> メールボックス
受信の流れ
MUA <-(POP or IMAP)-> MRA <--> MDA -> メールボックス

3.3 メールの構造

メールの構造は、エンベロープメール本体 に分けられます。 メールクライアントソフトで(MUA)でメールを確認する際は、メール本体のみが参照できます。

3.3.1 エンベロープとメール本体

エンベロープという言葉は、「封筒」という意味があります。配送先の情報が記載されており、配送先を決定する最も重要なものになります。
メール本体は、ヘッダとメール本文という構成になっています。通常 MUA によって表示されるのは、ヘッダの一部と本文のみとなります。

エンベロープアドレスヘッダの To From フィールド
説明メールの配信に利用されるメール内容の一部で配送には利用されない
手紙の場合封筒に書かれた宛名
郵便局はこれを見て配達する
便箋の中に書かれた名前

3.3.2 ヘッダとメール本文

メール本体は、ヘッダとメール本文に分かれます。最初にヘッダと呼ばれる情報があり、その後に本文が続きます。 ヘッダには、メールに関する付加情報(宛先アドレス、送信元アドレス、件名等)が一定のルールに基づいて記述されます。 ヘッダと本文の間は一行の空行によって区切られています。つまり、メール本体に現れる一番最初の空行までがヘッダであり、 それ以降は本文と認識されます。
ヘッダに記載されいてる情報の1つ1つをフィールドと呼びます。メールヘッダについては、RFC821、2076 で規定されています。 代表的なフィールドとして以下のようなものがあります。

フィールド説明
From送信者のメールアドレス
To宛先のメールアドレス
Delivered-To実際に配送されたメールアドレス
エンベロープで指定された RCPT TO: の値が格納される
Dateメール送信日時
Subjectメールの件名
Message-IDメールを識別されるために利用される ID

3.4 電子メールの配送に利用されるプロトコル

3.4.1 SMTP

メールクライアントやメールサーバなどがメールを送信するときに利用されるのが SMTP です。 SMTP では、最初に自分のホスト名(HELO や EHLO)を名乗り、その後エンベロープとして、送信元アドレス(MAIL FROM)、宛先アドレス(RCPT TO) などを送信後にメール本文(DATA)を送信します。

TELNET コマンドによる SMTP 利用
telnet localhost 25 (25はポート番号)
EHLO tdr-lab.com
MAIL FROM: root@tdr-lab.com
RCPT TO: naoki@tdr-lab.com
DATA
~ヘッダ(省略も可能)~
空白行(ヘッダと本文の境目)
本文
.(ドットでメール終了)
QUIT

主な SMTP コマンド

SMTP コマンド説明
EHLO [ドメイン名]SMTP 通信の開始を表わす
EHLO は ESMTP をサポートするコマンド
MAIL FROM: [mailaddress]送信者のメールアドレスを通知する
RCPT TO: [mailaddress]宛先のメールアドレスを通知する
DATAメールの本文の始まりを表わす
「.」だけの行の入力によって入力終了となる
Dateメールサーバとの接続を切断する

「MAIL FROM」 や 「RCPT TO」 ではエンベロープ情報を送信しており、DATA 以降に送信する部分はメールの本体となっています。

3.4.2 POP

メールクライアントからメールをダウンロードするときに、POP が利用されます。 POP では、メールボックス内に格納されているメールの一覧を取得したり、各メールデータを取得する事ができます。

TELNET コマンドによる POP 利用
telnet localhost 110
USER naoki
PASS [パスワード]
LIST ※メールリスト取得 ID のリスト
RETR [ID] ※メール受信
QUIT