+Exim version 4.53
+-----------------
+
+TK/01 Added the "success_on_redirect" address verification option. When an
+ address generates new addresses during routing, Exim will abort
+ verification with "success" when more than one address has been
+ generated, but continue to verify a single new address. The latter
+ does not happen when the new "success_on_redirect" option is set, like
+
+ require verify = recipient/success_on_redirect/callout=10s
+
+ In that case, verification will succeed when a router generates a new
+ address.
+
+PH/01 Support for SQLite database lookups has been added. This is another
+ query-style lookup, but it is slightly different from the others because
+ a file name is required in addition to the SQL query. This is because an
+ SQLite database is a single file and there is no daemon as in other SQL
+ databases. The interface to Exim requires the name of the file, as an
+ absolute path, to be given at the start of the query. It is separated
+ from the query by white space. This means that the path name cannot
+ contain white space. Here is a lookup expansion example:
+
+ ${lookup sqlite {/some/thing/sqlitedb \
+ select name from aliases where id='ph10';}}
+
+ In a list, the syntax is similar. For example:
+
+ domainlist relay_domains = sqlite;/some/thing/sqlitedb \
+ select * from relays where ip='$sender_host_address';
+
+ The only character affected by the ${quote_sqlite: operator is a single
+ quote, which it doubles.
+
+ The SQLite library handles multiple simultaneous accesses to the database
+ internally. Multiple readers are permitted, but only one process can
+ update at once. Attempts to access the database while it is being updated
+ are rejected after a timeout period, during which the SQLite library
+ waits for the lock to be released. In Exim, the default timeout is set
+ to 5 seconds, but it can be changed by means of the sqlite_lock_timeout
+ option.
+
+ Note that you must set LOOKUP_SQLITE=yes in Local/Makefile in order to
+ obtain SQLite support, and you will also need to add -lsqlite3 to the
+ EXTRALIBS setting. And of course, you have to install SQLite on your
+ host first.
+
+PH/02 The variable $message_id is now deprecated, to be replaced by
+ $message_exim_id, which makes it clearer which ID is being referenced.
+
+PH/03 The use of forbid_filter_existstest now also locks out the use of the
+ ${stat: expansion item.
+
+PH/04 The IGNOREQUOTA extension to the LMTP protocol is now available in both
+ the lmtp transport and the smtp transport running in LMTP mode. In the
+ lmtp transport there is a new Boolean option called ignore_quota, and in
+ the smtp transport there is a new Boolean option called
+ lmtp_ignore_quota. If either of these options is set TRUE, the string
+ "IGNOREQUOTA" is added to RCPT commands when using the LMTP protocol,
+ provided that the server has advertised support for IGNOREQUOTA in its
+ response to the LHLO command.
+
+PH/05 Previously, if "verify = helo" was set in an ACL, the condition was true
+ only if the host matched helo_try_verify_hosts, which caused the
+ verification to occur when the EHLO/HELO command was issued. The ACL just
+ tested the remembered result. Now, if a previous verification attempt has
+ not happened, "verify = helo" does it there and then.
+
+PH/06 It is now possible to specify a port number along with a host name or
+ IP address in the list of hosts defined in the manualroute or
+ queryprogram routers, fallback_hosts, or the "hosts" option of the smtp
+ transport. These all override any port specification on the transport.
+ The relatively standard syntax of using a colon separator has been
+ adopted, but there are some gotchas that need attention:
+
+ * In all these lists of hosts, colon is the default separator, so either
+ the colon that specifies a port must be doubled, or the separator must
+ be changed. The following two examples have the same effect:
+
+ fallback_hosts = host1.tld::1225 : host2.tld::1226
+ fallback_hosts = <; host1.tld:1225 ; host2.tld:1226
+
+ * When IPv6 addresses are involved, it gets worse, because they contain
+ colons of their own. To make this case easier, it is permitted to
+ enclose an IP address (either v4 or v6) in square brackets if a port
+ number follows. Here's an example from a manualroute router:
+
+ route_list = * "</ [10.1.1.1]:1225 / [::1]:1226"
+
+ If the "/MX" feature is to be used as well as a port specifier, the port
+ must come last. For example:
+
+ route_list = * dom1.tld/mx::1225
+
+PH/07 $smtp_command_argument is now set for all SMTP commands, not just the
+ non-message ones. This makes it possible to inspect the complete command
+ for RCPT commands, for example.
+
+PH/08 The ${eval expansion now supports % as a "remainder" operator.
+
+PH/09 There is a new ACL condition "verify = not_blind". It checks that there
+ are no blind (bcc) recipients in the message. Every envelope recipient
+ must appear either in a To: header line or in a Cc: header line for this
+ condition to be true. Local parts are checked case-sensitively; domains
+ are checked case-insensitively. If Resent-To: or Resent-Cc: header lines
+ exist, they are also checked. This condition can be used only in a DATA
+ or non-SMTP ACL.
+
+ There are, of course, many legitimate messages that make use of blind
+ (bcc) recipients. This check should not be used on its own for blocking
+ messages.
+