メール送信のフロー
普段私たちが利用している電子メールは以下のようなフローで送信されています。
1. メールソフト (MUA) から SMTP 中継サーバ (MTA) へメール送信
Outlook 等のメールソフトで『送信』等のボタンを押すと、メールソフトに設定されている SMTP 中継サーバに SMTP 接続しにいきます。SMTP 中継サーバからは認証情報要求をされるので、ID パスワード情報を送付します。
2. メール中継サーバが送信元身元確認のため、LDAP サーバへ ID パスワードを確認
受信したアカウント情報が正しいものかどうかを LDAP サーバへ確認しにいきます。この機能を SMTP-AUTH と言います。一昔前は SMTP 認証機能はありませんでしたが、スパムメールが流行し、その暫定策として POP before SMTP (POP は認証機能がついているので、SMTP をする前に必ず POP で認証させる) が実装され、根本策としてこの SMTP-AUTH が搭載されました。
3. メールソフトからメール中継サーバへメール送信
認証が正しいとなったら、メールソフトからメール中継サーバへメールが送信されます。
4. メール中継サーバが DNS サーバへ MX レコードとその A レコードを問い合わせ
メールを受信した SMTP 中継サーバは、宛先メールアドレスの @ 以降のドメインネームの MX レコードを DNS サーバに問合せます。図の例では、example.com の MX レコードを問合せます。通常、この MX レコードのホスト名の A レコードは、PC から要求しなくても、DNS サーバが付加情報として同じパケットの中に含めてくれます。DNS の動作については、こちらをご参照下さい。
この問い合わせをすることで、宛先メールアドレスのメールサーバの IP アドレスを取得できます。
5. メール中継サーバから example.com のメールサーバへの送信
宛先メールアドレスのメールサーバの IP アドレス宛にメールを送ります。なお、SMTP 中継サーバは、複数立てることもできます。その場合、パターンは以下 2 つがあります。
1 つ目は直列設置で、例えば、まずはスパム対策を行う SMTP サーバ、その次にウィルスチェックを行う SMTP サーバ、最後にメールスプールの存在する SMTP サーバ、というように機能別に中継していくパターンです。SMTP は TCP 通信ですので、中継するたびに TCP コネクションを張ります。メールを受信したら次の転送先へ TCP コネクションを張り、相手が受信したのを確認したら TCP コネクションを切断し、メールキューから削除します。
2 つ目は並列設置で、受け口のメール中継サーバを冗長化するパターンです。この場合、DNS に複数の MX レコードを作成し、その MX レコードに付随する Preference という値で、「値が低いほうを優先してほしい」旨を相手に伝えます。ただし、相手は Preference の高い(優先度の低い)ほうにも送信ができます(送信先を強制できません)ので、注意が必要です。
メール受信のフロー
メールを受信する際には、下図のようなフローになります。
1. メールソフト (MUA) からメールスプール (MRA) へ ID パスワード情報を送付
Outlook 等のメールソフトで『受信』等のボタンを押すと、メールソフトに設定されている POP サーバ、 もしくは IMAP サーバの IP アドレスにメールの受信要求、およびメールアカウントの ID パスワード情報を送ります。 認証情報は通常、メールソフトに設定しておきます。
2. メールスプールサーバが受信者の身元確認のため、LDAP サーバへ ID パスワードを確認
受信要求を受信した POP サーバ、もしくは IMAP サーバは、認証サーバにメールアカウントのパスワードの検証を依頼します。
3. メールソフトメールスプールサーバが受信者の身元確認のため、LDAP サーバへ ID パスワードを確認
パスワードが正しければ、メールスプールサーバからメールが受信できます。
なお、POP と IMAP を同時に利用できる環境として代表的なものが、Linux の Dovecot (ダブコット) と Courier-imap (クーリエアイマップ)、Windows の Microsoft Exchange Server です。
コメント