The stable Postfix release is called postfix-2.2.x where 2=major
release number, 2=minor release number, x=patchlevel.  The stable
release never changes except for patches that address bugs or
emergencies. Patches change the patchlevel and the release date.

New features are developed in snapshot releases. These are called
postfix-2.3-yyyymmdd where yyyymmdd is the release date (yyyy=year,
mm=month, dd=day).  Patches are never issued for snapshot releases;
instead, a new snapshot is released.

The mail_release_date configuration parameter (format: yyyymmdd)
specifies the release date of a stable release or snapshot release.

Incompatibility with Postfix 2.1 and earlier
============================================

If you upgrade from Postfix 2.1 or earlier, read RELEASE_NOTES-2.2
before proceeding.

Incompatibility with snapshot 20050715
======================================

Internal interfaces have changed; this may break third-party patches
because the text of function argument and result type definitions
has changed.  The type of buffer lengths and offsets were changed
from "(unsigned) int" (32 bit on 32-bit and LP64 systems) to
"(s)size_t" (64 bit on LP64 systems, 32 bit on 32-bit systems).

Otherwise, this change makes no difference on 32-bit systems. On
LP64 systems, however, software may mis-behave 1) when Postfix is
linked with pre-compiled code that was compiled with old Postfix
interface definitions and 2) when compiling Postfix source that was
modified by a third-party patch: incorrect code may be generated
when the patch passes the wrong integer argument type in contexts
that disable automatic argument type conversions.  Examples of such
contexts are formatting with printf-like arguments, and invoking
functions that write Postfix request or reply attributes across
inter-process communication channels.  Unfortunately, gcc does not
report "(unsigned) int" versus "(s)size_t" format string argument
mis-matches on 32-bit systems; they can be found only on 64-bit
systems.

Major changes with snapshot 20050715 
====================================

Improved portability to LP64 systems, by converting the type of
buffer lengths and offsets from "(unsigned) int" to "(s)size_t".
This change has zero effect on 32-bit systems. On LP64 platforms,
however, this change not only eliminates some obscure portability
bugs, it also eliminates unnecessary conversions between 32/64 bit
integer types, because many system library routines take "(s)size_t"
arguments or return "(s)size_t" values.

Incompatibility with snapshot 20050707
======================================

The connection cache protocol is changed. You may need to "postfix
reload" after upgrading.

Incompatibility with snapshot 20050627
======================================

The Postfix SMTP client no longer applies the smtp_mx_session_limit
to non-permanent errors during the TCP, SMTP, HELO or TLS handshake.
Previous versions did that only with TCP and SMTP handshake errors.

Incompatibility with snapshot 20050622
======================================

The Postfix SMTP client by default limits the number of MX server
addresses to smtp_mx_address_limit=5. Previously this limit was
disabled by default. The new limit prevents Postfix from spending
lots of time trying to connect to lots of bogus MX servers.

The Postfix SMTP error handling of [45]XX server greetings was
cleaned up. The server reply is now properly reported.

Incompatibility with snapshot 20050615
======================================

Many internal protocols have changed. You must reload Postfix or
else the queue manager and delivery agents will complain about
unexpected request and reply attributes.

The new DSN support conflicts with VERP support. For Sendmail
compatibility, Postfix now uses the sendmail -V command line option
for DSN.  In order to request VERP style delivery, you must now
specify -XV instead of -V.  The Postfix sendmail command will
recognize if you try to use -V for VERP-style delivery.  It will
do the right thing and will remind you of the new syntax.

The queue file format is backwards compatible (again) with Postfix
2.2. Postfix 2.3 stores attributes that older versions will ignore.

Major changes with snapshot 20050615
====================================

DSN support as described in RFC 3461 .. RFC 3464. This gives senders
control over successful and failed delivery notifications.  DSN
involves extra parameters to the SMTP MAIL FROM and RCPT TO commands,
as well as extra Postfix sendmail command line options that provide
a sub-set of the functions of those extra SMTP command parameters.

See DSN_README for details. Some implementation notes are in
DSN_NOTES, in the top-level source code directory.

Major changes with snapshot 20050510
====================================

This release improves usability of enhanced status codes in Postfix
access tables, RBL reply templates and in transport maps that use
the error(8) delivery agent.

- When the SMTP server rejects a sender address, it transforms a
  recipient DSN status (e.g., 4.1.1-4.1.6) into the corresponding
  sender DSN status, and vice versa.

- When the SMTP server rejects non-address information (such as the
  HELO command parameter or the client hostname/address), it
  transforms a sender or recipient DSN status into a generic
  non-address DSN status (e.g., 4.0.0).

These transformations are needed when the same access table or RBL
reply template are used for client, helo, sender, or recipient
restrictions; or when the same error(8) mailer information is used
for both senders and recipients.

Incompatibility with snapshot 20050503
======================================

The format of some "warning:" messages in the maillog has changed
so that they are easier to sort:

- The logging now talks about "access table", instead of using three
different expressions "access table", "access map" and "SMTPD access
map" for the same thing.

- "non-SMTP command" is now logged BEFORE the client name/address
and the offending client input, instead of at the end.

Major change with snapshot 20050427+DSN
=======================================

This is experimental DSN support added to snapshot 20050427.  The
code is not for production purposes; it is not fully tested, some
names and interfaces are still rough around the edges, and it does
not update the oqmgr so you have to use qmgr instead.  Some
implementation notes and open issues are described in the
DSN_SUPPORT_README file (top-level directory).

Incompatibility with snapshot 20050329
======================================

If you use TLS, you need to execute "postfix reload" because the
TLS manager protocol has changed.

Incompatibility with snapshot 20050328
======================================

The logging format has changed. Postfix delivery agents now log the
RFC 3463 enhanced status code as "dsn=x.y.z" where y and z can be
up to three digits each. See the file pfloggsum-dsn-patch for an
update to the pfloggsum script.

After you upgrade from Postfix 2.2 or 2.3 you need to execute
"postfix reload", otherwise you will keep running the old Postfix
queue manager, which gives no special treatment to the enhanced
status codes that it receives from Postfix delivery agents.

Major changes with snapshot 20050328
====================================

This release introduces support for RFC 3463 enhanced status codes.
For example, status code 5.1.1 means "recipient unknown". Postfix
recognizes enhanced status codes in remote server replies, generates
enhanced status codes while handling email, and reports enhanced
status codes in non-delivery notifications.  This improves the user
interaction with mail clients that hide the text of error messages
from users.

You can, but don't have to, specify RFC 3463 enhanced status codes
in the output from commands that receive mail from a pipe. If a
command terminates with non-zero exit status, and an enhanced status
code is present at the beginning of the command output, then that
status code takes precedence over the non-zero exit status.

You can, but don't have to, specify RFC 3463 enhanced status codes
in Postfix access maps, header/body_checks REJECT actions, or in
RBL replies.  For example:

    REJECT 5.7.1 You can't go here from there

The status 5.7.1 means "no authorization, message refused", and is
the default for access maps, header/body_checks REJECT actions, and
for RBL replies.

If you specify your own enhanced status code, the Postfix SMTP
server will automatically change a leading '5' digit (hard error)
into '4' where appropriate.  This is needed, for example, with
soft_bounce=yes.
