メールシステムの全体像
メールの送信、サーバー間配送、メールボックスへの保存、利用者による参照は、それぞれ異なる役割とプロトコルで処理する。
メールシステムを構成する役割
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とLMTPサーバー
Section titled “MDAとLMTPサーバー”MDA(Mail Delivery Agent)は、サーバーが受け取ったメールを受信者のメールボックスへ保存する。この構成ではDovecotのLMTPサーバーがローカル配送を担当する。
LMTP(Local Mail Transfer Protocol)はSMTPに似た配送プロトコルで、同じメッセージに複数の宛先がある場合でも宛先ごとの配送結果を返せる。PostfixとDovecotを同じホストで動かすため、TCPではなくUNIXドメインソケットで接続する。
IMAPサーバー
Section titled “IMAPサーバー”IMAPサーバーは、サーバーに保存されたメールの一覧取得、本文の取得、既読状態の変更、フォルダー操作をクライアントへ提供する。この構成ではDovecotがIMAPサーバーを兼ねる。
送信から受信までの流れ
Section titled “送信から受信までの流れ”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 FROMとRCPT 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へ対応させる。
DNSレコード
Section titled “DNSレコード”外部からメールを受信するには、受信ドメインのMXレコードがメールサーバーのホスト名を示し、そのホスト名のAまたはAAAAレコードが到達可能なアドレスを示す必要がある。
example.com. IN MX 10 mail.example.com.mail.example.com. IN A 192.0.2.10MXレコード右辺はIPアドレスではなくホスト名であり、末尾の.は完全修飾ドメイン名であることを表す。SMTP送信元の信頼性にはPTR、SPF、DKIM、DMARCも関係するが、メールの保存やIMAPアクセスとは別の機能である。