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 コマンドを発行すると、標準コマンドが一覧表示されます。
次の表に、Exchange 拡張 SMTP サービスがサポートする 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 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 と似ています。
|
X-LINK2STATE |
SMTP サービスにリンク状態通知のサポートを追加します。ルーティング グループ内またはルーティング グループ間のリンク状態情報の通知に使用するリンク状態アルゴリズムの詳細については、「メッセージ ルーティングのアーキテクチャ」を参照してください。 |
![]() |
---|
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 プロトコル イベントの目的をまとめたものです。
イベント | コメント |
---|---|
OnInboundCommand |
SMTP プロトコル サービスが SMTP コマンドを受信するときに発生します。このイベントにより、イベント シンクは応答の機会を得ます。 |
OnServerResponse |
SMTP サービスが、以前に送信された SMTP コマンドに対する SMTP 応答を 受信するときに発生します。 |
OnSessionBegin |
EHLO コマンドが送信される前に発生します。 |
OnMessageStart |
MAIL FROM コマンドが送信される前に発生します。 |
OnPerRecipient |
RCPT TO コマンドが送信される前に発生します。 |
OnBeforeData |
DATA プロトコル コマンドが送信される前に発生します。 |
OnSessionEnd |
QUIT コマンドが送信される前に発生します。 |
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 サーバーについてのページ を参照してください (このサイトは英語の場合があります)。