← RFC Reference

RFC 5321 – シンプルメール転送プロトコル

Current Standard Core SMTP & Message Format Obsoletes RFC 2821 Published March 2026
ELI5: SMTPはインターネットの郵便サービスです。メールを送信すると、メールサーバーが受取人のメールサーバーとの会話を開始し、自分を紹介し、手紙が誰からであり誰に行くのかを言い、その手紙を渡します。受信サーバーはそれを受け入れるか、「後でもう一度試してください」と言うか、完全に拒否します。あなたが送ったすべてのメールはSMTPを介して送信されました。

このRFCが存在する理由

SMTPはメールを動かす最も古く、最も基本的なプロトコルです。その系統は1982年にジョン・ポステルによって発表されたRFC 821にまでさかのぼります。2008年に発表されたRFC 5321は現在の正式な仕様です。数十年にわたる拡張、明確化、運用経験を単一の権威あるドキュメントに統合しました。

RFC 821からRFC 5321への主な進化は以下の通りです。ESMTP(拡張SMTP)の形式化、リレーと送信動作の明確化、DNS MXルックアップをめぐるより厳しい要件、アドレスリテラルとIPv6の更新されたルール、バウンス処理の要件。このRFCは他のすべてのメールRFCが構築される基礎です。

仕組み

SMTPトランザクションは、TCP接続(従来ポート25)を介する2つのサーバー間の構造化された会話です。プロトコルはテキストベースで行指向です。すべてのコマンドと応答は人間が読める可能な ASCII です。

SMTPモデル

SMTPは3つのロールを定義します。

クライアントが接続してEHLOで自身を識別し、エンベロープ送信者(MAIL FROM)、1つ以上の受信者(RCPT TO)を指定し、メッセージデータ(DATA)を送信します。サーバーは各コマンドに3桁のステータスコードで応答します。

SMTPコマンド

コマンド 目的
EHLO クライアントを識別して拡張機能をリクエスト。古いHELOに置き換わりました。
MAIL FROM:<addr> エンベロープ送信者を指定(バウンスのための返信パス)。
RCPT TO:<addr> 受信者を指定。受信者ごとに1回発行されます。
DATA メッセージコンテンツ送信を開始。.だけの行で終了します。
RSET 現在のトランザクションを中止して状態をリセット。
VRFY ユーザーが存在するかを確認(悪用のため、ほとんどサポートされていません)。
EXPN メーリングリストを展開(ほとんどサポートされていません)。
NOOP 操作なし。接続をキープアライブします。
QUIT 接続を閉じます。

返信コード

すべてのサーバー応答は3桁のコードで始まります。最初の桁がクライアントに何が起きたかを伝えます。

2番目の桁がカテゴリを絞ります。x0x = 構文、x1x = 情報、x2x = 接続、x5x = メールシステム。RFC 34635.1.1(不正な宛先メールボックス)のような拡張ステータスコードでさらに拡張しています。

主要な技術詳細

エンベロープとヘッダー

SMTP における重要な区別は、エンベロープメッセージヘッダーの間です。エンベロープ(MAIL FROMRCPT TO)はルーティングを制御し、サーバーにメッセージをどこに配信するかを指示します。メッセージヘッダー(From:To:Subject:)はDATAの間に送信されるメッセージ本体の一部であり、受信者が見るものです。これらは異なる場合があり、メーリングリスト、BCC、転送などの場合に正当に異なります。

MXルックアッププロセス

クライアントがuser@example.comに配信する必要がある場合、example.comのMXレコードをDNSに照会します。RFC 5321で定義されたプロセス。

  1. ドメインのMXレコードを検索。優先度でソート(低い番号 = より高い優先度)。
  2. MXレコードが存在しない場合、ドメイン自体のAまたはAAAAレコードにフォールバック。
  3. MXレコードが.RFC 7505に基づく「null MX」)を指している場合、ドメインはメールを受け入れません。
  4. 優先度順に各MXホストを試す。サーバーが4xxエラーを返した場合、次のホストを試す。

行長とデータ透明度

SMTPでは、メッセージ内の行は998文字(CRLFを除く)より長くない必要があり、推奨される制限は78文字です。データ終了マーカーは.だけを含む行です。メッセージ本体の行がピリオドで始まる場合、クライアントはそれの前に余分なピリオドを付けることで「ドット詰め」を行い、サーバーはそれを削除する必要があります。

タイムアウト

RFC 5321は、クライアントが従う必要のある最小タイムアウトを指定しています。

これらの余裕のあるタイムアウトは、受信サーバーが最終ドットに応答する前に高価なチェック(スパム フィルタリング、ウイルススキャン)を実行する可能性があるため存在します。

SMTP例

メッセージを配信する完全なSMTPトランザクション。

# クライアントが受信者のMXサーバーのポート25に接続 S: 220 mx.example.com ESMTP ready C: EHLO sender.example.net S: 250-mx.example.com Hello sender.example.net S: 250-SIZE 52428800 S: 250-8BITMIME S: 250-STARTTLS S: 250-ENHANCEDSTATUSCODES S: 250 PIPELINING # エンベロープ送信者(バウンスの返信パス) C: MAIL FROM:<alice@sender.example.net> S: 250 2.1.0 OK # エンベロープ受信者 C: RCPT TO:<bob@example.com> S: 250 2.1.5 OK # メッセージデータを開始 C: DATA S: 354 Start mail input; end with <CRLF>.<CRLF> C: From: Alice <alice@sender.example.net> C: To: Bob <bob@example.com> C: Subject: Meeting tomorrow C: Date: Wed, 11 Mar 2026 10:00:00 -0500 C: Message-ID: <abc123@sender.example.net> C: C: Hi Bob, are we still on for tomorrow? C: . S: 250 2.0.0 OK, message accepted for delivery C: QUIT S: 221 2.0.0 mx.example.com closing connection

一般的なミス

配信性への影響

RFC 5321準拠は、メールがインボックスに届くかどうかに直接影響します。

Related RFCs