XFORWARD コマンドは次の問題を目標にしています:
SMTP ベースのコンテンツフィルタ後のロギング。インターネット ->MTA1->フィルタ->MTA2 形式でコンテンツフィルタ アプリケーションを配置すると、クライアントやメッセージを特定する 情報のロギングは MTA1 がメールをコンテンツフィルタに渡した時点で 変わってしまいます。MTA2 ロギングの解釈を簡単にするために、MTA1 が コンテンツフィルタを通してリモートクライアントやメッセージを特定する 情報を MTA2 に渡してメールハンドリング処理の一部として情報をログに 記録できるようになれば役に立つでしょう。
この拡張は別のコマンドとして実装されており、クライアントやメッセージの 属性を追加して送るのに使えます。これは MAIL FROM コマンドを使った追加 パラメータを渡す形では実装されていません。そうしてしまうと、AUTH などの 他の拡張をサポートするためにすでに必要となっている空間では足りず、600文字 以上をさらに MAIL FROM コマンド長制限に追加する必要が出てしまいます。
クライアント-サーバ間の対話例はこのドキュメントの最後にあります。
SMTP サーバの EHLO 応答における、この拡張に関するキーワードが XFORWARD です。続いて XFORWARD 実装がサポートしている属性の名前が 続きます。
XFORWARD コマンドはメール配送処理の途中 (つまり MAIL とドットの間) 以外のどこでも送ることができます。サーバが ESMTP コマンドパイプライニングを サポートしていれば、コマンドをパイプラインさせることもできます。
XFORWARD 要求の文法を以下に示します。大文字と引用符の付いた文字列は 終端記号 (terminals) を、小文字の文字列はメタ終端記号 (meta terminals) を、 SP は空白を表します。コマンドや属性名は大文字で書かれていますが、実際には 小文字でも構いません。
xforward-command = XFORWARD 1*( SP attribute-name"="attribute-value )
attribute-name = ( NAME | ADDR | PROTO | HELO | SOURCE )
NAME 属性には上流のホスト名、もしくは情報が得られない場合には [UNAVAILABLE] を指定します。ホスト名は非 DNS ホスト名かもしれません。
ADDR 属性には上流ネットワークアドレス、もしくは情報が 得られない場合には [UNAVAILABLE] を指定します。アドレス情報は [] で 囲みません。アドレスは非 IP アドレスかもしれません。
PROTO 属性には上流ホストから受け取るメールのメールプロトコルを 指定します。これは SMTP や最大64文字までの非 SMTP プロトコル名、 もしくは情報が得られない場合には [UNAVAILABLE] となります。
HELO 属性には上流ホストが通知するホスト名 (SMTP HELO コマンドで渡される必要はありません)、もしくは情報が得られない場合には [UNAVAILABLE] を指定します。ホスト名は非 DNS ホスト名かもしません。
上流ホストにとってローカルなソースからメッセージを受け取った場合 (例えば、メッセージが上流ホスト自身から生成された場合) はSOURCE属性には LOCAL を、その他すべてのメールには REMOTE を、そして情報が得られない場合は [UNAVAILABLE] を指定します。下流のMTAはローカルソースからのメールの ヘッダを書き換えたり修飾する機能を有効にし、それ以外のソースからの メールには無効にすると決めることができます。
注意1: 属性値は255文字よりも長くてはいけません (特定の属性はさらに 短くなければいけないものもあります)。またコントロール文字や非 ASCII 文字、空白、その他メッセージヘッダで特別な文字を含んでもいけません。 これを破る属性が将来できた際には、 RFC 1891 に書かれている xtext エンコードを使うべきです。
注意2: DNS ホスト名は最大 255 文字までです。XFORWARD クライアントの 実装は SMTP コマンドの制限である 512 文字を超えた XFORWARD コマンドを 送ってはいけません。
注意3: [UNAVAILABLE] は大文字、小文字、それらの混在のいずれでも 構いません。
注意4: XFORWARD サーバの実装は現在の SMTP セッションからの情報と 上流のセッションからの情報を混ぜてはいけません。
XFORWARD サーバ応答コードは以下の通りです:
コード 意味 250 成功 501 コマンドパラメータ文法の間違い 503 メール処理実行中 421 続行不能、切断中
以下の例では、クライアントが送る情報を太字で示しています。
220 server.example.com ESMTP Postfix EHLO client.example.com 250-server.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-XFORWARD NAME ADDR PROTO HELO 250 8BITMIME XFORWARD NAME=spike.porcupine.org ADDR=168.100.189.2 PROTO=ESMTP 250 Ok XFORWARD 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 3CF6B2AAE8 QUIT 221 Bye
XFORWARD コマンドは監査証跡を変更します。このコマンドの利用は 認証されたクライアントに制限しなければいけません。
SMTP 接続キャッシュは、同じ SMTP セッション内での複数のメッセージ 配送を可能にします。XFORWARD 属性は MAIL FROM コマンドの完了後にリセット されるので、情報が漏れる可能性はありません。