メールの仕組み
2016年1月1日:ネットワーク
現在、私たちはメールを当たり前のように使用しています。メールは文字や画像などを送れてとても便利なコミュニケーションツールです。ここでは、このメールの仕組みについて理解していきましょう。メールの仕組みを理解すれば、メールを使ったアプリの作成が容易になりますよ。
全体像
はじめにメールの全体像についてみていきましょう。
いまAさんとBさんがいて、AさんがBさんへメールを送信している状況を考えます。彼らを2つのサーバー(パソコン)がつなげています。AさんはサーバーAのIP(住所)を知っているので連絡とれます。一方、BさんはサーバーBのIP(住所)を知っています。
はじめにAさんがSTMPという仕組みを使って、サーバーAへメールを転送します。サーバーAはAさんから受け取ったBさんのアドレスを元にBさんのサーバーBを探してメッセージを送ります。メッセージがサーバーBにつくと、BさんがPOP3という仕組みを使ってサーバーからメッセージを受け取ります。以下、送信プロトコルSTMPと受信プロトコルPOP3についてみていきます。
送信プロトコルSTMP
STMPとはSimple Mail Transfer Protocolの略です。メール送信用のプロトコルです。仕組みはいたって簡単で、AさんはサーバーAへ以下のようなコマンドを送ってメールの転送を指示します。
コマンド | 機能 | 書式 |
HELO | サーバーへの接続 | HELO サーバーのIP |
自分(Aさん)のメールアドレス | MAIL FROM:<メルアド> | |
RCPT | 相手(Bさん)のメールアドレス | RCPT TO:<メルアド> |
DATA | データの送信 | DATA |
QUIT | 処理の終了 | QUIT |
RSET | 処理の中断 | RSET |
NOOP | 何もしない | NOOP |
TURN | クライアントとサーバーの役割を逆転させる | TURN |
コマンドをサーバーに送ると以下のような応答コードがサーバーから返ってきます。
応答コード | 意味 |
211 | システム状態 |
214 | ヘルプメッセージ |
220 | 準備完了 |
221 | 接続を閉じる |
250 | 要求された処理が完了 |
251 | 受信者がいない |
354 | メールの入力を開始する |
500 | 構文エラー |
503 | コマンドの順番が間違っている |
550 | 指定ユーザーのメルアドがない |
以上のことを使ってAさんは以下のようにサーバーAとやりとりをします。
- Aさん:HELO smtp.test.com
- サーバーAの応答:250
- Aさん:MAIL FROM: <a@test.com>
- サーバーAの応答:250
- Aさん:RCPT TO: <b@test2.com>
- サーバーAの応答:250
- Aさん:DATA
- サーバーAの応答:354
- Aさん:メールの本文.
- サーバーAの応答:250
- Aさん:QUIT
- サーバーAの応答:221
見ての通り至ってシンプルです。まず、サーバーにつなぎ(HELO)、自分と送信先のアドレスを伝えます(MAIL FROM, RCPT TO)。そして、データを転送し(DATA)、サーバーとの接続を断ちます(QUIT)。データの本文の最終行は「.(ピリオド)」と決まっています。
サーバーと接続する際、IPアドレスとポート番号が必要です。IPに関しては自分のメルアドのドメイン(test.com)からわかります。一方、ポート番号にかんしては、25番と決まっています。ですから、IPとポート番号を利用してサーバーに接続しましょう。
受信プロトコルPOP3
STMPによってサーバーBにAさんからのメッセージが届きました。サーバーBからBさんがメッセージを取り出す際に使用するサーバーとのやりとりプロトコルがPOP3です。POP3はPost Office Protocol Version 3の頭文字をとったものです。
POP3では以下のコマンドを使用してサーバーとのやりとりを行います。
コマンド | 機能 | 書式 |
USER | ユーザー名を送信 | USER ユーザー名 |
PASS | パスワードを送信 | PASS パスワード |
LIST | メッセージの個数を取得 | LIST メッセージ番号 |
RETR | メッセージの取得 | RETR メッセージ番号 |
DELE | メッセージを削除 | DELE メッセージ番号 |
QUIT | サーバーとの通信を終える | QUIT |
BさんはPOP3を使ってサーバーBから以下のようにしてメッセージを受け取ります。
- Bさん:USER b
- サーバーBの応答:+OK
- Bさん:PASS password
- サーバーBの応答:+OK
- Bさん:LIST
- サーバーBの応答:1
- Bさん:RETR 1
- サーバーBの応答:メールの本文.
- Bさん:QUIT
- サーバーBの応答:+OK
サーバーにログインして(USER,PASS)、メッセージの個数を知ります(LIST)。そして、メッセージを指定して読みだす(RETR)という流れです。ポート番号は110番です。
以上でメールの仕組みの解説は終わりです。今回の内容だけでメールの全体的な仕組みが理解できたかと思います。ただ、今回の内容だけでは、メールのデータ構造がわかりません。データ構造がわからないと、メッセージを画面に表示させることができません。データ構造については次回以降に解説していきます。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー