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 ローカル配送とリモート配送
メール配信の仕組みを整理すると次のようになっています。
- メールクライアントでメールを作成する
- メールクライアントが送信用メールサーバにメールを送る
- 送信用メールサーバが、宛先ユーザのメールボックスがあるメールサーバを調べ、そのサーバに対してメールを送る
- メールを受け取ったメールサーバが、届けられるべきメールボックスにメールを配置する
- 宛先ユーザがメールサーバからメールをダウンロードし、メールを読む
メールサーバの動作に注目し、どのように処理を行うか見てみましょう。配送は、大きく2つのケースがあります。 1つはサーバ内にメールボックスがあり、そのメールボックスにメールを格納するものです。もう1つは他のメールサーバに メールボックスがあるため、そのメールサーバにメールを届けてあげるというものです。 前者をローカル配信、後者をリモート配信といいます。
3.2.2 メールの中継と制限
メールサーバがリモート配送を行う場合、受け取ったメールはそのままでは他のメールサーバに配送する事になります。
そのように自分宛ではないメールを受け取り、リモート配送することを「メールの中継(リレー)」といいます。
実は、迷惑メール(spam)の送信にこの中継機能が悪用される事が多くなってきています。迷惑メール送信者は、中継を行って
くれるメールサーバを見つけ、送信の要求を行うのです。これにより、意図せずに迷惑メール送信に協力する事になっていまいます。
メールサーバのリソースの無駄遣いにもなるので、不必要に中継をしないように設定することが必要になります。
しかし、メールクライアントから送られてくるメールを外部のメールサーバに送信する際には、中継を利用する必要があります。
その為、通常はメールクライアントがある社内や組織内のネットワークからのみ中継を受付るようにして、
それ以外は、自分宛のメールのみを受け取るように設定します。
すなわち、メールサーバは受け取ったメールに対して以下のいずれかの処理を行います。
- 宛先のユーザが自分のホスト内に存在すれば、所定のファイルにそのメールを保存する。
- 宛先のユーザが自分のホスト内に存在しなければ、配送されるべきメールサーバを DNS から判断し、そのメールサーバへメールを中継する
- 宛先のユーザが存在しないなどの送信エラーが存在すれば、送信者にその旨を通史する
このメールサーバ間の通信にも前述の 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