Introduction to exim
Exim is a message transfer agent (MTA) developed at the
University of Cambridge for use on Unix systems connected to the
Internet. It is freely available under the terms of the GNU
General Public Licence. In style it is similar to Smail
3, but its facilities are more extensive, and in particular it
has some defences against mail bombs and unsolicited junk mail in
the form of options for refusing messages from particular hosts,
networks, or senders.
The major features are summarised below. There is also an
overview which expands on these features. Exim has an extensive
set of documentation included in the exim specification,
additionally there are documents on the filtering functionality
and other documentation is being made available on this web site.
The full overview is also
available.
Basic Features
-
Many configuration options can be given as expansion strings,
and as these can include file lookups, much of Exim's
operation can be made table-driven if desired. For example,
it is possible to do local delivery on a machine on which the
users do not have accounts.
-
Regular expressions are available in a number of configuration
parameters.
-
Domain lists can include file lookups, making it possible to
support a large number of local domains.
-
The maximum size of message can be specified.
-
Exim can handle a number of independent local domains on the
same machine; each domain can have its own alias files,
etc. These are commonly called virtual domains.
-
Exim contains an optional built-in mail filtering
facility. This enables users to set up their own mail
filtering in a straightforward manner without the need to run
an external program. There can also be a system filter file
that applies to all messages.
-
Periodic warnings are automatically sent to messages' senders
when delivery is delayed -- the time between warnings is
configurable.
-
A queue run can be manually started to deliver just a
particular portion of the queue, or those messages with a
recipient whose address contains a given string.
-
Exim can be configured to run as root all the time, except
when performing local deliveries, which it always does in a
separate process under an appropriate uid and
gid. Alternatively, it can be configured to run as root only
when needed; in particular, it need not run as root when
receiving incoming messages or when sending out messages over
SMTP.
Incoming SMTP
-
SMTP calls from specific machines, optionally from specific
idents, can be locked out, and incoming SMTP messages from
specific senders can also be locked out.
-
Messages on the queue can be `frozen' and `thawed' by the
administrator.
Outgoing SMTP
-
Exim can perform multiple deliveries down the same SMTP
channel after deliveries to a host have been delayed.
-
Exim can be configured to do local deliveries immediately but
to leave remote deliveries until the message is picked up by a
queue-runner process. This increases the likelihood of
multiple messages being sent down a single SMTP connection.
-
When copies of a message have to be delivered to more than one
remote host, up to a configured maximum number of remote
deliveries can be done in parallel.
Local Deliveries
-
Exim stats a user's home directory before looking for a
`.forward' file, in order to detect the case of a
missing NFS mount.
-
There is support for multiple user mailboxes controlled by
prefixes or suffixes on the user name, either via the
filter mechanism or through multiple
`.forward' files.
Monitoring and Performance Tools
-
The Exim Monitor is an optional extra; it displays information
about Exim's processing in an X window, and an administrator
can perform a number of control actions from the window
interface.
-
There are a set of tools for summarising the queue, determining
what each exim process is currently doing, examining the
deliveries hints databases, and summarising the log files into
a concise report on activity.
SPAM/UCE/UBE Limitation Features
-
Senders can be blocked using a variety of methods, including
the ability to apply a set of username or regular expression
patterns to incoming mail from particular (or all) domains.
-
All addresses can be checked for validity during the SMTP
transaction thus allowing the elimination of mail from
non-existent domains.
-
Relaying can be tightly controlled based on sending host,
network or sending/recipient domains.
-
If all else fails the system filter can be used to deal with
messages based on arbitrary conditions that you can program in
(for example block mail with a particular X-Mailer:
header.
Limitations
-
Exim is written in ANSI C. This should not be much of a
limitation these days. However, to help with systems that
lack a true ANSI C library, Exim avoids making any use of the
value returned by the `sprintf()' function, which is
one of the main incompatibilities. It has its own version of
`strerror()' for use with SunOS4 and any other
system that lacks this function, and a macro can be defined to
turn `memmove()' into `bcopy()' if
necessary.
-
Exim uses file names that are longer than 14 characters.
-
Exim is intended for use as an Internet mailer, and therefore
handles addresses in RFC 822 domain format only. It cannot
handle bang paths, though simple two-component bang
paths can be converted by a straightforward rewriting
configuration.
-
Exim insists that every address it handles has a domain
attached. For incoming local messages, domainless addresses
are automatically qualified with a configured domain
value. Configuration options specify from which remote systems
unqualified addresses are acceptable.
-
The only external transport currently implemented is an SMTP
transport over a TCP/IP network (using sockets), suitable for
machines on the Internet. However, a pipe transport is
available, and there are facilities for writing messages to
files in `batched SMTP' format; this can be used to send
messages to some other transport mechanism. Batched SMTP input
is also catered for.
Nigel Metheringham
$Cambridge$