【図解】初心者にも分かるメールの送受信の仕組み

メール送信のフロー

普段私たちが利用している電子メールは以下のようなフローで送信されています。

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 です。