Documentation: added LINUX_README sections for logging in
a container, and for systemd logging workarounds. File:
- proto/LINUX_README.hmtl.
+ proto/LINUX_README.html.
20220126
Documentation: added text that the read-only "service_name"
configuration parameter was introduced in Postfix 3.3. File:
proto/postconf.proto.
+
+20240402
+
+ Workaround: in the stock master.cf file, disable the feature
+ smtpd_forbid_unauth_pipelining in the submission and
+ submissions services, to work around a 15-year old open
+ Mozilla bug for sending a non-compliant SMTP command:"EHLO
+ we-guess.mozilla.org<CR><LF>QUIT<CR><LF>" (see
+ https://bugzilla.mozilla.org/show_bug.cgi?id=538809). File:
+ conf/master.cf.
+
+20240413
+
+ Documentation: mention in the first aliases(5) and virtual(5)
+ manpage paragraphs that alias_maps is searched only with
+ the email address localpart (no domain) and that
+ virtual_alias_maps is often queried with a full email address
+ (including domain). Add similar text to the parameter
+ descriptions for alias_maps and virtual_alias_maps. Files:
+ proto/aliases, proto/virtual.
+
+ Documentation: workaround for a load balancer paradox. When
+ a destination (relayhost, MySQL server, PostgreSQL server,
+ LDAP server) is a load balancer, and there are no alternative
+ servers, specify the load balancer multiple times. Without
+ this duplication, the Postfix client would not reconnect
+ immediately to the same load balancer after a server failure,
+ and it would defer mail. Files: proto/postconf.proto,
+ proto/mysql_table, proto/pgsql_table, proto/ldap_table.
+
+20240421
+
+ Documentation: replace the obsolete pickup service type
+ fifo with unix, and fix typos. Dilyan Palauzov. Files:
+ HISTORY< proto/BUILTIN_FILTER_README.html,
+ proto/STANDARD_CONFIGURATION_README.html
+
+20240418
+
+ Logging: when the pickup daemon logs a warning for a maildrop
+ queue file, log not only the 'new' name in the incoming
+ queue, but also log the 'old' name in the maildrop queue.
+ File: pickup/pickup.c.
-o receive_override_options=no_header_body_checks
127.0.0.1:smtp inet n - n - - smtpd
-o receive_override_options=no_header_body_checks
- pickup fifo n - n 60 1 pickup
+ pickup unix n - n 60 1 pickup
-o receive_override_options=no_header_body_checks
* Add some firewall rule to prevent access to 1.2.3.4:smtp from the outside
inbound and outbound mail on a multi-homed firewall. The inbound Postfix
instance has an SMTP server listening on the external firewall interface, and
the outbound Postfix instance has an SMTP server listening on the internal
-interface. In such a configuration is it is tempting to configure
-$inet_interfaces in each instance with just the corresponding interface
-address.
+interface. In such a configuration it is tempting to configure $inet_interfaces
+in each instance with just the corresponding interface address.
In most cases, using inet_interfaces in this way will not work, because as
documented in the $inet_interfaces reference manual, the smtp(8) delivery agent
Disable -DSNAPSHOT and -DNONPROD in makedefs.
+ migrate rbl -> dnsbl
+
+ migrate smtpd_sasl_tls_security_options to "noanonymous"
+ (drop the "noplaintext" part).
+
+ Safety: restrict sender-dependent features to, for example,
+ mail from an authorized client (SASL, TLS, or IP address).
+ If this becomes the default then it needs to be subject to
+ comptibility_level.
+
+ Make some of the message editing features available for
+ non-Milter configurations (for example, set envelope.from
+ from primary header.from).
+
The postconf command needs more mongodb tests.
The mongodb client needs tests.
+ Change Postfix SMTP debug logging to display the entire
+ input, instead of stopping at the first null byte.
+
+ SRS-friendly envelope.from output rewrite in the SMTP client.
+ TBD: before or after smtp_generic_maps. The two mechanisms
+ are unlikely to be useful in combination.
+
+ Cleanup: In documentation, replace DBM with LMDB (*.lmdb).
+
+ Cleanup: Is it time to remove SDBM support? Its iterator
+ was unusable, when the SDBM client was adopted in Postfix
+ 2.2.
+
In documentation and configuration file examples, replace
IPv4 address prefixes from Cloud9 with 192.168.* from RFC
1918, and replace IPv6 address prefixes with unique local
# SYNOPSIS
# newaliases
#
+# postalias -q name [file-type]:[file-name]
+#
# DESCRIPTION
# The optional aliases(5) table (alias_maps) redirects mail
# for local recipients. The redirections are processed by
-# the Postfix local(8) delivery agent.
+# the Postfix local(8) delivery agent. This table is always
+# searched with an email address localpart (no domain por-
+# tion).
#
# This is unlike virtual(5) aliasing (virtual_alias_maps)
# which applies to all recipients: local(8), virtual, and
# remote, and which is implemented by the cleanup(8) daemon.
+# That table is often searched with a full email address
+# (including domain).
#
# Normally, the aliases(5) table is specified as a text file
-# that serves as input to the postalias(1) command. The
-# result, an indexed file in dbm or db format, is used for
-# fast lookup by the mail system. Execute the command
-# newaliases in order to rebuild the indexed file after
+# that serves as input to the postalias(1) command. The
+# result, an indexed file in dbm or db format, is used for
+# fast lookup by the mail system. Execute the command
+# newaliases in order to rebuild the indexed file after
# changing the Postfix alias database.
#
-# When the table is provided via other means such as NIS,
-# LDAP or SQL, the same lookups are done as for ordinary
+# When the table is provided via other means such as NIS,
+# LDAP or SQL, the same lookups are done as for ordinary
# indexed files.
#
-# Alternatively, the table can be provided as a regu-
-# lar-expression map where patterns are given as regular
-# expressions. In this case, the lookups are done in a
-# slightly different way as described below under "REGULAR
+# Alternatively, the table can be provided as a regu-
+# lar-expression map where patterns are given as regular
+# expressions. In this case, the lookups are done in a
+# slightly different way as described below under "REGULAR
# EXPRESSION TABLES".
#
# Users can control delivery of their own mail by setting up
#
# name: value1, value2, ...
#
-# o Empty lines and whitespace-only lines are ignored,
-# as are lines whose first non-whitespace character
+# o Empty lines and whitespace-only lines are ignored,
+# as are lines whose first non-whitespace character
# is a `#'.
#
-# o A logical line starts with non-whitespace text. A
-# line that starts with whitespace continues a logi-
+# o A logical line starts with non-whitespace text. A
+# line that starts with whitespace continues a logi-
# cal line.
#
-# The name is a local address (no domain part). Use double
-# quotes when the name contains any special characters such
-# as whitespace, `#', `:', or `@'. The name is folded to
+# The name is a local address (no domain part). Use double
+# quotes when the name contains any special characters such
+# as whitespace, `#', `:', or `@'. The name is folded to
# lowercase, in order to make database lookups case insensi-
# tive.
#
-# In addition, when an alias exists for owner-name, this
-# will override the envelope sender address, so that deliv-
+# In addition, when an alias exists for owner-name, this
+# will override the envelope sender address, so that deliv-
# ery diagnostics are directed to owner-name, instead of the
-# originator of the message (for details, see
-# owner_request_special, expand_owner_alias and
-# reset_owner_alias). This is typically used to direct
-# delivery errors to the maintainer of a mailing list, who
+# originator of the message (for details, see
+# owner_request_special, expand_owner_alias and
+# reset_owner_alias). This is typically used to direct
+# delivery errors to the maintainer of a mailing list, who
# is in a better position to deal with mailing list delivery
# problems than the originator of the undelivered mail.
#
# The value contains one or more of the following:
#
# address
-# Mail is forwarded to address, which is compatible
+# Mail is forwarded to address, which is compatible
# with the RFC 822 standard.
#
# /file/name
-# Mail is appended to /file/name. For details on how
-# a file is written see the sections "EXTERNAL FILE
-# DELIVERY" and "DELIVERY RIGHTS" in the local(8)
-# documentation. Delivery is not limited to regular
-# files. For example, to dispose of unwanted mail,
+# Mail is appended to /file/name. For details on how
+# a file is written see the sections "EXTERNAL FILE
+# DELIVERY" and "DELIVERY RIGHTS" in the local(8)
+# documentation. Delivery is not limited to regular
+# files. For example, to dispose of unwanted mail,
# deflect it to /dev/null.
#
# |command
-# Mail is piped into command. Commands that contain
-# special characters, such as whitespace, should be
-# enclosed between double quotes. For details on how
-# a command is executed see "EXTERNAL COMMAND DELIV-
+# Mail is piped into command. Commands that contain
+# special characters, such as whitespace, should be
+# enclosed between double quotes. For details on how
+# a command is executed see "EXTERNAL COMMAND DELIV-
# ERY" and "DELIVERY RIGHTS" in the local(8) documen-
# tation.
#
# When the command fails, a limited amount of command
-# output is mailed back to the sender. The file
-# /usr/include/sysexits.h defines the expected exit
-# status codes. For example, use "|exit 67" to simu-
-# late a "user unknown" error, and "|exit 0" to
+# output is mailed back to the sender. The file
+# /usr/include/sysexits.h defines the expected exit
+# status codes. For example, use "|exit 67" to simu-
+# late a "user unknown" error, and "|exit 0" to
# implement an expensive black hole.
#
# :include:/file/name
-# Mail is sent to the destinations listed in the
+# Mail is sent to the destinations listed in the
# named file. Lines in :include: files have the same
-# syntax as the right-hand side of alias entries.
+# syntax as the right-hand side of aliases(5)
+# entries.
#
# A destination can be any destination that is
# described in this manual page. However, delivery to
#127.0.0.1:submission inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
+# -o smtpd_forbid_unauth_pipelining=no
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_tls_auth_only=yes
#127.0.0.1:submissions inet n - n - - smtpd
#submissions inet n - n - - smtpd
# -o syslog_name=postfix/submissions
+# -o smtpd_forbid_unauth_pipelining=no
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o local_header_rewrite_clients=static:all
# The optional virtual(5) alias table (virtual_alias_maps)
# applies to all recipients: local(8), virtual, and remote.
# This feature is implemented in the Postfix cleanup(8) dae-
-# mon before mail is queued.
+# mon before mail is queued. These tables are often queried
+# with a full email address (including domain).
#
-# This is unlike the aliases(5) table (alias_maps) which
-# applies only to local(8) recipients.
+# This is unlike the aliases(5) table (alias_maps) which
+# applies only to local(8) recipients. That table is only
+# queried with the email address localpart (no domain).
#
# Virtual aliasing is recursive; to terminate recursion for
# a specific address, alias that address to itself.
# command after a configuration change.
#
# virtual_alias_maps ($virtual_maps)
-# Optional lookup tables with aliases that apply to
-# all recipients: local(8), virtual, and remote; this
-# is unlike alias_maps that apply only to local(8)
-# recipients.
+# Optional lookup tables that are often searched with
+# a full email address (including domain) and that
+# apply to all recipients: local(8), virtual, and
+# remote; this is unlike alias_maps that are only
+# searched with an email address localpart (no
+# domain) and that apply only to local(8) recipients.
#
# virtual_alias_domains ($virtual_alias_maps)
-# Postfix is the final destination for the specified
+# Postfix is the final destination for the specified
# list of virtual alias domains, that is, domains for
-# which all addresses are aliased to addresses in
+# which all addresses are aliased to addresses in
# other local or remote domains.
#
# propagate_unmatched_extensions (canonical, virtual)
-# What address lookup tables copy an address exten-
+# What address lookup tables copy an address exten-
# sion from the lookup key to the lookup result.
#
# Other parameters of interest:
#
# inet_interfaces (all)
-# The local network interface addresses that this
+# The local network interface addresses that this
# mail system receives mail on.
#
# mydestination ($myhostname, localhost.$mydomain, local-
# host)
-# The list of domains that are delivered via the
+# The list of domains that are delivered via the
# $local_transport mail delivery transport.
#
# myorigin ($myhostname)
# The domain name that locally-posted mail appears to
-# come from, and that locally posted mail is deliv-
+# come from, and that locally posted mail is deliv-
# ered to.
#
# owner_request_special (yes)
# Enable special treatment for owner-listname entries
# in the aliases(5) file, and don't split owner-list-
-# name and listname-request address localparts when
+# name and listname-request address localparts when
# the recipient_delimiter is set to "-".
#
# proxy_interfaces (empty)
-# The remote network interface addresses that this
-# mail system receives mail on by way of a proxy or
+# The remote network interface addresses that this
+# mail system receives mail on by way of a proxy or
# network address translation unit.
#
# SEE ALSO
# canonical(5), canonical address mapping
#
# README FILES
-# Use "postconf readme_directory" or "postconf html_direc-
+# Use "postconf readme_directory" or "postconf html_direc-
# tory" to locate this information.
# ADDRESS_REWRITING_README, address rewriting guide
# DATABASE_README, Postfix lookup table overview
# VIRTUAL_README, domain hosting guide
#
# LICENSE
-# The Secure Mailer license must be distributed with this
+# The Secure Mailer license must be distributed with this
# software.
#
# AUTHOR(S)
-o <a href="postconf.5.html#receive_override_options">receive_override_options</a>=<a href="postconf.5.html#no_header_body_checks">no_header_body_checks</a>
127.0.0.1:smtp inet n - n - - smtpd
-o <a href="postconf.5.html#receive_override_options">receive_override_options</a>=<a href="postconf.5.html#no_header_body_checks">no_header_body_checks</a>
- pickup fifo n - n 60 1 pickup
+ pickup unix n - n 60 1 pickup
-o <a href="postconf.5.html#receive_override_options">receive_override_options</a>=<a href="postconf.5.html#no_header_body_checks">no_header_body_checks</a>
</pre>
processing inbound and outbound mail on a multi-homed firewall. The
inbound Postfix instance has an SMTP server listening on the external
firewall interface, and the outbound Postfix instance has an SMTP server
-listening on the internal interface. In such a configuration is it is
+listening on the internal interface. In such a configuration it is
tempting to configure $<a href="postconf.5.html#inet_interfaces">inet_interfaces</a> in each instance with just the
corresponding interface address. </p>
<b>SYNOPSIS</b>
<b>newaliases</b>
+ <b>postalias -q</b> <i>name</i> <b>[</b><i>file-type</i><b>]:[</b><i>file-name</i><b>]</b>
+
<b>DESCRIPTION</b>
The optional <a href="aliases.5.html"><b>aliases</b>(5)</a> table (<a href="postconf.5.html#alias_maps">alias_maps</a>) redirects mail for local
recipients. The redirections are processed by the Postfix <a href="local.8.html"><b>local</b>(8)</a>
- delivery agent.
+ delivery agent. This table is always searched with an email address
+ localpart (no domain portion).
- This is unlike <a href="virtual.5.html"><b>virtual</b>(5)</a> aliasing (<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>) which applies
- to all recipients: <a href="local.8.html">local(8)</a>, virtual, and remote, and which is imple-
- mented by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon.
+ This is unlike <a href="virtual.5.html"><b>virtual</b>(5)</a> aliasing (<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>) which applies
+ to all recipients: <a href="local.8.html">local(8)</a>, virtual, and remote, and which is imple-
+ mented by the <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon. That table is often searched with a
+ full email address (including domain).
Normally, the <a href="aliases.5.html"><b>aliases</b>(5)</a> table is specified as a text file that serves
as input to the <a href="postalias.1.html"><b>postalias</b>(1)</a> command. The result, an indexed file in
<b>:include:</b><i>/file/name</i>
Mail is sent to the destinations listed in the named file.
Lines in <b>:include:</b> files have the same syntax as the right-hand
- side of alias entries.
+ side of <a href="aliases.5.html"><b>aliases</b>(5)</a> entries.
A destination can be any destination that is described in this
manual page. However, delivery to "|<i>command</i>" and <i>/file/name</i> is
server_host = ldap.example.com:1444
+ NOTE: if "server_host" specifies one load balancer and no alter-
+ native servers, specify the load balancer multiple times in the
+ "server_host" line. Without the duplicate info, the Postfix LDAP
+ client would not reconnect immediately to the same load balancer
+ after an LDAP server failure.
+
With OpenLDAP, a (list of) LDAP URLs can be used to specify both
the hostname(s) and the port(s):
TCP you have to specify
hosts = 127.0.0.1
+ NOTE: if "hosts" specifies one load balancer and no alternative
+ servers, specify the load balancer multiple times in the "hosts"
+ line. Without the duplicate info, the Postfix MySQL client would
+ not reconnect immediately to the same load balancer after a
+ MySQL server failure.
+
<b>user</b>
<b>password</b>
matically closed after being idle for about 1 minute, and are
re-opened as necessary.
+ NOTE: if "hosts" specifies one load balancer and no alternative
+ servers, specify the load balancer multiple times in the "hosts"
+ line. Without the duplicate info, the Postfix PostgreSQL client
+ would not reconnect immediately to the same load balancer after
+ a PostgreSQL server failure.
+
<b>user</b>
<b>password</b>
(default: see "postconf -d" output)</b></DT><DD>
<p>
-Optional lookup tables with aliases that apply only to <a href="local.8.html">local(8)</a>
-recipients; this is unlike <a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> that apply to all
-recipients: <a href="local.8.html">local(8)</a>, virtual, and remote.
-The table format and lookups are documented in <a href="aliases.5.html">aliases(5)</a>. For an
-overview of Postfix address manipulations see the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a>
-document. </p>
+Optional lookup tables that are searched only with an email address
+localpart (no domain) and that apply only to <a href="local.8.html">local(8)</a> recipients;
+this is unlike <a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> that are often searched with a
+full email address (including domain) and that apply to all recipients:
+<a href="local.8.html">local(8)</a>, virtual, and remote.
+The <a href="postconf.5.html#alias_maps">alias_maps</a> table format and lookups are documented in <a href="aliases.5.html">aliases(5)</a>.
+For an overview of Postfix address manipulations see the
+<a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document. </p>
<p>
Specify zero or more "type:name" lookup tables, separated by
in the specified order.
</p>
+<p> If an SMTP destination is a load balancer, and there are no
+alternative destinations, specify the load balancer multiple times.
+Without the duplicate info, the Postfix SMTP client would not
+reconnect immediately to the same load balancer after a remote SMTP
+server failure. </p>
+
<p>
If you're connected via UUCP, see the <a href="UUCP_README.html">UUCP_README</a> file for useful
information.
(default: $<a href="postconf.5.html#virtual_maps">virtual_maps</a>)</b></DT><DD>
<p>
-Optional lookup tables with aliases that apply to all recipients:
-<a href="local.8.html">local(8)</a>, virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a> that apply
+Optional lookup tables that are often searched with a full email
+address (including domain) and that apply to all recipients: <a href="local.8.html">local(8)</a>,
+virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a> that are only searched
+with an email address localpart (no domain) and that apply
only to <a href="local.8.html">local(8)</a> recipients.
-The table format and lookups
+The <a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> table format and lookups
are documented in <a href="virtual.5.html">virtual(5)</a>. For an overview of Postfix address
manipulations see the <a href="ADDRESS_REWRITING_README.html">ADDRESS_REWRITING_README</a> document.
</p>
<b>DESCRIPTION</b>
The optional <a href="virtual.5.html"><b>virtual</b>(5)</a> alias table (<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>) applies to all
recipients: <a href="local.8.html">local(8)</a>, virtual, and remote. This feature is implemented
- in the Postfix <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon before mail is queued.
+ in the Postfix <a href="cleanup.8.html"><b>cleanup</b>(8)</a> daemon before mail is queued. These tables
+ are often queried with a full email address (including domain).
- This is unlike the <a href="aliases.5.html"><b>aliases</b>(5)</a> table (<a href="postconf.5.html#alias_maps">alias_maps</a>) which applies only to
- <a href="local.8.html"><b>local</b>(8)</a> recipients.
+ This is unlike the <a href="aliases.5.html"><b>aliases</b>(5)</a> table (<a href="postconf.5.html#alias_maps">alias_maps</a>) which applies only to
+ <a href="local.8.html"><b>local</b>(8)</a> recipients. That table is only queried with the email address
+ localpart (no domain).
Virtual aliasing is recursive; to terminate recursion for a specific
address, alias that address to itself.
Use the "<b>postfix reload</b>" command after a configuration change.
<b><a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a> ($<a href="postconf.5.html#virtual_maps">virtual_maps</a>)</b>
- Optional lookup tables with aliases that apply to all recipi-
- ents: <a href="local.8.html"><b>local</b>(8)</a>, virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a>
- that apply only to <a href="local.8.html"><b>local</b>(8)</a> recipients.
+ Optional lookup tables that are often searched with a full email
+ address (including domain) and that apply to all recipients:
+ <a href="local.8.html"><b>local</b>(8)</a>, virtual, and remote; this is unlike <a href="postconf.5.html#alias_maps">alias_maps</a> that
+ are only searched with an email address localpart (no domain)
+ and that apply only to <a href="local.8.html"><b>local</b>(8)</a> recipients.
<b><a href="postconf.5.html#virtual_alias_domains">virtual_alias_domains</a> ($<a href="postconf.5.html#virtual_alias_maps">virtual_alias_maps</a>)</b>
Postfix is the final destination for the specified list of vir-
.nf
.fi
\fBnewaliases\fR
+
+\fBpostalias \-q \fIname\fB [\fIfile\-type\fB]:[\fIfile\-name\fB]\fR
.SH DESCRIPTION
.ad
.fi
The optional \fBaliases\fR(5) table (alias_maps) redirects
mail for local recipients. The redirections are processed
-by the Postfix \fBlocal\fR(8) delivery agent.
+by the Postfix \fBlocal\fR(8) delivery agent. This table
+is always searched with an email address localpart (no
+domain portion).
This is unlike \fBvirtual\fR(5) aliasing (virtual_alias_maps)
which applies to all recipients: local(8), virtual, and remote,
-and which is implemented by the \fBcleanup\fR(8) daemon.
+and which is implemented by the \fBcleanup\fR(8) daemon. That
+table is often searched with a full email address (including
+domain).
Normally, the \fBaliases\fR(5) table is specified as a text file
that serves as input to the \fBpostalias\fR(1) command. The
.IP \fB:include:\fI/file/name\fR
Mail is sent to the destinations listed in the named file.
Lines in \fB:include:\fR files have the same syntax
-as the right\-hand side of alias entries.
+as the right\-hand side of \fBaliases\fR(5) entries.
.sp
A destination can be any destination that is described in this
manual page. However, delivery to "|\fIcommand\fR" and
server_host = ldap.example.com:1444
.fi
+NOTE: if "server_host" specifies one load balancer and no
+alternative servers, specify the load balancer multiple
+times in the "server_host" line. Without the duplicate info,
+the Postfix LDAP client would not reconnect immediately to
+the same load balancer after an LDAP server failure.
+
With OpenLDAP, a (list of) LDAP URLs can be used to specify both
the hostname(s) and the port(s):
.nf
hosts = 127.0.0.1
.fi
+
+NOTE: if "hosts" specifies one load balancer and no alternative
+servers, specify the load balancer multiple times in the
+"hosts" line. Without the duplicate info, the Postfix MySQL
+client would not reconnect immediately to the same load
+balancer after a MySQL server failure.
.IP "\fBuser\fR"
.IP "\fBpassword\fR"
The user name and password to log into the mysql server.
The hosts are tried in random order. The connections are
automatically closed after being idle for about 1 minute,
and are re\-opened as necessary.
+
+NOTE: if "hosts" specifies one load balancer and no alternative
+servers, specify the load balancer multiple times in the
+"hosts" line. Without the duplicate info, the Postfix
+PostgreSQL client would not reconnect immediately to the
+same load balancer after a PostgreSQL server failure.
.IP "\fBuser\fR"
.IP "\fBpassword\fR"
The user name and password to log into the pgsql server.
.ad
.ft R
.SH alias_maps (default: see "postconf \-d" output)
-Optional lookup tables with aliases that apply only to \fBlocal\fR(8)
-recipients; this is unlike virtual_alias_maps that apply to all
-recipients: \fBlocal\fR(8), virtual, and remote.
-The table format and lookups are documented in \fBaliases\fR(5). For an
-overview of Postfix address manipulations see the ADDRESS_REWRITING_README
-document.
+Optional lookup tables that are searched only with an email address
+localpart (no domain) and that apply only to \fBlocal\fR(8) recipients;
+this is unlike virtual_alias_maps that are often searched with a
+full email address (including domain) and that apply to all recipients:
+\fBlocal\fR(8), virtual, and remote.
+The alias_maps table format and lookups are documented in \fBaliases\fR(5).
+For an overview of Postfix address manipulations see the
+ADDRESS_REWRITING_README document.
.PP
Specify zero or more "type:name" lookup tables, separated by
whitespace or comma. Tables will be searched in the specified order
are supported in Postfix 3.5 and later. Each destination is tried
in the specified order.
.PP
+If an SMTP destination is a load balancer, and there are no
+alternative destinations, specify the load balancer multiple times.
+Without the duplicate info, the Postfix SMTP client would not
+reconnect immediately to the same load balancer after a remote SMTP
+server failure.
+.PP
If you're connected via UUCP, see the UUCP_README file for useful
information.
.PP
.PP
This feature is available in Postfix 2.1 and later.
.SH virtual_alias_maps (default: $virtual_maps)
-Optional lookup tables with aliases that apply to all recipients:
-\fBlocal\fR(8), virtual, and remote; this is unlike alias_maps that apply
+Optional lookup tables that are often searched with a full email
+address (including domain) and that apply to all recipients: \fBlocal\fR(8),
+virtual, and remote; this is unlike alias_maps that are only searched
+with an email address localpart (no domain) and that apply
only to \fBlocal\fR(8) recipients.
-The table format and lookups
+The virtual_alias_maps table format and lookups
are documented in \fBvirtual\fR(5). For an overview of Postfix address
manipulations see the ADDRESS_REWRITING_README document.
.PP
applies to all recipients: local(8), virtual, and remote.
This feature is implemented
in the Postfix \fBcleanup\fR(8) daemon before mail is queued.
+These tables are often queried with a full email address
+(including domain).
This is unlike the \fBaliases\fR(5) table (alias_maps) which
-applies only to \fBlocal\fR(8) recipients.
+applies only to \fBlocal\fR(8) recipients. That table is
+only queried with the email address localpart (no domain).
Virtual aliasing is recursive; to terminate recursion for
a specific address, alias that address to itself.
and for default values. Use the "\fBpostfix reload\fR" command after
a configuration change.
.IP "\fBvirtual_alias_maps ($virtual_maps)\fR"
-Optional lookup tables with aliases that apply to all recipients:
-\fBlocal\fR(8), virtual, and remote; this is unlike alias_maps that apply
+Optional lookup tables that are often searched with a full email
+address (including domain) and that apply to all recipients: \fBlocal\fR(8),
+virtual, and remote; this is unlike alias_maps that are only searched
+with an email address localpart (no domain) and that apply
only to \fBlocal\fR(8) recipients.
.IP "\fBvirtual_alias_domains ($virtual_alias_maps)\fR"
Postfix is the final destination for the specified list of virtual
-o receive_override_options=no_header_body_checks
127.0.0.1:smtp inet n - n - - smtpd
-o receive_override_options=no_header_body_checks
- pickup fifo n - n 60 1 pickup
+ pickup unix n - n 60 1 pickup
-o receive_override_options=no_header_body_checks
</pre>
processing inbound and outbound mail on a multi-homed firewall. The
inbound Postfix instance has an SMTP server listening on the external
firewall interface, and the outbound Postfix instance has an SMTP server
-listening on the internal interface. In such a configuration is it is
+listening on the internal interface. In such a configuration it is
tempting to configure $inet_interfaces in each instance with just the
corresponding interface address. </p>
# SYNOPSIS
# .fi
# \fBnewaliases\fR
+#
+# \fBpostalias -q \fIname\fB [\fIfile-type\fB]:[\fIfile-name\fB]\fR
# DESCRIPTION
# The optional \fBaliases\fR(5) table (alias_maps) redirects
# mail for local recipients. The redirections are processed
-# by the Postfix \fBlocal\fR(8) delivery agent.
+# by the Postfix \fBlocal\fR(8) delivery agent. This table
+# is always searched with an email address localpart (no
+# domain portion).
#
# This is unlike \fBvirtual\fR(5) aliasing (virtual_alias_maps)
# which applies to all recipients: local(8), virtual, and remote,
-# and which is implemented by the \fBcleanup\fR(8) daemon.
+# and which is implemented by the \fBcleanup\fR(8) daemon. That
+# table is often searched with a full email address (including
+# domain).
#
# Normally, the \fBaliases\fR(5) table is specified as a text file
# that serves as input to the \fBpostalias\fR(1) command. The
# .IP \fB:include:\fI/file/name\fR
# Mail is sent to the destinations listed in the named file.
# Lines in \fB:include:\fR files have the same syntax
-# as the right-hand side of alias entries.
+# as the right-hand side of \fBaliases\fR(5) entries.
# .sp
# A destination can be any destination that is described in this
# manual page. However, delivery to "|\fIcommand\fR" and
# server_host = ldap.example.com:1444
# .fi
#
+# NOTE: if "server_host" specifies one load balancer and no
+# alternative servers, specify the load balancer multiple
+# times in the "server_host" line. Without the duplicate info,
+# the Postfix LDAP client would not reconnect immediately to
+# the same load balancer after an LDAP server failure.
+#
# With OpenLDAP, a (list of) LDAP URLs can be used to specify both
# the hostname(s) and the port(s):
#
# .nf
# hosts = 127.0.0.1
# .fi
+#
+# NOTE: if "hosts" specifies one load balancer and no alternative
+# servers, specify the load balancer multiple times in the
+# "hosts" line. Without the duplicate info, the Postfix MySQL
+# client would not reconnect immediately to the same load
+# balancer after a MySQL server failure.
# .IP "\fBuser\fR"
# .IP "\fBpassword\fR"
# The user name and password to log into the mysql server.
# The hosts are tried in random order. The connections are
# automatically closed after being idle for about 1 minute,
# and are re-opened as necessary.
+#
+# NOTE: if "hosts" specifies one load balancer and no alternative
+# servers, specify the load balancer multiple times in the
+# "hosts" line. Without the duplicate info, the Postfix
+# PostgreSQL client would not reconnect immediately to the
+# same load balancer after a PostgreSQL server failure.
# .IP "\fBuser\fR"
# .IP "\fBpassword\fR"
# The user name and password to log into the pgsql server.
%PARAM alias_maps see "postconf -d" output
<p>
-Optional lookup tables with aliases that apply only to local(8)
-recipients; this is unlike virtual_alias_maps that apply to all
-recipients: local(8), virtual, and remote.
-The table format and lookups are documented in aliases(5). For an
-overview of Postfix address manipulations see the ADDRESS_REWRITING_README
-document. </p>
+Optional lookup tables that are searched only with an email address
+localpart (no domain) and that apply only to local(8) recipients;
+this is unlike virtual_alias_maps that are often searched with a
+full email address (including domain) and that apply to all recipients:
+local(8), virtual, and remote.
+The alias_maps table format and lookups are documented in aliases(5).
+For an overview of Postfix address manipulations see the
+ADDRESS_REWRITING_README document. </p>
<p>
Specify zero or more "type:name" lookup tables, separated by
in the specified order.
</p>
+<p> If an SMTP destination is a load balancer, and there are no
+alternative destinations, specify the load balancer multiple times.
+Without the duplicate info, the Postfix SMTP client would not
+reconnect immediately to the same load balancer after a remote SMTP
+server failure. </p>
+
<p>
If you're connected via UUCP, see the UUCP_README file for useful
information.
%PARAM virtual_alias_maps $virtual_maps
<p>
-Optional lookup tables with aliases that apply to all recipients:
-local(8), virtual, and remote; this is unlike alias_maps that apply
+Optional lookup tables that are often searched with a full email
+address (including domain) and that apply to all recipients: local(8),
+virtual, and remote; this is unlike alias_maps that are only searched
+with an email address localpart (no domain) and that apply
only to local(8) recipients.
-The table format and lookups
+The virtual_alias_maps table format and lookups
are documented in virtual(5). For an overview of Postfix address
manipulations see the ADDRESS_REWRITING_README document.
</p>
systems 6 bytes for LP64 File dns dns h
xxfi_unknown return values File smtpd smtpd c
or unimplemented commands File smtpd smtpd c
+proto proto mysql_table proto pgsql_table proto ldap_table
+ File pickup pickup c
WISHLIST
Yasuhiro
deduplicates
-hmtl
libs
segfaulting
srctoman
Toshifumi
mxonly
shar
+bugzilla
+cgi
+mozilla
+Dilyan
+Palauzov
# applies to all recipients: local(8), virtual, and remote.
# This feature is implemented
# in the Postfix \fBcleanup\fR(8) daemon before mail is queued.
+# These tables are often queried with a full email address
+# (including domain).
#
# This is unlike the \fBaliases\fR(5) table (alias_maps) which
-# applies only to \fBlocal\fR(8) recipients.
+# applies only to \fBlocal\fR(8) recipients. That table is
+# only queried with the email address localpart (no domain).
#
# Virtual aliasing is recursive; to terminate recursion for
# a specific address, alias that address to itself.
# and for default values. Use the "\fBpostfix reload\fR" command after
# a configuration change.
# .IP "\fBvirtual_alias_maps ($virtual_maps)\fR"
-# Optional lookup tables with aliases that apply to all recipients:
-# \fBlocal\fR(8), virtual, and remote; this is unlike alias_maps that apply
+# Optional lookup tables that are often searched with a full email
+# address (including domain) and that apply to all recipients: \fBlocal\fR(8),
+# virtual, and remote; this is unlike alias_maps that are only searched
+# with an email address localpart (no domain) and that apply
# only to \fBlocal\fR(8) recipients.
# .IP "\fBvirtual_alias_domains ($virtual_alias_maps)\fR"
# Postfix is the final destination for the specified list of virtual
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20240310"
+#define MAIL_RELEASE_DATE "20240422"
#define MAIL_VERSION_NUMBER "3.10"
#ifdef SNAPSHOT
#define HOUR_SECONDS 3600
if (info->st.st_mtime > now + 2 * HOUR_SECONDS) {
- msg_warn("%s: message dated %ld seconds into the future",
- info->id, (long) (info->st.st_mtime - now));
+ msg_warn("%s: message %s dated %ld seconds into the future",
+ info->id, info->path, (long) (info->st.st_mtime - now));
info->st.st_mtime = now;
} else if (info->st.st_mtime < now - DAY_SECONDS) {
- msg_warn("%s: message has been queued for %d days",
- info->id, (int) ((now - info->st.st_mtime) / DAY_SECONDS));
+ msg_warn("%s: message %s has been queued for %d days",
+ info->id, info->path,
+ (int) ((now - info->st.st_mtime) / DAY_SECONDS));
}
/*