XCLIENT コマンドは次の問題を目標にしています:
アクセス制御のテスト。SMTP サーバアクセスルールは、決定が リモートクライアントによってのみ引き起こされる場合は確認するのが 困難です。アクセスルールのテストを容易にするために、認証された SMTP クライアントテストプログラムには、SMTP セッションで流される SMTP クライアントのホスト名、ネットワークアドレス、およびその他の クライアント情報といった、SMTP サーバが持つ情報を上書きする機能が 必要です。
メールを上流メールサーバからダウンロードして SMTP でローカルの MTA に入れるクライアントソフトウェア。ローカル MTA の SMTP サーバ アクセスルールの利点を得るため、クライアントソフトウェアはリモート クライアント名やクライアントアドレスなどの SMTP サーバが持つ情報を 上書きする機能が必要です。このような情報はたいてい上流サーバの Received: メッセージヘッダから抜き出せます。
フィルタ後のアクセス制御とロギング。インターネット-> フィルタ->MTA 形式のコンテンツフィルタアプリケーションでは、 メール中継およびその他のアクセス制御を MTA に委譲できれば、フィルタを 簡単にすることが可能です。これは特にフィルタが SMTP コマンドの透過型 プロキシとして働く場合に便利です。これには SMTP クライアントホスト 名やネットワークアドレス、その他の MTA が持つ情報をフィルタが 上書きできる必要があります。
クライアント-サーバ間の対話例はこのドキュメントの最後にあります。
SMTP サーバの EHLO 応答における、この拡張に関するキーワードが XCLIENT です。続いて XCLIENT 実装がサポートしている属性の名前が続きます。
XCLIENT コマンドはメール配送処理の途中 (つまり MAIL とドットの間) 以外のどこでも送ることができます。サーバが ESMTP コマンドパイプライニングを サポートしていれば、XCLIENT コマンドをパイプラインさせることもできます。
XCLIENT 要求の文法を以下に示します。大文字と引用符の付いた文字列は 終端記号 (terminals) を、小文字の文字列はメタ終端記号 (meta terminals) を、SP は空白を表します。コマンドや属性名は大文字で書かれていますが、 実際には小文字でも構いません。
xclient-command = XCLIENT 1*( SP attribute-name"="attribute-value )
attribute-name = ( NAME | ADDR | PROTO | HELO )
NAME 属性には (SMTP クライアントアドレスではなく) SMTP クライアントのホスト名を指定し、ホスト名検索が恒久的エラーで失敗した 場合は [UNAVALABLE]、検索エラーの条件が一時的であれば [TEMPUNAVAIL] とします。
ADDR 属性は SMTP クライアントの数値による IPv4 ネットワーク アドレス、IPV6: を前に付けた IPv6 アドレス、もしくはアドレス情報が ない場合には [UNAVALABLE] を指定します。アドレス情報は [] で 囲みません。
PROTO 属性には SMTP または ESMTP のどちらかを指定します。
HELO 属性には SMTP HELO パラメータ値、もしくは情報がない 場合には [UNAVAILABLE] という値を指定します。
注意1: NAME および HELO 属性で文法的に有効なのは最大 255 文字です。 クライアントは SMTP コマンドの制限である 512 文字を超える XCLIENT コマンドを 送ってはいけません。制限の超過を避けるため、クライアントは複数の XCLIENT コマンドを使ってください。
注意2: [UNAVAILABLE]、[TEMPUNAVAIL] および IPV6: は大文字でも小文字でも、 混在したものでも指定できます。
XCLIENT サーバ応答コードは以下の通りです:
コード 意味 250 成功 501 コマンドパラメータ文法の間違い 503 メール処理実行中 421 続行不能、切断中
最初の例では、XCLIENT コマンドを通して SMTP セッション情報を全て 渡すことで、クライアントはメール生成システムのふりをします。クライアントに よって送られる情報は太字で示されます。
220 server.example.com ESMTP Postfix EHLO client.example.com 250-server.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XCLIENT NAME ADDR PROTO HELO 250 8BITMIME XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2 PROTO=ESMTP 250 Ok XCLIENT HELO=spike.porcupine.org 250 Ok MAIL FROM:<wietse@porcupine.org> 250 Ok RCPT TO:<user@example.com> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> . . .message content. . . . 250 Ok: queued as 763402AAE6 QUIT 221 Bye
2つ目の例では、EHLO または HELO コマンドの前に XCLIENT コマンドを 送ることで、クライアントはメール生成システムのふりをします。これは真似の 現実性を上げますが、サーバがサポートしている XCLIENT オプションを あらかじめ知っておく必要があります。
220 server.example.com ESMTP Postfix XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2 250 Ok HELO spike.porcupine.org 250 server.example.com MAIL FROM:<wietse@porcupine.org> 250 Ok RCPT TO:<user@example.com> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> . . .message content. . . . 250 Ok: queued as CF1E52AAE7 QUIT 221 Bye
XCLIENT コマンドは監査証跡や SMTP クライアントアクセス権限を変えて しまいます。このコマンドの使用は認証された SMTP クライアントに制限 しなければいけません。しかし、XCLIENT コマンドはそれ自身のアクセス制限 メカニズムを上書きすべきではありません。
XCLIENT 属性は SMTP セッションが終わるまで持続します。1つのセッションが 異なる SMTP クライアントを代表してメールを配送するのに使われるのであれば、 XCLIENT 属性はそれぞれの MAIL FROM コマンドの前に適切にリセットされる必要が あります。