Postfix
About
Postfix is an open-source mail transfer agent (MTA) for POSIX systems. It is fully supported by Webmin and is part of the Dovecot stack.
Files
- /main.cf
- /master.cf: formatted list of transport helper applications
Internal Apps
- /aliases (reference)
- /cleanup (reference)
- /lmtp (reference)
- /local (reference)
- /pickup (reference)
- /qmgr (reference)
- /smtpd (reference)
- /transport (http://www.postfix.org/transport.5.html reference])
- /trivial-rewrite (reference))
User Applets
Error Messages
Notes
After making changes to the Postfix configuration files, you don't actually have to stop and restart Postfix to load the changes; you can just type (as root) "postfix reload".
flow
There are multiple stages inside Postfix, and each stage can be affected by configuration parameters. I have not yet found a clear documentation of the data flow, but it seems to go like this (only much more complicated) under normal circumstances:
- SMTP → Postfix delivery queue → user alias mappings → local delivery (MDA, e.g. Dovecot)
However, when using virtual (non-system) users, internally-generated emails (e.g. mail from cron or PHP's mail() function) seem to bypass the alias mappings, which the MDA then rejects if they are addressed to an alias instead of a user.
A table from the official documentation is more detailed (the "-<" between the last two boxes in the original document is apparently intended to indicate rightward movement with a fan-out, i.e. the message may go through any of the 3 sub-boxes on the right; it has been replaced with "->" here).
trivial- rewrite(8) (std form) |
trivial- rewrite(8) (resolve) |
|||||||||||||
|
| |||||||||||||
smtpd(8) | >- | cleanup(8) | -> | incoming | -> | active | -> | qmgr(8) | -> | smtp(8) | ||||
qmqpd(8) | lmtp(8) | |||||||||||||
pickup(8) | local(8) | |||||||||||||
^ | |
| |||||||||||||
bounces forwarding notices |
deferred |
There are two more diagrams here; the first shows the input stage in a bit more detail, and the second shows the delivery stage. There are two more diagrams here, showing where filtering takes place.
aliases
To set up aliases, either edit the file specified by the alias_maps setting in main.cf (/etc/aliases by default) and then run newaliases (or "postalias /etc/aliases") to update the database, or else use Webmin ("Mail Aliases" icon, then click on the "Create a new alias" link).
Notes:
- Webmin seems to automatically run newaliases when you add or modify an individual alias, but not when you use it to edit the /etc/aliases file directly. Changes made to /etc/aliases will not take effect until the database is updated.
- Stopping and starting the postfix daemon does not update from the aliases file; you still have to run newaliases.
- see aliases for more information.
virtual users
By default, virtual aliases seem to get looked up only when email comes from the outside; locally generated emails are "returned" as undeliverable with the error message "Diagnostic-Code: x-unix; user unknown"
The following change in main.cf solves that problem –
- change: receive_override_options = no_address_mappings
- to this: receive_override_options =
– but creates a new one, in that externally-sourced messages are now delivered twice (or four times if addressed directly to a virtual user instead of a virtual alias).
Someone who understands the internal structure of postfix could probably figure out what this means (and how to fix it), but I'm still working on it.
catch-all
To set up a catch-all address, edit main.cf and set the following parameters:
- local_recipient_maps =
- luser_relay = whereToSend
The syntax for whereToSend is explained here.
Examples:
- luser_relay = $user@anotherdomain.org
- forwards all email addressed to "invaliduser@firstdomain.org" to "invaliduser@anotherdomain.org"
- luser_relay = youraddress@anotherdomain.org
- forwards all email addressed to invalid users to "youraddress@anotherdomain.org".
automatic BCC
To automatically BCC outgoing mail from any given set of users, set sender_bcc_maps in /main.cf to hash:/etc/postfix/sender_bcc. (In Webmin: BCC Mapping: Sender BCC mapping lookup tables)
Each line in the /sender_bcc file will contain the sender (which can be user@domain, user, or @domain), one or more blanks, then the recipient (which can be one address or multiple addresses separated by commas).
Example -- BCCs all mail sent by vbz.com users to an archive address:
@vbz.com archive2024@vbz.com
pages to index
I have these open in tabs, so they are probably relevant to something:
- Postfix Address Rewriting
- trivial-rewrite (manpage)
- Postfix Configuration Parameters (includes /main.cf parameters)
- Postfix After-Queue Content Filter
- Group-Office Mailserver plugin: helps administer Postfix\
- Mail server using Postfix and Dovecot on Gentoo Linux