+ 5. There is a new variable called $smtp_count_at_connection_start. The name
+ is deliberately long, in order to emphasize what the contents are. This
+ variable is set greater than zero only in processes spawned by the Exim
+ daemon for handling incoming SMTP connections. When the daemon accepts a
+ new connection, it increments this variable. A copy of the variable is
+ passed to the child process that handles the connection, but its value is
+ fixed, and never changes. It is only an approximation of how many incoming
+ connections there actually are, because many other connections may come and
+ go while a single connection is being processed. When a child process
+ terminates, the daemon decrements the variable.
+
+ 6. There's a new control called no_pipelining, which does what its name
+ suggests. It turns off the advertising of the PIPELINING extension to SMTP.
+ To be useful, this control must be obeyed before Exim sends its response to
+ an EHLO command. Therefore, it should normally appear in an ACL controlled
+ by acl_smtp_connect or acl_smtp_helo.
+
+ 7. There are two new variables called $sending_ip_address and $sending_port.
+ These are set whenever an SMTP connection to another host has been set up,
+ and they contain the IP address and port of the local interface that is
+ being used. They are of interest only on hosts that have more than on IP
+ address that want to take on different personalities depending on which one
+ is being used.
+
+ 8. The expansion of the helo_data option in the smtp transport now happens
+ after the connection to the server has been made. This means that it can
+ use the value of $sending_ip_address (see 7 above) to vary the text of the
+ message. For example, if you want the string that is used for helo_data to
+ be obtained by a DNS lookup of the interface address, you could use this:
+
+ helo_data = ${lookup dnsdb{ptr=$sending_ip_address}{$value}\
+ {$primary_hostname}}
+
+ The use of helo_data applies both to sending messages and when doing
+ callouts.
+
+ 9. There is a new expansion operator ${rfc2047d: that decodes strings that
+ are encoded as per RFC 2047. Binary zero bytes are replaced by question
+ marks. Characters are converted into the character set defined by
+ headers_charset. Overlong RFC 2047 "words" are not recognized unless
+ check_rfc2047_length is set false.
+
+10. There is a new log selector called "pid", which causes the current process
+ id to be added to every log line, in square brackets, immediately after the
+ time and date.
+
+11. Exim has been modified so that it flushes SMTP output before implementing
+ a delay in an ACL. It also flushes the output before performing a callout,
+ as this can take a substantial time. These behaviours can be disabled by
+ obeying control = no_delay_flush or control = no_callout_flush,
+ respectively, at some earlier stage of the connection. The effect of the
+ new default behaviour is to disable the PIPELINING optimization in these
+ situations, in order to avoid unexpected timeouts in clients.
+
+12. There are two new expansion conditions that iterate over a list. They are
+ called forany and forall, and they are used like this:
+
+ ${if forany{<a list>}{<a condition>}{<yes-string>}{<no-string>}}
+ ${if forall{<a list>}{<a condition>}{<yes-string>}{<no-string>}}
+
+ The first argument is expanded, and the result is treated as a list. By
+ default, the list separator is a colon, but it can be changed by the normal
+ method. The second argument is interpreted as a condition that is to be
+ applied to each item in the list in turn. During the interpretation of the
+ condition, the current list item is placed in a variable called $item.
+
+ - For forany, interpretation stops if the condition is true for any item,
+ and the yes-string is then expanded. If the condition is false for all
+ items in the list, the no-string is expanded.
+
+ - For forall, interpration stops if the condition is false for any item,
+ and the no-string is then expanded. If the condition is true for all
+ items in the list, the yes-string is expanded.
+
+ Note that negation of forany means that the condition must be false for all
+ items for the overall condition to succeed, and negation of forall means
+ that the condition must be false for at least one item.
+
+ In this example, the list separator is changed to a comma:
+
+ ${if forany{<, $recipients}{match{$item}{^user3@}}{yes}{no}}
+
+ Outside a forany/forall condition, the value of $item is an empty string.
+ Its value is saved and restored while forany/forall is being processed, to
+ enable these expansion items to be nested.
+
+13. There's a new global option called dsn_from that can be used to vary the
+ contents of From: lines in bounces and other automatically generated
+ messages ("delivery status notifications" - hence the name of the option).
+ The default setting is:
+
+ dsn_from = Mail Delivery System <Mailer-Daemon@$qualify_domain>
+
+ The value is expanded every time it is needed. If the expansion fails, a
+ panic is logged, and the default setting is used.
+
+14. The smtp transport has a new option called hosts_avoid_pipelining. It can
+ be used to suppress the use of PIPELINING to certain hosts, while still
+ supporting the other SMTP extensions (cf hosts_avoid_tls).
+