メールの仕組み

現在、私たちはメールを当たり前のように使用しています。メールは文字や画像などを送れてとても便利なコミュニケーションツールです。ここでは、このメールの仕組みについて理解していきましょう。メールの仕組みを理解すれば、メールを使ったアプリの作成が容易になりますよ。

全体像

はじめにメールの全体像についてみていきましょう。

メールのやりとり

いま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
MAIL 自分(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とやりとりをします。

  1. Aさん:HELO smtp.test.com
  2. サーバーAの応答:250
  3. Aさん:MAIL FROM: <a@test.com>
  4. サーバーAの応答:250
  5. Aさん:RCPT TO: <b@test2.com>
  6. サーバーAの応答:250
  7. Aさん:DATA
  8. サーバーAの応答:354
  9. Aさん:メールの本文.
  10. サーバーAの応答:250
  11. Aさん:QUIT
  12. サーバー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から以下のようにしてメッセージを受け取ります。

  1. Bさん:USER b
  2. サーバーBの応答:+OK
  3. Bさん:PASS password
  4. サーバーBの応答:+OK
  5. Bさん:LIST
  6. サーバーBの応答:1
  7. Bさん:RETR 1
  8. サーバーBの応答:メールの本文.
  9. Bさん:QUIT
  10. サーバーBの応答:+OK

サーバーにログインして(USER,PASS)、メッセージの個数を知ります(LIST)。そして、メッセージを指定して読みだす(RETR)という流れです。ポート番号は110番です。

以上でメールの仕組みの解説は終わりです。今回の内容だけでメールの全体的な仕組みが理解できたかと思います。ただ、今回の内容だけでは、メールのデータ構造がわかりません。データ構造がわからないと、メッセージを画面に表示させることができません。データ構造については次回以降に解説していきます。

著者:安井 真人(やすい まさと)