What's new
Please see the changelog for a full list of changes, and the release blog for more information.
Upgrade notes
This is a major update from the 4.x series. The upgrade process may take longer than usual, as the database is migrated from PostgreSQL 9.6 to 11.1. Depending on queue/quarantine size, disk performance and RAM, the upgrade takes anything from minutes to hours. It's recommended to have at least a few gigabytes of free space on the storage partition. Since this is a critical one-way operation, it's highly recommended to shutdown the system (to have the system in a known state) and take a snapshot, in case the migration should fail.
Because of the new API used by the web administration, hosts which are updated will not be able to browse non-updated systems in the cluster (generating harmless connection warnings). As a consequence, update all remotely connected hosts before updating the host you're logged into if using the "Software update" page.
The configuration will be upgraded in multiple steps; the biggest change is that the catch-all domain will be migrated to be a part of the SMTP server configuration. Further, the RCPT TO scripts are migrated to have an explicit Reject() call at the end, since the new default action has been changed to accept.
Important changes
- A new REST API (1.0.0) was introduced in this version. The SOAP API will be available in all releases until end of Q3 2019. Subsequent releases may remove it.
- Two processes were renamed; dropping the "mail" prefix before dlpd and queued affecting the log output and possible the clear HSL cache API in case the program filter was used.
- The Quarantine() function's fourth argument no longer accepts a boolean value. This has produced a deprecation warning in the critical log since 4.0.
- Removed
Deliver()
from post-delivery script. This has produced a deprecation warning in the critical log since 4.4.
New recommendations
We recommend that following changes are performed in order to prepare for future deprecations.
LDAP
The LDAP functions ldap_search() and ldap_bind() are very limited in their use, and will be deprecated in favor of the new LDAP class. The major difference between these two are that the LDAP class does not support LDAP profiles (in the configuration); properties are instead given directly when calling the functions.
File functions
The file functionality have be revised to match the most common usage patterns. The file(), in_file() and file_get_contents() functions will be deprecated in the future. In most cases included files holds a data structure (CSV, JSON or line-based text). Hence we've improved the way of importing data structures (text, JSON and CSV) using the import keyword. The data may be imported into an array at compile time, and we've added array_find() for your convenience. This provides significant performance improvements over old patterns. The code editor now have a powerful graphical CSV tool. There's also a new File class for run-time file operations.
// old pattern
if (in_file($senderip, "file.txt")) Accept();
// new pattern
import $bwlist from "file.txt" with ["array" => true];
if (array_includes($senderip, $bwlist)) Accept();
Renamed variables
There is a new $transaction variable, which is gradually populated during the SMTP stages (MAIL FROM, RCPT TO and DATA). It replaces $messageid, $sender and $recipient, as well as adding new fields. The old variable names will be kept indefinitely as aliases, but it's however recommended to write new code using the new names to be up to date with the current standard.
Renamed functions
A lot of functions was renamed in order to be more consistent. The old function names will be kept indefinitely as aliases, but it's however recommended to write new code using the new names to be up to date with the current standard.
Old name | New name | Notes |
count | length | Return the length of both a string or an array |
strlen | length | |
strpos | str_find | |
strrpos | str_rfind | |
substr | str_slice | |
strtolower | str_lower | |
strtoupper | str_upper | |
trim | str_strip | |
explode | str_split | Swapped argument order (string, delimiter) |
rand | random_number | |
dns* | dns | Added type option ("ptr" doesn't reverse) |
in_array | array_includes | array_includes does strict matching |
implode | array_join | Swapped argument order (array, separator) |
range | array_range | Ranges are now half-open (does not include end) |
is_subdomain | domain_includes | |
in_network | inet_includes |
Comments
0 comments
Article is closed for comments.