Loading post
Jul 18, 2026

メールは「相手のスマホへ直接飛ぶメッセージ」ではない。複数の郵便局に相当するサーバーが、宛先を調べ、預かり、転送し、相手のメールボックスへ置く store and forward(蓄積交換) の仕組みだ。英語版は blog-how-email-works.en.md。

alice@example.com が bob@example.net へ送るとき、だいたい次のことが起きる。
example.net のメール受け取り先(MXレコード)を調べる大事なのは、送信ボタンを押した時点で「相手が読んだ」わけでも、必ず「相手のサーバーへ届いた」わけでもないことだ。まず自分側のサーバーが受け付け、そこから配送が続く。
bob@example.net は、@ の左が local-part(そのドメイン内の受取人)、右が domain(配送先を探すための名前)だ。
example.net:どの組織へ運ぶかbob:その組織のどのメールボックスへ入れるか送信サーバーは、まずDNSの MX(Mail eXchanger)レコードを引く。MXには「このドメイン宛のメールはこのサーバーへ」という候補と優先度が入っている。第一候補が止まっていれば、別候補へ試すこともできる。
これは「宛名から地域の配送センターを見つけ、センター内で個人の箱へ分ける」動きに近い。
SMTP(Simple Mail Transfer Protocol)は、メールを送る方向の約束だ。概念的な会話は次のようになる。
S: 220 mx.example.net ready
C: EHLO mail.example.com
S: 250 ... capabilities ...
C: MAIL FROM:<alice@example.com>
S: 250 OK
C: RCPT TO:<bob@example.net>
S: 250 OK
C: DATA
S: 354 Send message
C: From: Alice <alice@example.com>
C: To: Bob <bob@example.net>
C: Subject: Hello
C:
C: 本文
C: .
S: 250 Queued
250 Queued は、受信サーバーが「責任を持って預かった」と答えた状態だ。Bobが開いたという意味ではない。
SMTPには二種類の宛先がある。
MAIL FROM と RCPT TO。配送に使う、封筒の表面From:、To:、Cc:、Subject:。ユーザーが読む便箋の情報この区別があるため、メーリングリスト、転送、BCCが成り立つ。BCCの受取人はSMTPの RCPT TO にはいるが、表示用ヘッダーには載らない。ただし、封筒と表示が別だからこそ、表示上の From: だけを偽ることも昔は容易だった。後述のSPF・DKIM・DMARCが必要になる理由だ。
インターネットメールの基本はテキストだ。HTML本文、画像、PDFを一通へ入れるために MIME が、内容を複数のpartへ分ける。
Content-Type: multipart/mixed; boundary="abc"
--abc
Content-Type: text/plain; charset="UTF-8"
こんにちは
--abc
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjQK...
--abc--
バイナリ添付をBase64にすると、3バイトを4文字で表すため、データ部分は理論上およそ33%大きくなる。さらにヘッダーや改行も加わる。「10 MBのファイルなのにメール全体は10 MBより大きい」のはこのためだ。
メール配送は一回で成功するとは限らない。
つまり「送信済み」「配送済み」「受信トレイに表示」「既読」は別々の状態だ。通常のインターネットメールには、相手の既読を確実に証明する共通機構はない。開封確認やトラッキングピクセルは拒否・遮断でき、絶対的な証明にはならない。
三つは競合機能ではなく、別の問いを担当する。
| 仕組み | 確かめるもの | 単独では分からないこと |
|---|---|---|
| SPF | 接続してきたIPが、envelope sender側ドメインの許可リストに合うか | 表示上のFromが本物か、本文が改変されていないか |
| DKIM | ドメインの秘密鍵による署名と、署名対象部分の整合性 | 書いた人の実名、内容が善意か |
| DMARC | SPFまたはDKIMの成功が、表示Fromのドメインと整合するか | そのメールが安全・正しい内容か |
認証に通ってもフィッシングはあり得る。攻撃者が自分で取得した正規ドメインから、正しく署名した詐欺メールを送れるからだ。認証は「名札の検査」であって「人格の保証」ではない。
多くの配送経路ではTLSが使われる。しかし通常のメールでTLSが守るのは 通信中の一つの区間 だ。
端末 ==TLS== 自分のメール事業者 ==TLS== 相手の事業者 ==TLS== 相手端末
↑ 保存された平文を扱える場合がある ↑
これは封書を各輸送車の鍵付き箱に入れるようなものだ。輸送中の盗み見には強いが、郵便局で仕分けするため中身へアクセスできる設計は残る。送信者と受信者だけが復号できる end-to-end encryption にはS/MIMEやOpenPGPなどが必要だが、鍵の配布・復旧・検索・迷惑メール検査との両立が難しく、一般メール全体の標準動作にはなっていない。
メールは「HTTPリクエストを一回投げる」より、メッセージキューに近い。
送信側が本文を渡した直後に接続が切れると、相手が保存したのに最終応答だけ届かなかった可能性がある。安全側へ倒して再送すると重複し得る。Message-ID は重複判定の手掛かりになるが、グローバルな exactly-once を保証する魔法ではない。
別々のメールは異なる経路・再試行回数を通る。「Aを送ってからBを送った」ことと、「Aが先に届く」ことは同じではない。メールは会話単位の厳密な順序配送を保証しない。
相手側が一時拒否したら、送信側はキューを保持し、間隔を広げて再試行する。大量送信では、キュー長、最古メッセージの滞留時間、ドメイン別の4xx率、バウンス分類が重要な観測値になる。
SPF・DKIM・DMARCが全部passでも受信トレイ行きとは限らない。IPやドメインの評判、送信量の急増、苦情率、本文パターン、ユーザー行動など、受信事業者独自の判定が重なる。
メールアプリの「メッセージのソース」「原文を表示」を開くと、次を観察できる。
Received: 行Authentication-Results: の spf=, dkim=, dmarc=Message-ID:Content-Type: とMIME boundary認証用トークン、社内サーバー名、個人のメールアドレスが含まれることがあるため、原文をそのまま公開しないこと。
| 用語 | 一言で |
|---|---|
| MUA | ユーザーが使うメールアプリ |
| MSA | ユーザーから送信メールを受け付けるサーバー |
| MTA | サーバー間でメールを転送する役 |
| MX | ドメインの受信サーバーを示すDNSレコード |
| SMTP | メールを送る・転送するプロトコル |
| IMAP | サーバー上のメールボックスを同期・操作するプロトコル |
| MIME | 本文形式や添付を一通へ構造化する仕組み |
メールは古いから単純なのではない。異なる会社・異なる実装が、相手が一時的に止まっていても配送を続けられるように作られた、巨大な分散システムだ。「送信」は一瞬でも、その裏では住所解決、キュー、再試行、暗号化、署名、評判判定が協調している。