メールが届く仕組み ― SMTP・POP・IMAPの役割分担
メールは
メールは送信用のSMTPと、受信用のPOP3・IMAPという別々のプロトコルで届く
メールは、送信と受信で別のプロトコルを使います。サーバ同士の配送には常にSMTP(Simple Mail Transfer Protocol)を使います。受け取るときは、POP3かIMAPのどちらかを使います。この2つは、サーバ上のメールの扱い方が違います。
送信では、メールはメールソフトから自分側のサーバへ渡り、さらに相手側のサーバへ届きます。途中で、DNSのMXレコードを使って宛先サーバを探します。
受信では、POP3かIMAPのどちらかを、メールソフトの設定で選びます。POP3は、メールを取り込んで、サーバからは基本的に削除します。IMAPは、サーバに残したまま同期します。
メールソフトに入れる送信サーバと受信サーバの名前やポート番号も、この分担から決まります。
MUA・MSA・MTA・MDAの役割分担
メールの仕組みには4つの役割が登場します。同じソフトが、複数の役割を兼ねることも多いです。それでも、どの役割の話をしているかを区別すると、後の説明が読みやすくなります。
| 略語 | 正式名称 | 役割 |
|---|---|---|
| MUA | Mail User Agent | メールを読み書きする、利用者が直接操作するソフト(メールソフト・Webメール) |
| MSA | Mail Submission Agent | 送信者のMUAからメールを受け取り、SMTP認証などで送信者を確認する窓口 |
| MTA | Mail Transfer Agent | メールサーバ同士でメールを配送する仕組み。MSAと同じソフトが兼ねることが多い |
| MDA | Mail Delivery Agent | 届いたメールを受信者のメールボックスに保存する仕組み |
普段メールソフトと呼んでいるOutlookやGmailアプリは、役割で言うとMUAです。会社やプロバイダが運用するメールサーバは、場面によってMSA・MTA・MDAと呼び名が変わります。どの役割をどう呼ぶかは、上の表のとおりです。
ここで登場するSMTP・POP3・IMAPは、いずれもTCPの上で動きます。メールでは、届いたか届かなかったかが送信側に分かる必要があります。そのため、UDPではなくTCPを使います。
送信:MUAからMSA/MTAへ(587番・SMTP認証)
メールを送信すると、まずMUAは、送信者自身が契約しているメールサーバに接続します。この窓口をMSA(Mail Submission Agent)と呼びます。RFC 6409で決められたMSAのポートは、587番です。
MSAは、接続してきた相手が本当にそのアカウントの持ち主かを確認します。確認には、ユーザー名とパスワードを使います。この確認をSMTP認証と呼び、SMTP AUTHとも書きます。
かつては、25番ポートに直接メールを投稿する方式も広く使われていました。ただし、認証なしで誰でも中継できてしまうため、迷惑メールの踏み台に悪用される問題が起きました。
この反省から、役割を分ける設計が定着しています。利用者からの投稿は認証つきの587番、サーバ同士の配送は25番です。この設計は、RFC 6409で定義されています。
多くのプロバイダは、OP25B(Outbound Port 25 Blocking)も実施しています。これは、利用者回線からプロバイダの外にある25番宛ての通信を制限する仕組みです。この制限があっても、外部のメールサーバへは587番か465番の認証つき投稿で送れます。
メールアドレスの@の後ろはドメイン
メールアドレスはローカル部@ドメインという形式です(RFC 5322)。たとえば、送信者がsato@example.comで、受信者がtanaka@example.netだとします。この場合、その組織内での宛先を示すtanakaがローカル部です。example.netは、DNSの記事で説明したドメイン名にあたります。
次の節で見るとおり、メールサーバはこの@の後ろのドメイン名だけを使って宛先サーバを探します。ローカル部は、宛先サーバに届いた後で使われます。その組織内の、どの受信者宛てかを区別するためです。
配送:MXレコードで宛先サーバを探す
SMTP認証を終えたMSA/MTAは、次に宛先メールサーバの場所を調べます。使うのは、IPアドレスを調べるA/AAAAレコードではありません。メールを受け取るサーバの宛先を示す、MXレコード(Mail eXchanger)です。
MSA/MTAは、DNSに登録されたMXレコードを問い合わせます。返ってくるのは、メールサーバのホスト名です。このホスト名について、あらためてA/AAAAレコードでIPアドレスを調べます。もし宛先ドメインにMXレコードが登録されていなければ、そのドメイン自体のA/AAAAレコードを宛先サーバとみなして配送を試みます(RFC 5321 §5.1)。
宛先の受信側MTAが見つかったら、送信側と受信側のMTA同士が、SMTPの25番ポートで直接メールを配送します。この配送は、RFC 5321で定義されています。587番を使うのは、利用者がMSAに投稿する区間だけです。MTA間の配送は今も25番です。
動かして確かめる:送信から受信までの経路
次の図で、ここまでの送信・配送と、このあと説明する受信を、1段ずつ確かめられます。ステップを切り替えると、使われる区間・プロトコル・ポート番号が変わります。⑤と⑥は、どちらもメールボックスからMUAへの区間です。POP3かIMAPかで、扱いが変わる点を比べてください。
送信者のメールソフトは、ユーザー名とパスワードでSMTP認証をしながら、送信側のMSA/MTAにメールを渡します。
送信側のMTAは、宛先アドレスの@より後ろのドメインを使います。DNSにMXレコードを問い合わせて、宛先メールサーバの場所を調べます。
MXレコードで見つかった受信側MTAへ、MTA同士がSMTPの25番ポートで直接メールを配送します。
受信側MTAに届いたメールは、MDAという仕組みが受信者のメールボックスに保存します。ここまでは、受信者が何も操作しなくても進みます。
受信者のメールソフトが、メールボックスからメールを取り込みます。取り込んだメールは、基本的にサーバから削除されます。
受信者のメールソフトは、メールボックスの中身をサーバに残したまま同期します。他の端末からも、同じメールボックスを見られます。
受信:POP3とIMAPの違い
受信者のMUAがメールボックスからメールを受け取る方法には、POP3とIMAPの2つがあります。2つのいちばんの違いは、受信後にサーバ上のメールがどうなるかです。
POP3は、Post Office Protocol version 3の略です。RFC 1939で規定されています。IMAPは、Internet Message Access Protocolの略です。現行版は、IMAP4rev2(RFC 9051)です。
| POP3 | IMAP | |
|---|---|---|
| サーバ上のメール | 取り込むと基本的に削除される | サーバに残したまま同期する |
| 複数端末での見え方 | 端末ごとにバラバラ(取り込んだ端末にしか残らない) | 同じメールボックスをどの端末からも同じ状態で見られる |
| 向いている使い方 | 1台の端末だけでメールを管理する場合 | スマホとPCなど、複数の端末を使い分ける場合 |
| ポート番号(平文/TLS版) | 110 / 995 | 143 / 993 |
POP3は、メールを1台の端末に取り込みます。取り込んだメールは、サーバ側からは基本的に削除します。設定でサーバにも残せますが、規格としての基本動作は取り込んで削除です。
IMAPは、メールをサーバに残したまま管理します。そのため、PCとスマホなど複数の端末から、同じメールボックスを同期して見られます。スマホとPCを併用するのが当たり前になった現在は、IMAPが主流です。
| プロトコル | 役割 | 平文の | TLS版の |
|---|---|---|---|
| SMTP(送信・投稿) | MUA → MSA | 587 | 465(最初からTLS=SMTPS) |
| SMTP(MTA間の配送) | MTA → MTA | 25 | (専用ポートはなく、25のままSTARTTLSで暗号化) |
| POP3 | メールボックス → MUA | 110 | 995 |
| IMAP | メールボックス → MUA | 143 | 993 |
暗号化の方式は、ポート番号ごとに2通りあります。1つは、平文でやり取りを始めてから、STARTTLSコマンドで暗号化に切り替える方式です。もう1つは、別のポート番号を使い、最初からTLS通信を始める方式です。
110番・143番でも、STARTTLSは使えます。ただし、RFC 8314は、465番・993番・995番のように最初からTLSで通信する方式を推奨しています。TLSによる暗号化の仕組み自体は、HTTPとHTTPSの記事で説明したものと同じです。
MIME:添付ファイルと日本語が送れる理由
SMTPはもともと、7ビットのASCII文字だけを送る前提で設計された規格でした。ASCII文字は、英数字と一部の記号です。このままでは、日本語のような2バイト以上の文字を、そのまま送れません。画像・PDFなどの、バイナリデータの添付ファイルも同じです。
この制約を越えるための仕組みがMIME(Multipurpose Internet Mail Extensions)です。MIMEは、日本語の本文や添付ファイルをBase64などの方式でASCII文字だけの文字列に変換します。
変換した文字列は、メール本文に埋め込まれます。受信側のMUAは、それを元の形式に復元します。メールソフトが自動でこの変換を行うため、利用者が普段MIMEを意識することはほとんどありません。
CcとBccの違い
メールの宛先欄には、直接の宛先であるToのほかに、CcとBccという2つの欄があります。どちらも、Toの相手以外にも送る点は同じです。違うのは、宛先が他の受信者に見えるかどうかです。
- Cc
Cc
(Carbon Copy) 参考として同時に送る宛先です。ToとCcに入っているアドレスは、受信者全員から互いに見えます。
- Bcc
Bcc
(Blind Carbon Copy) 参考として同時に送る点は、Ccと同じです。ただし、Bccに入れた宛先は、他の受信者からは見えません。Bcc同士も、互いに見えません。
SMTPでの配送先は、メールのヘッダではなく、RCPT TOという別のコマンドで渡されます。RCPT TOは、封筒の宛先にあたります。To・Cc・Bccのすべての宛先が、ここで個別に指定されます。
送信側のMUA/MSAは、実際に配送する前に、メールのヘッダからBcc欄だけを取り除いてから送り出します。そのため、受信者が見るメールのヘッダにはBccの宛先が残りません。Bccの扱いは、RFC 5322 §3.6.3で定められています。
なりすまし対策:SPF・DKIM・DMARC
SMTPは元々、送信者アドレスの正しさを確認する仕組みを持っていませんでした。そのため、送信元を偽ったメールを送ること自体は、技術的に可能でした。このようなメールをなりすましメールと呼びます。この弱点を補うため、DNSを使った3つの仕組みが広く使われています。3つが何を照合するかの違いは、SPF・DKIM・DMARCの記事で比べています。
- 1
SPF
(Sender Policy Framework) ドメインの持ち主は、メール送信を許可するサーバのIPアドレスを、DNSに登録しておきます。受信側は、届いたメールの送信元サーバが、このリストに含まれるかを確認します。
- 2
DKIM
(DomainKeys Identified Mail) 送信側は、メールに電子署名を付けます。受信側は、DNSに公開された鍵で署名を検証します。これで、途中でメールの内容が改ざんされていないかを確認できます。
- 3
DMARC
(Domain-based Message Authentication, Reporting, and Conformance) SPFとDKIMの検証結果に基づき、失敗したメールをどう扱うかを、ドメインの持ち主が指定できる仕組みです。扱い方は、受信する・迷惑メール扱いにする・拒否するの中から指定します。
Webメールとの関係
GmailやYahoo!メールのようなWebメールは、ブラウザから使うMUAです。ブラウザとWebメールサーバの間は、HTTPSで通信します。他のドメイン宛てに配送する部分では、ここまで説明したMTA間のSMTPをそのまま使います。ポートは25番です。
IMAPは、ブラウザではなくメールソフトから、同じメールボックスにアクセスしたい場合に使うプロトコルです。Webメールだけを使っている間は、利用者がIMAPを意識することはありません。
練習問題(全5問)
正解:送信者側の
送信者の
正解:DNSに
送信側の
正解:POP3は
POP3
正解:メールを
メールアドレスは
正解:MIME
SMTPは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
