SMTP プロトコル拡張機能

 

SMTP サービスにおける COM イベントのディスパッチャは、アドバンスド キュー エンジンだけではありません。SMTP プロトコル エンジンも COM イベント (特に SMTP プロトコル イベント) の主要なディスパッチャです。コア SMTP プロトコル エンジンは、標準の SMTP 通信すべてを担当し、標準の SMTP サービス拡張機能、つまり、RFC 821 および RFC 1869 で定義されている ESMTP (Extended Simple Mail Transfer Protocol) 規格のほとんどを処理します。プロトコル イベントを使用すると、SMTP プロトコルを変更して新しい ESMTP コマンドを追加したり、既存のコマンドの動作を変更することができます。Exchange Server 2003 は、標準の SMTP よりも効率的に組織の他の Exchange サーバーと通信するために、これらのプロトコル イベントを使用して Exchange 固有の拡張 SMTP コマンドを実装しています。

telnet を使用して SMTP 仮想サーバーの TCP ポートに接続すると、Exchange Server 2003 の拡張 SMTP コマンドが読み込まれていることを確認できます。次の図に示すように、EHLO コマンドを発行して ESMTP 接続を開始すると、サーバーの応答によって、SMTP 仮想サーバーがサポートする機能が示されます。HELP コマンドを発行すると、標準コマンドが一覧表示されます。

7fee5659-17ca-4ed0-9e01-97592772cb9e

次の表に、Exchange 拡張 SMTP サービスがサポートする SMTP 機能を示します。

Exchange Server 2003 でサポートされている SMTP 機能

SMTP サーバー応答 コメント

8BITMIME

ローカル SMTP 仮想サーバーが 8 ビット MIME (Multipurpose Internet Mail Extensions) メッセージをサポートしていることを示します。

AUTH、AUTH GSSAPI NTLM LOGIN、および AUTH=LOGIN

ローカル SMTP 仮想サーバーが SMTP 認証サービスの拡張機能をサポートしていることを通知します。AUTH キーワードの後の追加情報は、サポートされている認証メカニズムを示します。

BDAT、CHUNKING

DATA コマンドの代替コマンドであり、2 つの引数を必要とします。SMTP 仮想サーバーが CHUNKING を指定した EHLO キーワードに応答する場合は、SMTP サーバーが BDAT コマンドをサポートしており、チャンクでメッセージを受け付けることを示しています。

最初の引数がバイナリ データ パケットの長さを示すため、SMTP ホストは、データの最後まで連続してスキャンする必要はありません。受信側サーバーはメッセージのバイト数をカウントし、メッセージ サイズが BDAT コマンドで送信された値と等しい場合、サーバーはすべてのメッセージ データを受信したと見なします。2 番目の引数は、データ パケットが現在の転送の最後のパケットかどうかを示します。2 番目の引数は省略可能です。

BINARYMIME

MAIL コマンドで "BINARYMIME" という値の BODY パラメータを使用することによって、SMTP 仮想サーバーがトランスポート エンコードなしでバイナリ データを含むメッセージを受け付けることを示します。SMTP サーバーは、BINARYMIME という BODY パラメータを指定された MAIL コマンドを受け取ると、BDAT コマンドを使用して渡される各オクテットのすべてのビットを保存することに同意します。BINARYMIME SMTP 拡張は、CHUNKING を指定した場合にのみ使用できます。

DATA

メッセージ コンテンツの転送を開始するためにリモート ホストによって送信されます。

DSN

RFC (Request for Comments) 1891 で定義されている配信状態通知を有効にする ESMTP コマンド。

EHLO

ESMTP セッションの開始を通知するためにクライアントによって送信されます。サーバーは、EHLO に対する応答で ESMTP コマンドのサポートを示すことができます (図 6.14)。

ENHANCEDSTATUSCODES

SMTP サーバーが拡張エラーの状態コードを提供することを示します。すべての SMTP 状態応答のテキスト部分の前には、初期応答および HELO または EHLO に対するすべての応答を除き、RFC 1893 で定義されている状態コードが置かれます。

ETRN

ETRN コマンドで指定されたドメインのキューにローカル仮想サーバーが保持しているすべての電子メール メッセージを送信するように要求するために、SMTP サーバーによって送信されます。

HELO

通常はドメイン名によってクライアント自身を識別し、標準の SMTP セッションの開始を通知するために、クライアントによって送信されます。

HELP

ESMTP セッションではない標準の SMTP セッションで SMTP 仮想サーバーによってサポートされる SMTP コマンドの一覧を返します。

MAIL

メッセージの送信者を示すことによってメッセージ転送の開始を示します。MAIL FROM の形式で使用されます。

PIPELINING

各コマンドの後で応答を待たずに複数のコマンドを送信する機能を提供します。

QUIT

標準の SMTP セッションまたは拡張 SMTP セッションの終了を通知します。

RCPT

メッセージ受信者を示します。RCPT TO の形式で使用されます。

RSET

メッセージ トランザクション全体を破棄し、バッファをリセットします。

SIZE

SMTP 仮想サーバーがサポートしている最大メッセージ サイズを指示するためのメカニズムを提供します。正常なサーバーは、サイズの拡張情報を提供し、受け入れ可能なメッセージの最大サイズを指定する必要があります。リモート ホストは、サーバーが指定した最大サイズを超えるメッセージを送信できません。

STARTTLS

SMTP サーバーが Secure SMTP over TLS (Transport Layer Security) をサポートしていることを示します。Secure SMTP over TLS の SMTP サービス拡張機能は、RFC 2487 で定義されています。

TURN

リモート ホストとローカル ホストが役割を切り替えて、新たに接続を確立せずに逆方向にメールを送信できるようにします。

VRFY

メールボックスをメッセージ配信に利用できるか確認します。たとえば、VRFY TED の場合、Ted のメールボックスがローカル サーバー上に存在するか確認します。既定では、このコマンドは Exchange 2003 で利用できますが、ユーザーを確認しません。サーバーはリモート ホストに、ユーザーを確認できなくてもメッセージは受け付けられることを通知します。サーバーの応答は、252 2.1.5 Cannot VRFY user, but will take message for <Ted@TailspinToys.com> という形式になります。

XEXCH50

Exchange Server 2003 サーバー間の通信中に MDBEF (Message Database Encoding Format) 形式で拡張メッセージ トランスポート エンベロープのプロパティを送信する機能を提供します。

X-EXPS GSSAPI NTLM LOGIN、X-EXPS=LOGIN

X-EXPS は Exchange 固有のコマンドです。このコマンドは、認証のために Exchange Server 2003 や Exchange 2000 Server を実行しているサーバーで使用できる次のようなメソッドを指定するので、AUTH と似ています。

  • GSSAPI   GSSAPI (Generic Security Services Application Programming Interface) を表し、Kerberos による認証を有効にするメソッド。
  • NTLM   Windows NT と LAN Manager を表し、Windows NT チャレンジ/レスポンス プロトコルを使用した認証を有効にするメソッド。
  • LOGIN   AUTH LOGIN を表し、Base 64 でエンコードされたユーザー名とパスワードを使用するクリア テキスト認証のメソッド。

X-LINK2STATE

SMTP サービスにリンク状態通知のサポートを追加します。ルーティング グループ内またはルーティング グループ間のリンク状態情報の通知に使用するリンク状態アルゴリズムの詳細については、「メッセージ ルーティングのアーキテクチャ」を参照してください。

note注 :
Exchange 固有の SMTP コマンドはすべて "X-" (引用符なし) で始まります。これらのコマンドが、使用中の SMTP 仮想サーバーの EHLO 応答で表示されない場合、そのサーバーでは、Windows Server 2003 の基本バージョンの SMTP サービスを実行しています。この場合には、Exchange Server 2003 とすべてのサービス パックを再インストールする必要があります。

プロトコル イベントのカテゴリ

SMTP プロトコル エンジンは、ホスト間通信を制御するためにプロトコル イベントをトリガします。SMTP でのホスト間通信では、次の 3 種類の主要なイベントが発生する可能性があります。

  • SMTP サービスが SMTP コマンドを受信する   このイベントは、リモートの SMTP ホストまたはクライアントがローカル SMTP サービスに接続して HELO または EHLO コマンドを送信することによってセッションを確立するときに発生します。このカテゴリのイベントは、受信接続の SMTP プロトコル OnInboundCommand イベントです。
  • SMTP サービスが SMTP 応答を受信する   このイベントは、ローカル SMTP サービスが送信 SMTP コマンドに対する応答をリモートの SMTP ホストまたはクライアントから受信するときに発生します。このカテゴリのイベントは、送信接続の SMTP プロトコル OnServerResponse イベントです。
  • SMTP サービスが SMTP コマンドを送信する   このイベントは、ローカル SMTP サービスがリモート SMTP ホストに接続してメッセージを転送するためにセッションを確立するときに発生します。このカテゴリのイベントは、送信接続の SMTP プロトコル OnSessionBegin、OnMessageStart、OnPerRecipient、OnBeforeData、および OnSessionEnd の各イベントです。

次の表は、各 SMTP プロトコル イベントの目的をまとめたものです。

SMTP サービスにおけるプロトコル イベント

イベント コメント

OnInboundCommand

SMTP プロトコル サービスが SMTP コマンドを受信するときに発生します。このイベントにより、イベント シンクは応答の機会を得ます。

OnServerResponse

SMTP サービスが、以前に送信された SMTP コマンドに対する SMTP 応答を
受信するときに発生します。

OnSessionBegin

EHLO コマンドが送信される前に発生します。

OnMessageStart

MAIL FROM コマンドが送信される前に発生します。

OnPerRecipient

RCPT TO コマンドが送信される前に発生します。

OnBeforeData

DATA プロトコル コマンドが送信される前に発生します。

OnSessionEnd

QUIT コマンドが送信される前に発生します。

Exchange 固有の SMTP プロトコル拡張機能

Exchange Server 2003 セットアップ プログラムは、次の SMTP プロトコル機能に対して Exchange 固有の SMTP プロトコル拡張機能を登録します。

  • XEXCH50   この機能は、Exchange Server を実行している 2 台のサーバー間の完全な通信をサポートするために、9 つのイベント シンクを使用して実装されています。次の表に、各プロトコル イベントに対応する XEXCH50 イベント シンクを示します。XEXCH50 シンクはすべて peexch50.dll に実装されています。このファイルは、\Program Files\Exchsrvr\bin ディレクトリにあります。

    XEXCH50 コマンドのプロトコル拡張機能

    イベント シンク プロトコル イベント コメント

    Exchange SMTP プロトコル XEXCH50 データ送信前シンク

    OnBeforeData

    DATA プロトコル コマンドが送信されようとしていることを XEXCH50 シンクに通知します。XEXCH50 シンクは、XEXCH50 通信を開始するのではなく XEXCH50 コマンドを送信するように SMTP サービスに要求する機会を得ます。

    Exchange SMTP プロトコル XEXCH50 受信 EHLO シンク

    OnInboundCommand

    EHLO コマンドを受信したことを XEXCH50 シンクに通知します。

    Exchange SMTP プロトコル XEXCH50 受信 XEXCH50 シンク

    OnInboundCommand

    XEXCH50 による対話を開始するために XEXCH50 コマンドを実装します。

    Exchange SMTP プロトコル XEXCH50 受信 MAIL シンク

    OnInboundCommand

    XEXCH50 による対話で MAIL コマンドを実装します。

    Exchange SMTP プロトコル XEXCH50 受信 RCPT シンク

    OnInboundCommand

    ローカル SMTP 仮想サーバーが、受信 XEXCH50 通信で受信者情報を受信できるようにします。

    Exchange SMTP プロトコル XEXCH50 受信者単位のイベント シンク

    OnPerRecipient

    ローカル SMTP 仮想サーバーが、送信 XEXCH50 通信で受信者情報を送信できるようにします。

    Exchange SMTP プロトコル XEXCH50 EHLO 応答シンク

    OnServerResponse

    EHLO コマンドがリモート ホストに送信された後にローカル SMTP 仮想サーバーが応答を受信できるようにします。リモート ホストからの応答は、XEXCH50 通信のサポートを示す場合があります。接続元ホストに返される、サポートするコマンドの一覧に XEXCH50 が追加されます (図 6.14)。

    Exchange SMTP プロトコル XEXCH50 応答シンク

    OnServerResponse

    ローカル SMTP 仮想サーバーが、以前に発行された送信 XEXCH50 コマンドに対する応答を受信できるようにします。たとえば、ローカル SMTP サービスが先に認証せずに XEXCH50 コマンドを発行した場合、リモート サーバーは、"504 Need to authenticate first" と応答します。

    Exchange SMTP プロトコル XEXCH50 RCPT 応答シンク

    OnServerResponse

    ローカル SMTP 仮想サーバーが、送信 RCPT コマンドで示された受信者ごとにリモート Exchange サーバーから状態情報を受信できるようにします。受信者のアドレスが正しい形式ではないか、サーバーが中継できない場合があります。受信者情報が正しい場合、リモート SMTP 仮想サーバーは、ローカル SMTP サービスにアドレスを状態情報と共に返します (250 2.1.5 administrator@tailspintoys.com など)。

  • X-LINK2STATE   この機能は、5 つのイベント シンクを使用して実装されています。ただし、次の表に示すように、2 つの別個のイベントに 1 つのイベント シンクが使用されます。すべての X-LINK2STATE イベント シンクは、\Program Files\Exchsrvr\bin ディレクトリの Xlsasink.dll に実装されています。

    X-LINK2STATE コマンドのプロトコル拡張機能

    イベント シンク プロトコル イベント コメント

    XLSA 用の EHLO 受信コマンド ハンドラ シンク

    OnInboundCommand

    受信 EHLO コマンドが受信されたことを X-LINK2STATE イベント シンクに通知します。

    X-LSA 受信コマンド ハンドラ シンク

    OnInboundCommand

    受信 X-LINK2STATE コマンドが受信されたことを X-LINK2STATE イベント シンクに通知します。

    X-LSA シンク

    OnMessageStart、OnSessionEnd

    送信 X-LINK2STATE 通信の開始 (MAIL コマンド) と終了 (QUIT コマンド) を通知します。送信されている Orginfo パケットの最終受信者はリモート SMTP 仮想サーバーなので、送信 RCPT コマンドで受信者を指定する必要はありません。このイベント シンクは、リンク状態情報を送信します。

    X-LSA 応答ハンドラ シンク

    OnServerResponse

    受信 X-LINK2STATE コマンドに対して、リンク状態情報を送信する方法に関する情報で応答します。応答は、200 LAST CHUNK={00000029} MULTI (5) ({00000010} DONE_RESPONSE) のようになります。この例は、この SMTP 仮想サーバーで送信されるデータの最後のチャンクを示しています。

    X-LSA 用の EHLO 応答ハンドラ シンク

    OnServerResponse

    サーバー応答において X-LINK2STATE コマンドを一覧表示することで、受信 EHLO コマンドに応答します。

  • X-EXPS   この機能は、次の表に示すように、5 つのイベント シンクを使用して実装されています。すべてのプロトコル セキュリティ拡張機能は、\Program Files\Exchsrvr\bin ディレクトリの Exps.dll に実装されています。

    X-EXPS プロトコル セキュリティ拡張機能

    イベント シンク プロトコル イベント コメント

    Exchange SMTP プロトコル セキュリティ EXPS-EOD シンク

    OnInboundCommand

    データ転送の終了 (_EOD) を通知します。

    Exchange SMTP プロトコル セキュリティ EXPS-Aux シンク

    OnInboundCommand

    受信 AUTH コマンドを通知します。

    Exchange SMTP プロトコル セキュリティ EHLO シンク

    OnInboundCommand、OnServerResponse

    受信 EHLO コマンドを通知し、サーバー応答において X-EXPS コマンドを一覧表示することで EHLO に応答します。

    Exchange SMTP プロトコル セキュリティ MAIL シンク

    OnInboundCommand、OnServerResponse、OnMessageStart

    データ転送の開始を示します。このイベント シンクは、関連するすべての MAIL コマンド シナリオに対して実装されます。このイベント シンクは、受信 MAIL コマンドの通知、受信 MAIL コマンドへの応答、および送信 MAIL コマンドの発行を行うイベントを処理します。

    Exchange SMTP プロトコル セキュリティ EXPS シンク

    OnInboundCommand、OnServerResponse、OnSessionStart

    X-EXPS セッションの開始を示します。このイベント シンクは、関連するすべての X-EXPS コマンド シナリオのために実装されます。このイベント シンクは、受信 X-EXPS コマンドの通知、受信 X-EXPS コマンドへの応答、および送信 X-EXPS コマンドの発行を行うイベントを処理します。

  • スパム制御   この機能は、次の表に示すように、受信 SMTP 接続での送受信者情報を処理する 3 つのイベント シンクを使用して実装されています。スパム制御イベント シンクは、\Program Files\Exchsrvr\bin ディレクトリの Turflist.dll に実装されています。

    スパム制御 SMTP 拡張機能

    イベント シンク プロトコル イベント コメント

    RCPT 受信コマンド ハンドラ シンク

    OnInboundCommand

    確認が必要な受信者アドレスが指定されている受信 RCPT コマンドを通知します。

    TURF 用の MAIL 受信コマンド ハンドラ シンク

    OnInboundCommand

    確認が必要な送信者アドレスが指定されている受信 MAIL コマンドを通知します。

    EOD 受信コマンド ハンドラ シンク

    OnInboundCommand

    受信 _EOD コマンドを通知します。

詳細情報

SMTP の詳細については、SMTP サーバーについてのページ を参照してください (このサイトは英語の場合があります)。