1The stable Postfix release is called postfix-2.9.x where 2=major 2release number, 9=minor release number, x=patchlevel. The stable 3release never changes except for patches that address bugs or 4emergencies. Patches change the patchlevel and the release date. 5 6New features are developed in snapshot releases. These are called 7postfix-2.10-yyyymmdd where yyyymmdd is the release date (yyyy=year, 8mm=month, dd=day). Patches are never issued for snapshot releases; 9instead, a new snapshot is released. 10 11The mail_release_date configuration parameter (format: yyyymmdd) 12specifies the release date of a stable release or snapshot release. 13 14If you upgrade from Postfix 2.7 or earlier, read RELEASE_NOTES-2.8 15before proceeding. 16 17Major changes - critical 18------------------------ 19 20[Incompat 20110321] You need to "postfix reload" after upgrade from 21snapshot 20110320 or earlier. The hash_queue_names algorithm was 22changed to provide better performance with long queue IDs. 23 24[Incompat 20110313] Use "postfix reload" after "make upgrade" on a 25running Postfix system. This is needed because the protocol between 26postscreen(8) and dnsblog(8) has changed. 27 28Major changes - library API 29--------------------------- 30 31[Incompat 20110130] The VSTREAM error flags are now split into 32separate read and write error flags. As a result of this change, 33all programs that use Postfix VSTREAMs MUST be recompiled. 34 35Major changes - compatibility 36----------------------------- 37 38[Incompat 20111012] For consistency with the SMTP standard, the 39(client-side) smtp_line_length_limit default value was increased 40from 990 characters to 999 (i.e. 1000 characters including <CR><LF>). 41Specify "smtp_line_length_limit = 990" to restore historical Postfix 42behavior. 43 44[Incompat 20111012] To simplify integration with third-party 45applications, the Postfix sendmail command now always transforms 46all input lines ending in <CR><LF> into UNIX format (lines ending 47in <LF>). Specify "sendmail_fix_line_endings = strict" to restore 48historical Postfix behavior (i.e. convert all input lines ending 49in <CR><LF> only if the first line ends in <CR><LF>). 50 51[Incompat 20111106] To work around broken remote SMTP servers, the 52Postfix SMTP client by default no longer appends the "AUTH=<>" 53option to the MAIL FROM command. Specify "smtp_send_dummy_mail_auth 54= yes" to restore the old behavior. 55 56Major changes - gradual degradation 57----------------------------------- 58 59[Incompat 20120114] Logfile-based alerting systems may need to be 60updated to look for "error" messages in addition to "fatal" messages. 61Specify "daemon_table_open_error_is_fatal = yes" to get the historical 62behavior (immediate termination with "fatal" message). 63 64[Feature 20120114] Instead of terminating immediately with a "fatal" 65message when a database file can't be opened, a Postfix daemon 66program now logs an "error" message, and continues execution with 67reduced functionality. For the sake of sanity, the number of 68"errors" over the life of a process is limited to 13. 69 70Features that don't depend on the unavailable table will continue 71to work; attempts to use features that depend on the table will 72fail, and will be logged with a "warning" message. 73 74[Feature 20120108] Instead of terminating with a fatal error, the 75LDAP, *SQL and memcache clients now handle table lookup errors in 76the "domain" feature, instead of terminating with a fatal error. 77 78[Feature 20120102] Degrade gradually when some or all network 79protocols specified with inet_protocols are unavailable, instead 80of terminating with a fatal error. This eliminates build errors on 81non-standard systems where opening an IPv4 socket results in an 82error, and on non-standard systems where opening an IPv6 socket 83results in an error. In the worst case, the master daemon will log 84a message that it disables all type "inet" services. This will still 85allow local submission and local delivery. 86 87[Feature 20111222] Instead of terminating with a fatal error, the 88Postfix SMTP server now handles errors with database lookups in 89mynetworks, TLS client certificate tables, debug_peer_list, 90smtpd_client_event_limit_exceptions, permit_mx_backup_networks and 91local_header_rewrite_clients, and reports "server local data error" 92or "temporary lookup error". 93 94[Feature 20111229] Instead of terminating with a fatal error, the 95trivial-rewrite server now handles errors with database lookups in 96virtual_alias_domains, relay_domains, virtual_mailbox_domains. This 97means fewer occasions where trivial-rewrite clients (such as the 98SMTP server) will appear to hang. 99 100Major changes - long queue IDs 101------------------------------ 102 103Postfix 2.9 introduces support for non-repeating queue IDs (also 104used as queue file names). These names are encoded in a mix of upper 105case, lower case and decimal digit characters. Long queue IDs are 106disabled by default to avoid breaking tools that parse logfiles and 107that expect queue IDs with the smaller [A-F0-9] character set. 108 109[Incompat 20110320] If you enable support for long queue file names, 110you need to be aware that these file names are not compatible with 111Postfix <= 2.8. If you must migrate back to Postfix <= 2.8, you 112must first convert all long queue file names into short names, 113otherwise the old Postfix version will complain. 114 115The conversion procedure before migration to Postfix <= 2.8 is: 116 117 # postfix stop 118 # postconf enable_long_queue_ids=no 119 # postsuper 120 121Run the postsuper command repeatedly until it no longer reports 122queue file name changes. 123 124[Feature 20110320] Support for long, non-repeating, queue IDs (queue 125file names). The benefit of non-repeating names is simpler logfile 126analysis, and easier queue migration (if you don't merge different 127queues, there is no need to run "postsuper" to change queue file 128names that don't match their message file inode number). 129 130Specify "enable_long_queue_ids = yes" to enable the feature. This 131does not change the names of existing queue files. See postconf(5) 132or postconf.5.html#enable_long_queue_ids for a detailed description 133of the differences with the old short queue IDs. 134 135This changes new Postfix queue IDs from the short form 0FCEE9247A9 136into the longer form 3Ps0FS1Zhtz1PFjb, and changes new Message-ID 137header values from YYMMDDHHMMSS.queueid@myhostname into the shorter 138form queueid@myhostname. 139 140Major changes - memcache 141------------------------ 142 143[Feature 20111209] memcache lookup and update support. This provides 144a way to share postscreen(8) or verify(8) caches between Postfix 145instances. See MEMCACHE_README and memcache_table(5) for details 146and limitations. 147 148[Feature 20111213] Support for a persistent backup database in the 149memcache client. The memcache client updates the memcache whenever 150it looks up or modifies information in the persistent database. 151 152Major changes - postconf 153------------------------ 154 155The postconf command was restructured - it now warns about unused 156parameter name=value settings in main.cf or master.cf (likely to 157be mistakes), it now understands "dynamic" parameter names such as 158parameters whose name depends on the name of a master.cf entry, and 159it can display main.cf and master.cf in a more user-friendly format. 160 161[Feature 20120117] support for legacy database parameter names 162(main.cf parameter names that are generated by prepending a suffix 163to the database name). 164 165[Feature 20111118] The "postconf -M" (display master.cf) command 166now supports filtering. For example, specify "postconf -M inet" 167to display only services that listen on the network. 168 169[Feature 20111113] postconf support to warn about unused "name=value" 170entries in main.cf, and about unused "-o name=value" entries in 171master.cf. This should help to eliminate common errors with mis-typed 172names. 173 174[Feature 20111108] postconf support for parameter names that are 175generated automatically from master.cf entries (delivery agents, 176spawn services), and for parameter names that are defined with 177main.cf smtpd_restriction_classes. 178 179[Feature 20111106] "postconf -M" support to print master.cf entries, 180and "postconf -f" support to fold long main.cf or master.cf lines 181for human readability. 182 183Major changes - trickle defense 184------------------------------- 185 186[Feature 20110212] Support for per-record deadlines. These change 187the behavior of Postfix timeout parameters, from a time limit per 188read or write system call, to a time limit to send or receive a 189complete record (an SMTP command line, SMTP response line, SMTP 190message content line, or TLS protocol message). This limits the 191impact from hostile peers that trickle data one byte at a time. 192 193The new configuration parameters and their default settings are: 194smtpd_per_record_deadline (normal: no, overload: yes), 195smtp_per_record_deadline (no), and lmtp_per_record_deadline (no). 196 197Note: when per-record deadlines are enabled, a short time limit may 198cause problems with TLS over very slow network connections. The 199reason is that a TLS protocol message can be up to 16 kbytes long 200(with TLSv1), and that an entire TLS protocol message must be sent 201or received within the per-record deadline. 202 203Per-record deadlines were introduced with postscreen(8) in Postfix 2042.8. This program does not receive mail, and therefore it has no 205problems with TLS over slow connections. 206 207Major changes - postscreen 208-------------------------- 209 210[Feature 20111211] The proxymap(8) server can now be used to share 211postscreen(8) or verify(8) caches between Postfix instances. Support 212for proxymap-over-TCP, to share a Postfix database between hosts, 213is expected to be completed in the Postfix 2.10 development cycle. 214 215[Feature 20111209] memcache lookup and update support. This provides 216a way to share postscreen(8) or verify(8) caches between Postfix 217instances. 218 219[Feature 20110228] postscreen(8) support to force remote SMTP clients 220to implement proper MX lookup policy. By listening on both primary 221and backup MX addresses, postscreen(8) can deny the temporary 222whitelist status to clients that connect only to backup MX hosts, 223and prevent them from talking to a Postfix SMTP server process. 224 225Example: when 1.2.3.4 is a local backup IP address, specify 226"postscreen_whitelist_interfaces = !1.2.3.4 static:all". 227 228Major changes - tls 229------------------- 230 231[Incompat 20111205] Postfix now logs the result of successful TLS 232negotiation with TLS logging levels of 0. See the smtp_tls_loglevel 233and smtpd_tls_loglevel descriptions in the postconf(5) manpage for 234other minor differences. 235 236[Feature 20111205] Support for TLS public key fingerprint matching 237in the Postfix SMTP client (in smtp_tls_policy_maps) and server (in 238check_ccert access maps). Public key fingerprints are inherently 239more specific than fingerprints over the entire certificate. 240 241[Feature 20111205] Revision of Postfix TLS logging. The main 242difference is that Postfix now logs the result of successful TLS 243negotiation with TLS logging levels of 0. See the smtp_tls_loglevel 244and smtpd_tls_loglevel descriptions in the postconf(5) manpage for 245other minor differences. 246 247Major changes - sasl authentication 248----------------------------------- 249 250[Incompat 20111218] To support external SASL authentication, e.g., 251in an NGINX proxy daemon, the Postfix SMTP server now always checks 252the smtpd_sender_login_maps table, even without having 253"smtpd_sasl_auth_enable = yes" in main.cf. 254 255[Feature 20111218] Support for external SASL authentication via the 256XCLIENT command. This is used to accept SASL authentication from 257an SMTP proxy such as NGINX. This support works even without having 258to specify "smtpd_sasl_auth_enable = yes" in main.cf. 259 260[Incompat 20111106] To work around broken remote SMTP servers, the 261Postfix SMTP client by default no longer appends the "AUTH=<>" 262option to the MAIL FROM command. Specify "smtp_send_dummy_mail_auth 263= yes" to restore the old behavior. 264 265Major changes - large file support 266---------------------------------- 267 268[Feature 20110219] Postfix now uses long integers for message_size_limit, 269mailbox_size_limit and virtual_mailbox_limit. On LP64 systems (64-bit 270long and pointer, but 32-bit integer), these limits can now exceed 2712GB. 272 273Major changes - ipv6 274-------------------- 275 276[Incompat 20110918] The following changes were made in default 277settings, in preparation for general availability of IPv6: 278 279- The default inet_protocols value is now "all" instead of "ipv4", 280 meaning use both IPv4 and IPv6. 281 282 To avoid an unexpected loss of performance for sites without 283 global IPv6 connectivity, the commands "make upgrade" and "postfix 284 upgrade-configuration" now append "inet_protocols = ipv4" to 285 main.cf when no explicit inet_protocols setting is already present. 286 This workaround will be removed in a future release. 287 288- The default smtp_address_preference value is now "any" instead 289 of "ipv6", meaning choose randomly between IPv6 and IPv4. With 290 this the Postfix SMTP client will have more success delivering 291 mail to sites that have problematic IPv6 configurations. 292 293Major changes - address verification 294------------------------------------ 295 296[Feature 20111211] The proxymap(8) server can now be used to share 297postscreen(8) or verify(8) caches between Postfix instances. Support 298for proxymap-over-TCP, to share a Postfix database between hosts, 299is expected to be completed in the Postfix 2.10 development cycle. 300 301[Feature 20111209] memcache lookup and update support. This provides 302a way to share postscreen(8) or verify(8) caches between Postfix 303instances. 304 305[Feature 20111203] Support for time-dependent sender addresses 306of address verification probes. The default address, double-bounce, 307may end up on spammer blacklists. Although Postfix discards mail 308for this address, such mail still uses up network bandwidth and 309server resources. Specify an address_verify_sender_ttl value of 310several hours or more to frustrate address harvesting. 311 312Major changes - session transcript notification 313----------------------------------------------- 314 315[Incompat 20120114] By default the Postfix SMTP server no longer 316reports transcripts of sessions where a client command is rejected 317because a lookup table is unavailable. Postfix now implements gradual 318degradation, for example, the SMTP server keeps running instead of 319terminating with a fatal error. This change in error handling would 320result in a very large number of "transcript of session" email 321notifications when an LDAP or *SQL server goes down). 322 323To receive such reports, add the new "data" class to the notify_classes 324parameter value. The reports will be sent to the error_notice_recipient 325address as before. This class is also used by the Postfix SMTP 326client to report about sessions that fail because a table is 327unavailable. 328 329Major changes - logging 330---------------------------------------- 331 332[Incompat 20120114] Logfile-based alerting systems may need to be 333updated to look for "error" messages in addition to "fatal" messages. 334Specify "daemon_table_open_error_is_fatal = yes" to get the historical 335behavior (immediate termination with "fatal" message). 336 337[Incompat 20111214] Logfile-based analysis tools may need to be 338updated. The submission and smtps examples in the sample master.cf 339file were updated to make their logging easier to distinguish. 340 341See the source file pflogsumm_quickfix.txt for a "quick fix". 342 343[Incompat 20111205] Postfix now logs the result of successful TLS 344negotiation with TLS logging levels of 0. See the smtp_tls_loglevel 345and smtpd_tls_loglevel descriptions in the postconf(5) manpage for 346other minor differences. 347 348[Incompat 20110219] The Postfix SMTP and QMQP servers now log 349"hostname X does not resolve to address Y", when a "reverse hostname" 350lookup result does not resolve to the client IP address. Until now 351these servers logged "Y: hostname X verification failed" or "Y: 352address not listed for hostname X" which people found confusing. 353