コンテンツにスキップ

メールシステムの全体像

メールの送信、サーバー間配送、メールボックスへの保存、利用者による参照は、それぞれ異なる役割とプロトコルで処理する。


メールシステムを構成する役割

Section titled “メールシステムを構成する役割”

MUA(Mail User Agent)は、利用者がメールの作成、送信、閲覧を行うクライアントである。ThunderbirdなどのメールクライアントやWebメールが該当する。

送信では通常、SMTP Submissionを使って送信側サーバーへメッセージを提出する。SMTP AUTHを使わない構成では、TCP 25のSMTPでローカルドメイン宛てへ送信するか、mynetworksとして信頼されたネットワークから中継する。受信ではIMAPを使って受信側サーバー上のメールボックスを操作する。

MTA(Mail Transfer Agent)はSMTPでメッセージを受け取り、宛先に応じて次のMTAまたはローカル配送処理へ渡す。この構成ではPostfixがMTAである。

Postfixはキューへメッセージを保持し、DNSのMXレコードなどから次の配送先を判断する。配送に一時的に失敗した場合はキューへ残して再試行し、恒久的な失敗では送信元へ配送不能通知を返す。

MDA(Mail Delivery Agent)は、サーバーが受け取ったメールを受信者のメールボックスへ保存する。この構成ではDovecotのLMTPサーバーがローカル配送を担当する。

LMTP(Local Mail Transfer Protocol)はSMTPに似た配送プロトコルで、同じメッセージに複数の宛先がある場合でも宛先ごとの配送結果を返せる。PostfixとDovecotを同じホストで動かすため、TCPではなくUNIXドメインソケットで接続する。

IMAPサーバーは、サーバーに保存されたメールの一覧取得、本文の取得、既読状態の変更、フォルダー操作をクライアントへ提供する。この構成ではDovecotがIMAPサーバーを兼ねる。


flowchart TD
    A["AliceのMUA"]
    P1["送信側Postfix"]
    DNS["DNS"]
    P2["受信側Postfix"]
    L["Dovecot LMTP"]
    M["BobのMaildir"]
    I["Dovecot IMAP"]
    B["BobのMUA"]

    A -->|"SMTP SubmissionまたはSMTPで提出"| P1
    P1 -.->|"受信ドメインのMXを検索"| DNS
    P1 -->|"SMTPで配送"| P2
    P2 -->|"LMTPでローカル配送"| L
    L -->|"メッセージを保存"| M
    B -->|"IMAPで一覧・本文を要求"| I
    I -->|"Maildirを参照・操作"| M

同一サーバー内のalice@example.comからbob@example.comへ送る場合は、DNSによる外部MTAの探索とサーバー間SMTPを行わず、Postfixがローカル宛先と判断してDovecot LMTPへ渡す。


エンベロープとメッセージヘッダー

Section titled “エンベロープとメッセージヘッダー”

SMTP配送で使う送信元と宛先をエンベロープと呼ぶ。SMTPのMAIL FROMRCPT TOで指定され、配送不能通知の返送先や実際の配送先を決める。

一方、メッセージ本文に含まれるFrom:To:は利用者に表示するヘッダーである。エンベロープのアドレスと一致するとは限らない。Postfixのログやキューを調査するときは、表示上のTo:ではなくRCPT TOに対応するエンベロープ宛先を確認する。


ローカルドメインとユーザー情報

Section titled “ローカルドメインとユーザー情報”

Postfixのmydestinationに含まれるドメインは、このPostfix自身が最終配送先となるローカルドメインである。example.comを含めると、alice@example.comを別サーバーへ中継せず、ローカル配送へ渡す。

PAM認証版ではメール利用者をLinuxのローカルユーザーとして作成する。DovecotのPAM認証はLinuxアカウントのパスワードを検証し、passwd user databaseはUID、GID、ホームディレクトリを取得する。

LDAP認証版では、PostfixがLDAP mapでローカル受信者の存在を確認し、DovecotがLDAPから認証結果とUID、GID、ホームディレクトリを取得する。どちらもメールアドレスのローカル部aliceをユーザー名aliceへ対応させる。


外部からメールを受信するには、受信ドメインのMXレコードがメールサーバーのホスト名を示し、そのホスト名のAまたはAAAAレコードが到達可能なアドレスを示す必要がある。

example.com. IN MX 10 mail.example.com.
mail.example.com. IN A 192.0.2.10

MXレコード右辺はIPアドレスではなくホスト名であり、末尾の.は完全修飾ドメイン名であることを表す。SMTP送信元の信頼性にはPTR、SPF、DKIM、DMARCも関係するが、メールの保存やIMAPアクセスとは別の機能である。