Exim is an MTA developed by Philip Hazel at the University of Cambridge. Exim is designed for Internet mail hosts and provides flexibility, performance, and strong access controls. It has become a popular replacement for sendmail because it provides a compatible command-line interface.
This chapter explains how to integrate SpamAssassin into an Exim-based mail server to perform spam-checking for local recipients or to create a spam-checking mail gateway.
| || |
Exim is a complex piece of software and, more than most MTAs, has an extensive and complicated set of configuration options. This chapter assumes that you are running Exim 4 and does not cover how to securely install, configure, or operate Exim itself. For that information, see the Exim documentation, the web site http://www.exim.org, and the book The Exim SMTP Mail Server: Official Guide for Release 4 by Philip Hazel (UIT Cambridge).
Exim consists primarily of a single setuid executable, exim , that performs different functions depending on its command-line arguments. These functions include listening on the SMTP port and receiving and enqueuing incoming messages, adding locally generated messages to the queue, and processing the queue to transmit outgoing messages. When compiled from source code, exim is installed in /usr/exim/bin , and the examples in this chapter assume that directory is used.
Exim's configuration file defaults to /usr/exim/configure . The configuration file determines the behavior of Exim and defines three important logical entities: access control lists (ACLs) , routers , and transports . ACLs define tests that can be performed during incoming SMTP sessions to determine whether Exim will accept a message. Routers determine how messages to a given address should be delivered (or rewritten to new addresses) and queue them up for transports. Transports define delivery mechanisms ‚ methods by which a message can be copied from Exim's queue to a local mailbox, a remote host, or elsewhere. Each of these entities has its own section in the configuration file.
| || |
While you can define ACLs and transports in any order, you must define routers in the order in which they are to run. In the default configuration, the router order is dnslookup (look up remote hostnames and route messages via SMTP), system_aliases (redirect messages on the basis of the /etc/aliases file), userforward (redirect messages on the basis of user .forward files), and localuser (route message via the local delivery agent).