メールの仕組み:RFC 5321とSMTPプロトコルの徹底解説
メールの「送信」ボタンを押すたびに、洗練されたプロトコルのやり取りが始まります。このプロセスの中心にあるのが SMTP (Simple Mail Transfer Protocol) です。数十年にわたり多くの拡張機能が追加されてきましたが、RFC 5321 は今もなお、メールがサーバー間をどのように移動するかを定義する核心的な仕様です。
RFC 5321 (SMTP) とは?
2008年に公開されたRFC 5321は、現代のインターネット慣行を反映するために元のSMTP仕様を更新したものです。これは、MTA (Mail Transfer Agent) がメールを送信および受信するために使用するプロトコルを定義しています。
SMTPを以下のものと区別することが重要です:
- IMAP/POP3: サーバーからクライアントへメールを 取得 するために使用されます。
- RFC 5322: メールの 形式 (To, From, Subject などのヘッダーと本文) を定義します。RFC 5321は エンベロープ(封筒) と 転送 に関するものです。
SMTPの核心原理
1. クライアント・サーバーモデル
SMTPはリクエスト・レスポンスモデルで動作します。クライアント(送信側サーバー)は、サーバー(受信側サーバー)に対して、ポート25(標準)、587(サブミッション)、または465(SMTPS)でTCP接続を開きます。
2. SMTPトランザクション
典型的なSMTPセッションには、いくつかのコマンドが含まれます:
HELO/EHLO: クライアントが自身を識別します。MAIL FROM: 送信者のアドレスを指定します(エンベロープFrom)。RCPT TO: 受信者のアドレスを指定します(エンベロープTo)。DATA: 実際のメール内容(RFC 5322ヘッダーと本文)を送信します。QUIT: 接続を終了します。
3. 信頼性とキューイング
SMTPは堅牢に設計されています。受信側のサーバーがダウンしている場合、送信側サーバーはメッセージをキュー(待ち行列)に入れ、一定の間隔で再試行します(通常は数日間)。最終的に送信できない場合は、「バウンス(不達)」メッセージを返します。
実践的な活用シーン
メールの配送トラブルシューティング
SMTPコード(250 OK、421 Service not available、550 No such user など)を理解することは、メールが届かなかった原因をデバッグするために不可欠です。
メールサーバーの設定
PostfixやEximのセットアップ、あるいはSendGridのようなサービスを利用する場合でも、SMTPを操作することになります。「エンベロープ」と「メッセージヘッダー」の違いを知ることは、SPF、DKIM、DMARCを正しく設定するのに役立ちます。
自動通知
パスワードリセットや領収書などのトランザクションメールを送信するアプリケーションは、SMTP、またはSMTPをラップしたAPIを使用して確実に配信を行います。
データ転送における SMTP と HTTP の比較
どちらもアプリケーション層のプロトコルですが、目的が異なります:
| 特徴 | SMTP | HTTP |
|---|---|---|
| 主な用途 | プッシュ(メール送信) | プル(Webコンテンツ取得) |
| 接続 | トランザクション中維持 | 多くの場合短寿命(ステートレス) |
| バイナリデータ | エンコードが必要 (Base64) | ネイティブ (Multipart/form-data) |
| 信頼性 | キューイング/再試行を内蔵 | アプリケーション側で制御 |
よくある質問 FAQ
Q: SMTPは安全ですか?
A: 元のSMTPは平文でした。現在では、STARTTLS を使用して平文接続を暗号化接続 (TLS) にアップグレードするか、最初から暗号化を提供する SMTPS (SMTP over TLS) が使われます。
Q: 「エンベロープFrom」と「ヘッダーFrom」の違いは何ですか?
A: 「エンベロープFrom」(RFC 5321) は、サーバーがルーティングやバウンスメールのために使用します。「ヘッダーFrom」(RFC 5322) は、ユーザーがメールクライアントで目にするものです。これらは同じである必要はありません!
Q: なぜポート25ではなく587を使うのですか?
A: ポート25は主にサーバー間のリレーに使用されます。ポート587は、メールクライアントからサーバーへの「メッセージサブミッション(投稿)」の標準であり、通常は認証が必要です。
関連ツール
- Base64 エンコード/デコード - メールの添付ファイルや一部のヘッダーはBase64でエンコードされます。
- JSON 格式化 - APIベースのメールサービスのデバッグに。
- URL 编解码 -
mailto:リンクの作成に重要。