VIRTUAL(5) VIRTUAL(5)
NAME
virtual - Postfix virtual alias table format
SYNOPSIS
postmap /etc/postfix/virtual
postmap -q "string" /etc/postfix/virtual
postmap -q - /etc/postfix/virtual <inputfile
DESCRIPTION
The optional virtual(5) alias table rewrites recipient
addresses for all local, all virtual, and all remote mail
destinations. This is unlike the aliases(5) table which
is used only for local(8) delivery. Virtual aliasing is
recursive, and is implemented by the Postfix cleanup(8)
daemon before mail is queued.
The main applications of virtual aliasing are:
o To redirect mail for one address to one or more
addresses.
o To implement virtual alias domains where all
addresses are aliased to addresses in other
domains.
Virtual alias domains are not to be confused with
the virtual mailbox domains that are implemented
with the Postfix virtual(8) mail delivery agent.
With virtual mailbox domains, each recipient
address can have its own mailbox.
Virtual aliasing is applied only to recipient envelope
addresses, and does not affect message headers. Use
canonical(5) mapping to rewrite header and envelope
addresses in general.
Normally, the virtual(5) alias table is specified as a
text file that serves as input to the postmap(1) command.
The result, an indexed file in dbm or db format, is used
for fast searching by the mail system. Execute the command
"postmap /etc/postfix/virtual" in order to redefault: no)
if Postfix sends one bounce report for multi-recipient VERP mail, or one bounce report per recipient. The default, one per recipient, is what ezmlm needs.
In order to make VERP useful with majordomo etc. mailing lists, you would configure the list manager to submit mail according to one of the following two forms:
Postfix 2.3 and later:
% sendmail -XV -f owner-listname other-arguments... % sendmail -XV+= -f owner-listname other-arguments...
Postfix 2.2 and earlier (Postfix 2.3 understands the old syntax for backwards compatibility, but will log a warning that reminds you of the new syntax):
% sendmail -V -f owner-listname other-arguments... % sendmail -V+= -f owner-listname other-arguments...
The first form uses the default main.cf VERP delimiter characters. The second form allows you to explicitly specify the VERP delimiter characters. The example shows the recommended values.
This text assumes that you have set up an owner-listname alias that routes undeliverable mail to a real person:
/etc/aliases:
owner-listname: yourname+listname
In order to process bounces we are going to make extensive use of address extension tricks.
You need to tell Postfix that + is the separator between an address and its optional address extension, that address extensions are appended to .forward file names, and that address extensions are to be discarded when doing alias expansions:
/etc/postfix/main.cf:
recipient_delimiter = +
forward_path = $home/.forward${recipient_delimiter}${extension},
$home/.forward
propagate_unmatched_extensions = canonical, virtual
(the last two parameter settings are default settings).
You need to set up a file named .forward+listname with the commands that process all the mail that is sent to the owner-listname address:
~/.forward+listname:
"|/some/where/command ..."
With this set up, undeliverable mail for user@domain will be returned to the following address:
owner-listname+user=domain@your.domain
which is processed by the command in your .forward+listname file. The message should contain, among others, a To: header with the encapsulated recipient sender address:
To: owner-listname+user=domain@your.domain
It is left as an exercise for the reader to parse the To: header line and to pull out the user=domain part from the recipient address.
The Postfix SMTP server implements a command XVERP to enable VERP style delivery. The syntax allows two forms:
MAIL FROM:<sender@domain> XVERP MAIL FROM:<sender@domain> XVERP=+=
The first form uses the default main.cf VERP delimiters, the second form overrides them explicitly. The values shown are the recommended ones.
The Postfix sendmail command has a -V flag to request VERP style delivery. Specify one of the following two forms:
Postfix 2.3 and later:
% sendmail -XV -f owner-listname .... % sendmail -XV+= -f owner-listname ....
Postfix 2.2 and earlier (Postfix 2.3 understands the old syntax for backwards compatibility, but will log a warning that reminds you of the new syntax):
% sendmail -V -f owner-listname .... % sendmail -V+= -f owner-listname ....
The first form uses the default main.cf VERP delimiters, the second form overrides them explicitly. The values shown are the recommended ones.
When the Postfix QMQP server receives mail with an envelope sender address of the form:
listname-@your.domain-@[]
Postfix generates sender addresses "listname-user=domain@your.domain", using "-=" as the VERP delimiters because qmail/ezmlm expect this.
More generally, a sender address of "prefix@origin-@[]" requests VERP style delivery with sender addresses of the form "prefixuser=domain@origin". However, Postfix allows only VERP delimiters that are specified with the verp_delimiter_filter parameter. In particular, the "=" delimiter is required for qmail compatibility (see the qmail addresses(5) manual page for details).