New Features in Exim
--------------------

This file contains descriptions of new features that have been added to Exim,
but have not yet made it into the main manual (which is most conveniently
updated when there is a relatively large batch of changes). The ChangeLog file
contains a brief listing of *all* changes, including bug fixes.

When the manual is up-to-date with the code and there have been a lot of recent
changes, the more important ones may be listed here for convenient reference.
Otherwise this file will contain just these two introductory paragraphs.

Version 1.82a (OS/2 only)
-------------------------

1. Friso Kuipers's Ultimail compatibility package is now included with
Exim. See the ultimail-exim.zip file in the \exim directory for more
details.

2. A temporary patch has been made to the pipe transport to allow you to
use programs that require environment variables for their configuration; the
transport no longer sets up a special environment for these subprocesses.
This is a temporary measure, and will be replaced by a new pipe transport
option to add environment variables to the default set.

3. Based on Joe Vaughan's <joev@eunet.ie> patch, it is now possible for a
system filter (only) to add a header to an incoming message (for example, to
allow a user's filter to match on this header after it has been added by a
spam-checking system filter).

Example:

  if ($h_X-Advertisement is not "") then
    excuse "Header X-Advertisement is set: $H-X-Advertisement"
  endif

This puts an X-Filter-Excuse header with the specified text (more than one if
called multiple times) into the message headers.

4. Added Nigel Metheringham's token handling patch. This adds a new string
handling operator:

${extract {field} {separator} {string}}

This operator extracts a numbered field from a string that is divided by
tokens - for example a line from /etc/passwd is divided by colon characters
The first field is numbered one.  It returns an empty string if the field
number is <= 0, or if there are insufficient tokens in the string.

5. Some support for drive letters is here at last! It's not all here, but
some is. Exim now supports in many cases an OS/2 style absolute pathname with
an extra preceding slash - where Exim states that an absolute pathname is
required, either an OS/2 drive-relative pathname:

/exim/configure

or a drive-included pathname with an extra slash:

/e:/exim/configure

will be permitted.

This is operational in many places, most notably in alias files. However, there
are three types of pathname option where it is not yet operative, so please
don't try to use it there; namely, *directory* specifications (such as the
spool_directory option), the pathnames of executables to be run by Exim,
and the HOMEBASE environment variable.

Hopefully in the next release, though!


Version 1.82
------------

1. The "quote" operator in expansion strings permits full stops (periods)
without quoting (omitted by oversight).


Version 1.81
------------

1. The option "--" is supported. It causes any subsequent command line items to
be treated as arguments rather than options.


Some of the new things in version 1.80
--------------------------------------

1. Support for RBL (Realtime Blocking List).

2. Commas and semicolons no longer required in driver configurations, and
option ordering requirements are relaxed.

3. Delay warnings can be given after specified times, not just "every x", and
they can be made conditional on features of the message (e.g. not if
precendence is bulk).

4. The generic router option "self" can be set to the value "local". This
causes the address to be passed over to the directors, as if its domain were a
local domain. This can be used, for example, to treat all domains whose lowest
MX records point to the host as local domains.

5. When a host specified in "hosts" or "fallback_hosts" for the smtp transport
turns out to be the local host, Exim freezes the message by default. There is
now an option called "allow_localhost", which causes it to go on and do the
delivery anyway.

6. The "transport" option on directors and routers can now be given as an
expandable string, thus allowing transports to be dynamically selected.

7. Routers and directors have a generic option called "condition". This
specifies a configurable test that has to succeed before the driver is called.

8. When a reverse lookup is necessary in order to get a host name from an IP
address while testing a host list such as sender_host_accept, failure of the
lookup normally causes Exim to reject the host. That is, in an "accept" list
it's as though the host is not in the list, and in a "reject" list it's as
though it is in the list. There are some circumstances where there is a
requirement to be more lax. A host list can now contain a special item
consisting of the text "+allow_unknown". If a reverse lookup is necessary for
checking any subsequent items in the list, and the lookup fails, then the
opposite action to the default happens.

9. Changes to the handling of HELO/EHLO:

   (a) Reject the command if it is not followed by an item which is plausibly a
   domain name or an IP address, or if the remainder of the line contains non-
   printing characters.

   (b) Force a reverse lookup if HELO/EHLO specifies this host's own primary
   hostname as its argument.

   (c) Create a new variable sender_helo_name for the HELO/EHLO data, and keep
   it separate from sender_host_name, which now gets set only as a result of a
   reverse lookup.

   (d) Build sender_fullhost according to the following rules:

      (i) If sender_host_name and sender_helo_name are not set, then it is just
      the IP address in [], e.g. "[1.2.3.4]".

      (ii) If sender_host_name is set and sender_helo_name is not set (i.e.
      there was no HELO/EHLO) OR if sender_helo_name is identical to
      sender_host_name, then it's the host (== helo) name, followed by the IP
      address in [], e.g. "a.b.c.d [1.2.3.4]".

      (iii) If sender_helo_name is set and sender_host_name is not set (there
      hasn't been a reverse lookup, or it failed), then put the helo name in
      () followed by the IP address in [], e.g. "(x.y.z) [1.2.3.4]".

      (iv) If both are set, but are different, use the host name, followed by
      the helo name in () followed by the IP address in [], e.g.
      "a.b.c.d (x.y.z) [1.2.3.4]".

   (e) The option "helo_verify_nets" has been renamed "host_lookup_nets" (but
   the old name is synonymous) because that better describes what it now does.

10. It is now possible to add a site-specific message to the error response
that is sent when an SMTP command fails for policy reasons, by setting the
option "prohibition_message" to a text string.

11. The RFCs mandate that a server must not reject a message because it doesn't
like the HELO or EHLO command, or indeed if there isn't a HELO or EHLO command.
However, some sites like to be stricter, and helo_verify now supports this.

12. The expansion condition "def" can now be used to test for the existence of
headers.

13. The expansion variable message_headers contains the messages's headers when
a message is being processed. They are separated by newline characters.

14. Added "return message" as an option of the "mail" and "vacation" filter
commands. It causes the original message to be added to the bottom of the
generated message.

15. Search types for the aliasfile director can now be preceded by partial-
and/or followed by "*". The former isn't likely to be very useful, but the
latter provides a default facility.

16. The Henry Spencer regular expression functions that were previously used in
Exim have been replaced by the PCRE regular expresion library, which gives full
Perl5-compatible regular expressions.

End
