← RFC Reference

RFC 1869 – SMTP サービス拡張(ESMTP)

Internet Standard Core SMTP & Message Format Published March 2026
ELI5: 元々のSMTPは基本的な英語しか話せない2人のようなものでした。ESMTPは「私はフランス語、ドイツ語、日本語も話せます。あなたは?」と言って会話を始めるようなものです。EHLOコマンドはHELOに取って代わり、メール交換を始める前に両者が共有している追加機能を発見できるようにします。認証、暗号化、サイズ制限など、すべての最新のSMTP機能はこのネゴシエーションメカニズムに依存しています。

このRFCが存在する理由

元々のSMTPプロトコル(RFC 821、1982年)には新機能を追加するメカニズムがありませんでした。クライアントがサーバーの対応内容を検出する方法もなく、サーバーが機能をアドバタイズする方法もありませんでした。拡張機能のたびに新しい互換性のないプロトコルバージョンが必要でした。

1995年に公開されたRFC 1869は、SMTP拡張機能の汎用フレームワークを定義することでこれを解決しました。HELOの代わりとなるEHLOコマンド(Extended HELLO)を導入しました。クライアントがEHLOを送信すると、サーバーはサポートしている拡張機能のリストで応答します。クライアントは両者が理解できる拡張機能を使用できます。

このフレームワークは非常に基本的なため、後にRFC 5321の基本SMTP仕様に直接組み込まれました。今日のほぼすべてのSMTPセッションはESMTPを使用しており、プレーンなHELOは事実上廃止されました。

仕組み

  1. クライアントが接続してサーバーのグリーティングバナーを受け取ります。
  2. クライアントがEHLO client.example.comを送信します(古いHELOの代わり)。
  3. サーバーが250で応答してからホスト名、続いて各行に1つの拡張機能キーワードで応答します。最後の行以外は250-(継続)を使用し、最後は250 (終了)を使用します。
  4. クライアントが拡張機能リストを検査し、サーバーがアドバタイズした機能のみを使用します。
  5. サーバーがEHLOを理解しない場合(今日では非常にまれ)、500エラーを返し、クライアントはHELOにフォールバックします。

SMTP例

典型的なESMTP機能ネゴシエーション:

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 S: 250-CHUNKING S: 250-SMTPUTF8 S: 250 AUTH PLAIN LOGIN # クライアントはこのサーバーが正確に何をサポートしているかを知ります: # SIZE — 最大メッセージサイズは50 MB # 8BITMIME — 8ビットコンテンツ転送エンコーディングが許可 # STARTTLS — TLS暗号化が利用可能 # ENHANCEDSTATUSCODES — RFC 3463ステータスコード # PIPELINING — コマンドをバッチ処理可能(RFC 2920) # CHUNKING — BDATコマンド利用可能(RFC 3030) # SMTPUTF8 — 国際化アドレス(RFC 6531) # AUTH — PLAINまたはLOGINによる認証

主要な技術的詳細

拡張機能レジストリ

ESMTP拡張機能はIANAに登録されています。各拡張機能はキーワード(例:STARTTLSAUTHPIPELINING)を定義し、オプションでパラメータを定義します。電子メール用の最も重要な拡張機能:

キーワード RFC 目的
SIZE RFC 1870 最大メッセージサイズを宣言
8BITMIME RFC 6152 メッセージ本文で8ビットコンテンツを許可
STARTTLS RFC 3207 接続をTLS暗号化にアップグレード
AUTH RFC 4954 SMTP認証
PIPELINING RFC 2920 待機なしで複数のコマンドをバッチ処理
CHUNKING RFC 3030 BDATを使用したバイナリデータ転送
SMTPUTF8 RFC 6531 国際化電子メールアドレス
DSN RFC 3461 配信状態通知リクエスト
ENHANCEDSTATUSCODES RFC 3463 応答での詳細なステータスコード
REQUIRETLS RFC 8689 このメッセージでTLSを要求

EHLO対HELO

HELOは1982年からの元々のSMTPグリーティングです。機能検出を提供しません。EHLOは厳密なスーパーセット:同じグリーティング機能を実行しますが、機能リストもトリガーします。サーバーは両方をサポートする必要がありますが、クライアントは常に最初にEHLOを使用し、EHLOが拒否された場合にのみHELOにフォールバックすべきです。

状態変更後の再EHLO

機能リストはセッション中に変わる可能性があります。STARTTLSハンドシェイク後、クライアントは新しいEHLOを送信する必要があります。サーバーは暗号化接続を通じて異なる拡張機能をアドバタイズする可能性があるためです(例えば、AUTHはしばしばTLSの後にのみ利用可能)。RSETの後、機能リストは有効なままです。

拡張機能パラメータ

一部の拡張機能はEHLO応答行にパラメータを含めます。例えば、SIZE 52428800は50 MB制限を宣言し、AUTH PLAIN LOGINは利用可能な認証メカニズムをリストアップします。拡張機能はMAIL FROMおよびRCPT TOコマンドにパラメータを追加することもできます。例えばMAIL FROM:<user@example.com> SIZE=1048576のように。

一般的なミス

配信可能性への影響

  • ESMTPは最新の電子メールに必須です。EHLOなしでは、STARTTLS、AUTH、PIPELINING、その他の拡張機能を使用することはできません。HELOのみをサポートするクライアントはほとんどのメールサーバーによって疑わしいと見なされます。
  • 拡張機能サポートは正当性を示します。標準拡張機能(ENHANCEDSTATUSCODES、PIPELINING、SIZE)をアドバタイズして正しく実装するサーバーは、よく設定されているとみなされます。拡張機能サポートの欠落または破損はスパムフィルタでのネガティブスコアリングをトリガーできます。
  • EHLOホスト名は評判に重要です。
  • サイズ宣言は無駄な帯域幅を防ぎます。

Related RFCs