Postfix XFORWARD Howto
Purpose of the XFORWARD extension to SMTP
The XFORWARD command targets the following problem:
This extension is implemented as a separate command, and can be used to transmit client or message attributes incrementally. It is not implemented by passing additional parameters via the MAIL FROM command, because doing so would require extending the MAIL FROM command length limit by another 600 or more characters beyond the space that is already needed in order to support other extensions such as AUTH.
XFORWARD Command syntax
An example of a client-server conversation is given at the end of this document.
In SMTP server EHLO replies, the keyword associated with this extension is XFORWARD. The keyword is followed by the names of the attributes that the XFORWARD implementation supports.
The client may send the XFORWARD request at any time except in the middle of a mail delivery transaction (i.e. between MAIL and DOT). The command may be pipelined when the server supports ESMTP command pipelining.
The syntax of XFORWARD requests is described below. Upper case and quoted strings specify terminals, lowercase strings specify meta terminals, and SP is whitespace. Although command and attribute names are shown in upper case, they are in fact case insensitive.
Note 1: Attribute values must not be longer than 255 characters (specific attributes may impose shorter lengths), must not contain control characters, non-ASCII characters, whitespace, or other characters that are special in message headers. Future attributes that may violate this should use xtext encoding as described in RFC 1891.
Note 2: DNS hostnames can be up to 255 characters long. The XFORWARD client implementation must not send XFORWARD commands that exceed the 512 character limit for SMTP commands.
Note 3: [UNAVAILABLE] may be specified in upper case, lower case or mixed case.
Note 4: the XFORWARD server implementation must not mix information from the current SMTP session with forwarded information from an up-stream session.
The XFORWARD server reply codes are as follows:
In the following example, information sent by the client is shown in bold font.
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=22.214.171.124 PROTO=ESMTP 250 Ok XFORWARD HELO=spike.porcupine.org 250 Ok MAIL FROM:<email@example.com> 250 Ok RCPT TO:<firstname.lastname@example.org> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> . . .message content. . . . 250 Ok: queued as 3CF6B2AAE8 QUIT 221 Bye
The XFORWARD command changes audit trails. Use of this command must be restricted to authorized clients.
SMTP connection caching
SMTP connection caching makes it possible to deliver multiple messages within the same SMTP session. The XFORWARD attributes are reset after the MAIL FROM command completes, so there is no risk of information leakage.