Older Microsoft SMTP client software implements a non-standard
version of the AUTH protocol syntax, and expects that the SMTP
server replies to EHLO with "250 AUTH=stuff" instead of "250 AUTH
-stuff". To accomodate such clients in addition to conformant
+stuff". To accommodate such clients in addition to conformant
clients, set "broken_sasl_auth_clients = yes" in the main.cf file.
Testing SASL authentication in the Postfix SMTP server
The behavior of "sendmail -v" has changed. One -v option now sends
an email report with the status of each delivery attempt. Multiple
-v options behave as before: turn on verbose logging in the sendmail
-and and postdrop commands.
+and postdrop commands.
The Postfix upgrade procedure will add two new services to your
master.cf file: "trace" and "verify". These servers can run inside
+NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
+Before upgrading from Postfix 1.1 you must stop Postfix ("postfix
+stop"). Some internal protocols have changed. No mail will be
+lost if you fail to stop and restart Postfix, but Postfix won't be
+able to receive any new mail, either.
+NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE
+
In the text below, changes are labeled with the Postfix snapshot
that introduced the change, and whether the change introduced a
feature, an incompatibility, or whether the feature is obsolete.
date. Snapshots change only the release date, unless they include
the same bugfixes as a patch release.
-Major changes with Postfix version 2.0.0 (released 20021222)
-============================================================
+Major changes with Postfix version 2.0.0 (released 20021222, 20021223)
+======================================================================
First comes the bad news - things that may break when you upgrade
from Postfix 1.1. Then comes the good news - things that evolved
MIME headers in attachments. This is much more efficient than
previous versions that recognized MIME headers via body_checks.
MIME headers are now processed one multi-line header at a time,
-instead of one body line at a time. To get the the old behavior,
+instead of one body line at a time. To get the old behavior,
specify "disable_mime_input_processing = yes". More details in
conf/sample-filter.cf.
given in the pcre_table(5) and regexp_table(5) manual pages.
[Feature 20020717] The default timeout for establishing an SMTP
-connection has been reduced to 30 seconds, because many systems
-have an atrociously large default timeout value.
+connection has been reduced to 30 seconds, because many system
+TCP/IP stacks have an atrociously large default timeout value.
[Feature 20020505] Finer control over Berkeley DB memory usage,
The parameter "berkeley_db_create_buffer_size" (default: 16 MBytes)
specifies the buffer size for the postmap and postalias commands.
The parameter "berkeley_db_read_buffer_size" (default: 256 kBytes)
-speficies the buffer size for all other applications. Specify
+specifies the buffer size for all other applications. Specify
"berkeley_db_read_buffer_size = 1048576" to get the old read buffer
-size. For more information, see the last paragraphs of the DB_README
-file.
+size. Contributed by Victor Duchovni. For more information, see
+the last paragraphs of the DB_README file.
+
+[Incompat 20021211] The default process limit is doubled from 50
+to 100. The default limits on the number of active queue files or
+recipients are doubled from 10000 to 20000. The default concurrency
+for parallel delivery to the same destination is doubled from 10
+to 20.
-Improved compatibitity
+Improved compatibility
======================
[Feature 20020527] The Postfix SMTP client will now convert 8BITMIME
MIME headers in attachments. This is much more efficient than
previous versions that recognized MIME headers via body_checks.
MIME headers are now processed one multi-line header at a time,
-instead of one body line at a time. To get the the old behavior,
+instead of one body line at a time. To get the old behavior,
specify "disable_mime_input_processing = yes". More details in
conf/sample-filter.cf.
The parameter "berkeley_db_create_buffer_size" (default: 16 MBytes)
specifies the buffer size for the postmap and postalias commands.
The parameter "berkeley_db_read_buffer_size" (default: 256 kBytes)
-speficies the buffer size for all other applications. Specify
+specifies the buffer size for all other applications. Specify
"berkeley_db_read_buffer_size = 1048576" to get the old read buffer
size. For more information, see the last paragraphs of the DB_README
file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
-# (yes) (yes) (yes) (never) (50)
+# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#628 inet n - n - - qmqpd
# destination. This is the default limit for delivery via SMTP, via
# the local delivery agent and via the pipe mailer.
#
-default_destination_concurrency_limit = 10
+default_destination_concurrency_limit = 20
# The default_destination_recipient_limit parameter specifies a
# default limit on the number of recipients per message delivery.
# The default limit is the default_destination_concurrency_limit
# parameter. It is probably safer to limit the concurrency to 10.
#
-smtp_destination_concurrency_limit = 10
+smtp_destination_concurrency_limit = 20
# The smtp_destination_recipient_limit parameter limits the number
# of recipients per delivery via the smtp delivery agent.
<li><a href="#nopass">What does "warning: cannot access UNIX password database" mean?</a>
+<li><a href="#loop">What does "Error: too many hops" mean?</a>
+
<li><a href="#noalias">What does "fatal: open database /etc/aliases.db" mean?</a>
<li><a href="#noservice">What does "fatal: unknown service: smtp/tcp" mean?</a>
<a name="content_filtering"><h3>Content filtering</h3>
+<ul>
+
+<li><a href="#loop">What does "Error: too many hops" mean?</a>
+
</ul>
<a name="other_transports"><h3>Other transports: UUCP, FAX, etc.</h3>
<p>
-Your problem could be that the disk is saturated with I/O from
-receiving mail, so that the Postfix queue manager gets insufficient
-chance to process the requests (many SMTP server processes are
-competing for disk access against one poor queue manager).
+Your problem could be one of several.
+
+<p>
+
+<ul>
+
+<li>You're trying to send mail to difficult to reach sites (Hotmail,
+Yahoo, etc.). Solution: set up transport map entries that give special
+treatment (many parallel connections, short connection timeouts):
+
+<p>
+
+<pre>
+/etc/postfix/main.cf:
+ transport_maps = hash:/etc/postfix/transport
+ deadbeats_destination_concurrency_limit = 50
+
+/etc/postfix/transport:
+ hotmail.com deadbeats:
+ yahoo.com deadbeats:
+
+/etc/postfix/master.cf:
+ deadbeats unix - - n - - smtp
+ -o smtp_connect_timeout=5 -o smtp_helo_timeout=5
+</pre>
+
+<p>
+
+<li>Incoming mail, destined for a small number of inside mailhubs,
+is competing with outgoing mail to the Internet. As of Postfix
+version 2, this should be less of a problem. However, when a single
+internal mailhub goes down, it can totally ruin the performance
+because Postfix is wasting huge amounts of time on connection
+timeouts. The solution is to specify shorter connection timeouts
+for the inbound <b>relay</b> transport:
+
+<p>
+
+<pre>
+/etc/postfix/main.cf:
+ mydestination = my.own.host.name
+ relay_domains = my.corp.domain
+ relay_transport = relay
+
+/etc/postfix/master.cf:
+ relay unix - - n - - smtp
+ -o smtp_connect_timeout=2 -o smtp_helo_timeout=2
+</pre>
<p>
-You solve the problem by getting faster disks.
+<li>The disk is saturated with I/O from
+receiving mail, so that the Postfix queue manager gets insufficient
+chance to process the requests (many SMTP server processes are
+competing for disk access against one poor queue manager).
<p>
-I am still solving the scheduling problem from the software side,
-but don't hold your breath.
+You solve the problem by getting faster disks, and/or by using
+different disk drives for logging, mail queue, and mailboxes.
<p>
inet_interfaces = $myhostname
</pre>
+</ul>
+
<hr>
<a name="delay"><h3>Postfix responds slowly to incoming SMTP connections</h3></a>
DNS servers are broken and produce no reply when asked for a
non-existent MX record.
+<p> <li> Secondly, the nslookup test is invalid if you ran it as
+a privileged user. Postfix DNS lookups are known to fail because
+of incorrect permissions on system files and directories. For
+example, a common beginner's mistake is to lose world read permission
+for the <b>/etc/resolv.conf</b> file.
+
<p> <li>
Check out your Postfix <b>master.cf</b> file. If the SMTP client
<p>
-The warning message means that new mail notificiation failed because
-the <b>comsat</b> network service is turned off.
+The Postfix warning message means that new mail notificiation failed
+because the <b>comsat</b> network service is turned off.
<p>
<p>
+Note: recent versions of <b>procmail</b> also produce <b>biff</b>
+notifications. To silence <b>biff</b> completely you may also have
+to updte <b>procmail</b> configuration files.
+
+<p>
+
To enable the <b>comsat</b> network service, uncomment the
corresponding entry in the <b>inetd.conf</b> file, and <b>kill -HUP</b>
the <b>inetd</b> process.
<hr>
+<a name="loop"><h3>What does "Error: too many hops" mean?</h3></a>
+
+Short answer: this message means that mail is probably looping. If
+you see this after you turned on Postfix content filtering, then
+you have made a mistake that causes mail to be filtered repeatedly.
+This is cured by appropriate use of <tt>content_filter=</tt>,
+<tt>header_checks=</tt>, and <tt>body_checks=</tt>.
+
+<p>
+
+Long answer: the message has too many Received: message headers.
+A received header is added whenever Postfix (or any MTA) receives
+a message. A large number of Received: message headers
+is an indication that mail is looping around.
+
+<p>
+
+Side comment: email uses the opposite of the technique that is used
+to avoid IP forwarding loops. With IP, the sender sets a TTL (time
+to live) field in the IP header. The field is decremented by each
+router. When the TTL reaches zero the packet is discarded and an
+ICMP error message is returned to the sender.
+
+<hr>
+
+
<a name="uucp-tcp"><h3>Using UUCP over TCP</h3>
This subject comes up whenever someone asks about a "domain in
You can override this setting for specific Postfix daemons by
editing the <b>master.cf</b> file. For example, if you do not
-wish to receive 50 SMTP messages at the same time, you could specify:
+wish to receive 100 SMTP messages at the same time, you could specify:
<dl>
<dd> <pre>
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
-# (yes) (yes) (yes) (never) (50)
+# (yes) (yes) (yes) (never) (100)
# ==========================================================================
. . .
smtp inet n - - - 5 smtpd
<p>
The <b>default_destination_concurrency_limit</b> parameter
-(default: 10) controls how many messages may be sent to the same
+(default: 20) controls how many messages may be sent to the same
destination simultaneously. You can override this setting for
specific delivery channels (<b>local, smtp, uucp</b> etc.). The
<b>main.cf</b> file recommends the following:
<dd> <b>local_destination_concurrency_limit = 2</b>
-<dd> <b>default_destination_concurrency_limit = 10</b>
+<dd> <b>default_destination_concurrency_limit = 20</b>
</dl>
<p>
-A destination concurrency limit of 10 for SMTP delivery seems enough
+A destination concurrency limit of 20 for SMTP delivery seems enough
to noticeably load a system without bringing it to its knees. Be
careful when changing this to a much larger number.
<b>DEFAULT</b> <b>DELIVERY</b> <b>METHODS</b>
By default, Postfix uses one of the following delivery
methods. This may be overruled with the optional <a href="transport.5.html">trans-</a>
- <a href="transport.5.html">port(5)</a> table.
-
- <b>o</b> The recipient domain matches <b>$mydestination</b> or
- <b>$inet</b><i>_</i><b>interfaces</b>. The transport and optional nex-
- thop are specified with <b>$local</b><i>_</i><b>transport</b>. The
- default nexthop is the recipient domain.
-
- <b>o</b> The recipient domain matches <b>$virtual</b><i>_</i><b>mail-</b>
- <b>box</b><i>_</i><b>domains</b>. The transport and optional nexthop
- are specified with <b>$virtual</b><i>_</i><b>transport</b>. The default
- nexthop is the recipient domain.
-
- <b>o</b> The recipient domain matches <b>$relay</b><i>_</i><b>domains</b>. The
- transport and optional nexthop are specified with
- <b>$relay</b><i>_</i><b>transport</b>. This overrides the optional nex-
- thop information that is specified with <b>$relayhost</b>.
- The default nexthop is the recipient domain.
-
- <b>o</b> All other destinations. the transport and optional
- nexthop are specified with <b>$relay</b><i>_</i><b>transport</b>. This
- overrides the optional nexthop information that is
- specified with <b>$relayhost</b>. The default nexthop is
+ <a href="transport.5.html">port(5)</a> table. The default delivery method is selected by
+ matching the recipient address domain against one of the
+ following:
+
+ <b>$mydestination</b>
+
+ <b>$inet</b><i>_</i><b>interfaces</b>
+ The transport and optional nexthop are specified
+ with <b>$local</b><i>_</i><b>transport</b>. The default nexthop is the
+ recipient domain.
+
+ <b>$virtual</b><i>_</i><b>alias</b><i>_</i><b>domains</b>
+ The recipient address is undeliverable (user
+ unknown). By definition, all known addresses in a
+ virtual alias domain are aliased to other
+ addresses.
+
+ <b>$virtual</b><i>_</i><b>mailbox</b><i>_</i><b>domains</b>
+ The transport and optional nexthop are specified
+ with <b>$virtual</b><i>_</i><b>transport</b>. The default nexthop is
the recipient domain.
+ <b>$relay</b><i>_</i><b>domains</b>
+ The transport and optional nexthop are specified
+ with <b>$relay</b><i>_</i><b>transport</b>. This overrides the optional
+ nexthop information that is specified with <b>$relay-</b>
+ <b>host</b>. The default nexthop is the recipient domain.
+
+ none of the above
+ The transport and optional nexthop are specified
+ with <b>$default</b><i>_</i><b>transport</b>. This overrides the
+ optional nexthop information that is specified with
+ <b>$relayhost</b>. The default nexthop is the recipient
+ domain.
+
<b>STANDARDS</b>
- None. The command does not interact with the outside
+ None. The command does not interact with the outside
world.
<b>SECURITY</b>
- The <b>trivial-rewrite</b> daemon is not security sensitive. By
- default, this daemon does not talk to remote or local
- users. It can run at a fixed low privilege in a chrooted
+ The <b>trivial-rewrite</b> daemon is not security sensitive. By
+ default, this daemon does not talk to remote or local
+ users. It can run at a fixed low privilege in a chrooted
environment.
<b>DIAGNOSTICS</b>
<b>BUGS</b>
<b>CONFIGURATION</b> <b>PARAMETERS</b>
- The following <b>main.cf</b> parameters are especially relevant
- to this program. See the Postfix <b>main.cf</b> file for syntax
- details and for default values. Use the <b>postfix</b> <b>reload</b>
+ The following <b>main.cf</b> parameters are especially relevant
+ to this program. See the Postfix <b>main.cf</b> file for syntax
+ details and for default values. Use the <b>postfix</b> <b>reload</b>
command after a configuration change.
<b>Miscellaneous</b>
<b>empty</b><i>_</i><b>address</b><i>_</i><b>recipient</b>
- The recipient that is substituted for the null
+ The recipient that is substituted for the null
address.
<b>inet</b><i>_</i><b>interfaces</b>
- The network interfaces that this mail system
- receives mail on. This information is used to
- determine if <i>user</i>@[<i>net.work.addr.ess</i>] is local or
- remote. Mail for local users is given to the
+ The network interfaces that this mail system
+ receives mail on. This information is used to
+ determine if <i>user</i>@[<i>net.work.addr.ess</i>] is local or
+ remote. Mail for local users is given to the
<b>$local</b><i>_</i><b>transport</b>.
<b>mydestination</b>
<b>virtual</b><i>_</i><b>alias</b><i>_</i><b>domains</b>
List of simulated virtual domains (domains with all
- recipients aliased to some other local or remote
+ recipients aliased to some other local or remote
domain).
<b>virtual</b><i>_</i><b>mailbox</b><i>_</i><b>domains</b>
<b>resolve</b><i>_</i><b>unquoted</b><i>_</i><b>address</b>
When resolving an address, do not quote the address
- localpart as per <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a>, so that additional <b>@</b>, <b>%</b>
- or <b>!</b> characters remain visible. This is techni-
+ localpart as per <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a>, so that additional <b>@</b>, <b>%</b>
+ or <b>!</b> characters remain visible. This is techni-
cally incorrect, but allows us to stop relay
- attacks when forwarding mail to a Sendmail primary
+ attacks when forwarding mail to a Sendmail primary
MX host.
<b>relocated</b><i>_</i><b>maps</b>
<b>Routing</b>
<b>local</b><i>_</i><b>transport</b>
- Where to deliver mail for destinations that match
- <b>$mydestination</b> or <b>$inet</b><i>_</i><b>interfaces</b>. The default
+ Where to deliver mail for destinations that match
+ <b>$mydestination</b> or <b>$inet</b><i>_</i><b>interfaces</b>. The default
transport is <b>local:$myhostname</b>.
- Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
+ Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
details. The :<i>nexthop</i> part is optional.
<b>virtual</b><i>_</i><b>transport</b>
- Where to deliver mail for non-local domains that
+ Where to deliver mail for non-local domains that
match <b>$virtual</b><i>_</i><b>mailbox</b><i>_</i><b>domains</b>. The default trans-
port is <b>virtual</b>.
- Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
+ Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
details. The :<i>nexthop</i> part is optional.
<b>relay</b><i>_</i><b>transport</b>
- Where to deliver mail for non-local domains that
- match <b>$relay</b><i>_</i><b>domains</b>. The default transport is
+ Where to deliver mail for non-local domains that
+ match <b>$relay</b><i>_</i><b>domains</b>. The default transport is
<b>relay</b> (which normally is a clone of the <b>smtp</b> trans-
port).
- Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
+ Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
details. The :<i>nexthop</i> part is optional.
<b>default</b><i>_</i><b>transport</b>
- Where to deliver all other non-local mail. The
+ Where to deliver all other non-local mail. The
default transport is <b>smtp</b>.
- Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
+ Syntax is <i>transport</i>:<i>nexthop</i>; see <a href="transport.5.html"><b>transport</b>(5)</a> for
details. The :<i>nexthop</i> part is optional.
<b>parent</b><i>_</i><b>domain</b><i>_</i><b>matches</b><i>_</i><b>subdomains</b>
- List of Postfix features that use <i>domain.tld</i> pat-
- terns to match <i>sub.domain.tld</i> (as opposed to
+ List of Postfix features that use <i>domain.tld</i> pat-
+ terns to match <i>sub.domain.tld</i> (as opposed to
requiring <i>.domain.tld</i> patterns).
<b>relayhost</b>
- The default host to send non-local mail to when no
- host is specified with <b>$relay</b><i>_</i><b>transport</b> or
- <b>$default</b><i>_</i><b>transport</b>, and when the recipient address
+ The default host to send non-local mail to when no
+ host is specified with <b>$relay</b><i>_</i><b>transport</b> or
+ <b>$default</b><i>_</i><b>transport</b>, and when the recipient address
does not match the optional the <a href="transport.5.html"><b>transport</b>(5)</a> table.
<b>transport</b><i>_</i><b>maps</b>
- List of tables with <i>recipient</i> or <i>domain</i> to (<i>trans-</i>
+ List of tables with <i>recipient</i> or <i>domain</i> to (<i>trans-</i>
<i>port,</i> <i>nexthop</i>) mappings.
<b>SEE</b> <b>ALSO</b>
<a href="relocated.5.html">relocated(5)</a> format of the "user has moved" table
<b>LICENSE</b>
- The Secure Mailer license must be distributed with this
+ The Secure Mailer license must be distributed with this
software.
<b>AUTHOR(S)</b>
.fi
By default, Postfix uses one of the following delivery methods.
This may be overruled with the optional transport(5) table.
-.IP \(bu
-The recipient domain matches \fB$mydestination\fR or
-\fB$inet_interfaces\fR. The transport and optional nexthop
+The default delivery method is selected by matching the
+recipient address domain against one of the following:
+.IP \fB$mydestination\fR
+.IP \fB$inet_interfaces\fR
+The transport and optional nexthop
are specified with \fB$local_transport\fR.
The default nexthop is the recipient domain.
-.IP \(bu
-The recipient domain matches \fB$virtual_mailbox_domains\fR.
+.IP \fB$virtual_alias_domains\fR
+The recipient address is undeliverable (user unknown).
+By definition, all known addresses in a virtual alias domain
+are aliased to other addresses.
+.IP \fB$virtual_mailbox_domains\fR
The transport and optional nexthop are specified with
\fB$virtual_transport\fR.
The default nexthop is the recipient domain.
-.IP \(bu
-The recipient domain matches \fB$relay_domains\fR. The
-transport and optional nexthop are specified with
+.IP \fB$relay_domains\fR
+The transport and optional nexthop are specified with
\fB$relay_transport\fR. This overrides the optional nexthop
information that is specified with \fB$relayhost\fR.
The default nexthop is the recipient domain.
-.IP \(bu
-All other destinations. the transport and optional nexthop are
-specified with \fB$relay_transport\fR.
+.IP "none of the above"
+The transport and optional nexthop are specified with
+\fB$default_transport\fR.
This overrides the optional nexthop information that is specified
with \fB$relayhost\fR.
The default nexthop is the recipient domain.
#define VAR_DEST_CON_LIMIT "default_destination_concurrency_limit"
#define _DEST_CON_LIMIT "_destination_concurrency_limit"
-#define DEF_DEST_CON_LIMIT 10
+#define DEF_DEST_CON_LIMIT 20
extern int var_dest_con_limit;
#define VAR_LOCAL_CON_LIMIT "local" _DEST_CON_LIMIT
* Patches change the patchlevel and the release date. Snapshots change the
* release date only, unless they include the same bugfix as a patch release.
*/
-#define MAIL_RELEASE_DATE "20021222"
+#define MAIL_RELEASE_DATE "20021223"
#define VAR_MAIL_VERSION "mail_version"
#define DEF_MAIL_VERSION "2.0.0-" MAIL_RELEASE_DATE
/* .fi
/* By default, Postfix uses one of the following delivery methods.
/* This may be overruled with the optional transport(5) table.
-/* .IP \(bu
-/* The recipient domain matches \fB$mydestination\fR or
-/* \fB$inet_interfaces\fR. The transport and optional nexthop
+/* The default delivery method is selected by matching the
+/* recipient address domain against one of the following:
+/* .IP \fB$mydestination\fR
+/* .IP \fB$inet_interfaces\fR
+/* The transport and optional nexthop
/* are specified with \fB$local_transport\fR.
/* The default nexthop is the recipient domain.
-/* .IP \(bu
-/* The recipient domain matches \fB$virtual_mailbox_domains\fR.
+/* .IP \fB$virtual_alias_domains\fR
+/* The recipient address is undeliverable (user unknown).
+/* By definition, all known addresses in a virtual alias domain
+/* are aliased to other addresses.
+/* .IP \fB$virtual_mailbox_domains\fR
/* The transport and optional nexthop are specified with
/* \fB$virtual_transport\fR.
/* The default nexthop is the recipient domain.
-/* .IP \(bu
-/* The recipient domain matches \fB$relay_domains\fR. The
-/* transport and optional nexthop are specified with
+/* .IP \fB$relay_domains\fR
+/* The transport and optional nexthop are specified with
/* \fB$relay_transport\fR. This overrides the optional nexthop
/* information that is specified with \fB$relayhost\fR.
/* The default nexthop is the recipient domain.
-/* .IP \(bu
-/* All other destinations. the transport and optional nexthop are
-/* specified with \fB$relay_transport\fR.
+/* .IP "none of the above"
+/* The transport and optional nexthop are specified with
+/* \fB$default_transport\fR.
/* This overrides the optional nexthop information that is specified
/* with \fB$relayhost\fR.
/* The default nexthop is the recipient domain.