Specification of the Exim Mail Transfer Agent
Copyright © 
2025
            The Exim Maintainers
Revision 4.99 - 27 Oct 2025
- 1. Introduction
 - 2. Incorporated code
 - 
3. How Exim receives and delivers mail
- 1. Overall philosophy
 - 2. Policy control
 - 3. User filters
 - 4. Message identification
 - 5. Receiving mail
 - 6. Handling an incoming message
 - 7. Life of a message
 - 8. Processing an address for delivery
 - 9. Processing an address for verification
 - 10. Running an individual router
 - 11. Duplicate addresses
 - 12. Router preconditions
 - 13. Delivery in detail
 - 14. Retry mechanism
 
 - 
4. Building and installing Exim
- 1. Unpacking
 - 2. Multiple machine architectures and operating systems
 - 3. PCRE2 library
 - 4. DBM libraries
 - 5. Pre-building configuration
 - 6. Support for iconv()
 - 7. Including TLS/SSL encryption support
 - 8. Including support for IPv6
 - 9. Dynamically loaded module support
 - 10. The building process
 - 11. Output from “make”
 - 12. Overriding build-time options for Exim
 - 13. OS-specific header files
 - 14. Overriding build-time options for the monitor
 - 15. Installing Exim binaries and scripts
 - 16. Installing info documentation
 - 17. Setting up the spool directory
 - 18. Testing
 - 19. Replacing another MTA with Exim
 - 20. Running the daemon
 - 21. Upgrading Exim
 - 22. Stopping the Exim daemon on Solaris
 
 - 5. The Exim command line
 - 
6. The Exim runtime configuration file
- 1. Using a different configuration file
 - 2. Configuration file format
 - 3. File inclusions in the configuration file
 - 4. Macros in the configuration file
 - 5. Macro substitution
 - 6. Redefining macros
 - 7. Overriding macro values
 - 8. Example of macro usage
 - 9. Builtin macros
 - 10. Conditional skips in the configuration file
 - 11. Common option syntax
 - 12. Boolean options
 - 13. Integer values
 - 14. Octal integer values
 - 15. Fixed point numbers
 - 16. Time intervals
 - 17. String values
 - 18. Expanded strings
 - 19. User and group names
 - 20. List construction
 - 21. Format of driver configurations
 
 - 7. The default configuration file
 - 8. Regular expressions
 - 
9. File and database lookups
- 1. Examples of different lookup syntax
 - 2. Lookup types
 - 3. Single-key lookup types
 - 4. Query-style lookup types
 - 5. Temporary errors in lookups
 - 6. Default values in single-key lookups
 - 7. Partial matching in single-key lookups
 - 8. Lookup caching
 - 9. Quoting lookup data
 - 10. More about dnsdb
 - 11. More about LDAP
 - 12. More about NIS+
 - 13. SQL lookups
 
 - 10. Domain, host, address, and local part lists
 - 11. String expansions
 - 12. Embedded Perl
 - 
13. Starting the daemon and the use of network interfaces
- 1. Starting a listening daemon
 - 2. Special IP listening addresses
 - 3. Overriding local_interfaces and daemon_smtp_ports
 - 4. Support for the submissions (aka SSMTP or SMTPS) protocol
 - 5. IPv6 address scopes
 - 6. Disabling IPv6
 - 7. Examples of starting a listening daemon
 - 8. Recognizing the local host
 - 9. Delivering to a remote host
 
 - 
14. Main configuration
- 1. Miscellaneous
 - 2. Exim parameters
 - 3. Privilege controls
 - 4. Logging
 - 5. Frozen messages
 - 6. Data lookups
 - 7. Message ids
 - 8. Embedded Perl Startup
 - 9. Daemon
 - 10. Resource control
 - 11. Policy controls
 - 12. Callout cache
 - 13. TLS
 - 14. Local user handling
 - 15. All incoming messages (SMTP and non-SMTP)
 - 16. Non-SMTP incoming messages
 - 17. Incoming SMTP messages
 - 18. SMTP extensions
 - 19. Processing messages
 - 20. System filter
 - 21. Routing and delivery
 - 22. Bounce and warning messages
 - 23. Alphabetical list of main options
 
 - 15. Generic options for routers
 - 16. The accept router
 - 17. The dnslookup router
 - 18. The ipliteral router
 - 19. The iplookup router
 - 20. The manualroute router
 - 21. The queryprogram router
 - 
22. The redirect router
- 1. Redirection data
 - 2. Forward files and address verification
 - 3. Interpreting redirection data
 - 4. Items in a non-filter redirection list
 - 5. Redirecting to a local mailbox
 - 6. Special items in redirection lists
 - 7. Duplicate addresses
 - 8. Repeated redirection expansion
 - 9. Errors in redirection lists
 - 10. Private options for the redirect router
 
 - 23. Environment for running local transports
 - 24. Generic options for transports
 - 25. Address batching in local transports
 - 26. The appendfile transport
 - 27. The autoreply transport
 - 28. The lmtp transport
 - 29. The pipe transport
 - 30. The smtp transport
 - 31. Address rewriting
 - 
32. Retry configuration
- 1. Changing retry rules
 - 2. Format of retry rules
 - 3. Choosing which retry rule to use for address errors
 - 4. Choosing which retry rule to use for host and message errors
 - 5. Retry rules for specific errors
 - 6. Retry rules for specified senders
 - 7. Retry parameters
 - 8. Retry rule examples
 - 9. Timeout of retry data
 - 10. Long-term failures
 - 11. Deliveries that work intermittently
 
 - 33. SMTP authentication
 - 34. The plaintext authenticator
 - 35. The cram_md5 authenticator
 - 36. The cyrus_sasl authenticator
 - 37. The dovecot authenticator
 - 38. The gsasl authenticator
 - 39. The heimdal_gssapi authenticator
 - 40. The spa authenticator
 - 41. The external authenticator
 - 42. The tls authenticator
 - 
43. Encrypted SMTP connections using TLS/SSL
- 1. Support for the “submissions” (aka “ssmtp” and “smtps”) protocol
 - 2. OpenSSL vs GnuTLS
 - 3. GnuTLS parameter computation
 - 4. Requiring specific ciphers in OpenSSL
 - 5. Requiring specific ciphers or other parameters in GnuTLS
 - 6. Configuring an Exim server to use TLS
 - 7. Configuring an Exim client to use TLS
 - 8. Use of TLS Server Name Indication
 - 9. Multiple messages on the same encrypted TCP/IP connection
 - 10. Certificates and all that
 - 11. TLS Resumption
 - 12. DANE
 
 - 
44. Access control lists
- 1. Testing ACLs
 - 2. Specifying when ACLs are used
 - 3. Finding an ACL to use
 - 4. ACL return codes
 - 5. Unset ACL options
 - 6. Data for message ACLs
 - 7. Data for non-message ACLs
 - 8. Format of an ACL
 - 9. ACL verbs
 - 10. ACL variables
 - 11. Condition and modifier processing
 - 12. ACL modifiers
 - 13. Use of the control modifier
 - 14. Summary of message fixup control
 - 15. Adding header lines in ACLs
 - 16. Removing header lines in ACLs
 - 17. ACL conditions
 - 18. Using DNS lists
 - 19. Previously seen user and hosts
 - 20. Rate limiting incoming messages
 - 21. Address verification
 - 22. Callout verification
 - 23. Quota caching
 - 24. Sender address verification reporting
 - 25. Redirection while verifying
 - 26. Client SMTP authorization (CSA)
 - 27. Bounce address tag validation
 - 28. Using an ACL to control relaying
 - 29. Checking a relay configuration
 
 - 45. Content scanning at ACL time
 - 46. Adding a local scan function to Exim
 - 
47. System-wide message filtering
- 1. Specifying a system filter
 - 2. Testing a system filter
 - 3. Contents of a system filter
 - 4. Additional variable for system filters
 - 5. Defer, freeze, and fail commands for system filters
 - 6. Adding and removing headers in a system filter
 - 7. Setting an errors address in a system filter
 - 8. Per-address filtering
 
 - 48. Message processing
 - 49. SMTP processing
 - 50. Customizing bounce and warning messages
 - 
51. Some common configuration settings
- 1. Sending mail to a smart host
 - 2. Using Exim to handle mailing lists
 - 3. Syntax errors in mailing lists
 - 4. Re-expansion of mailing lists
 - 5. Closed mailing lists
 - 6. Variable Envelope Return Paths (VERP)
 - 7. Virtual domains
 - 8. Multiple user mailboxes
 - 9. Simplified vacation processing
 - 10. Taking copies of mail
 - 11. Intermittently connected hosts
 - 12. Exim on the upstream server host
 - 13. Exim on the intermittently connected client host
 
 - 52. Using Exim as a non-queueing client
 - 
53. Log files
- 1. Where the logs are written
 - 2. Logging to local files that are periodically “cycled”
 - 3. Datestamped log files
 - 4. Logging to syslog
 - 5. Log line flags
 - 6. Logging message reception
 - 7. Logging deliveries
 - 8. Discarded deliveries
 - 9. Deferred deliveries
 - 10. Delivery failures
 - 11. Fake deliveries
 - 12. Completion
 - 13. Summary of Fields in Log Lines
 - 14. Other log entries
 - 15. Reducing or increasing what is logged
 - 16. Message log
 
 - 
54. Exim utilities
- 1. Finding out what Exim processes are doing (exiwhat)
 - 2. Selective queue listing (exiqgrep)
 - 3. Summarizing the queue (exiqsumm)
 - 4. Extracting specific information from the log (exigrep)
 - 5. Selecting messages by various criteria (exipick)
 - 6. Cycling log files (exicyclog)
 - 7. Mail statistics (eximstats)
 - 8. Checking access policy (exim_checkaccess)
 - 9. Making DBM files (exim_dbmbuild)
 - 10. Finding individual retry times (exinext)
 - 11. Hints database maintenance
 - 12. Mailbox maintenance (exim_lock)
 - 13. Message Ids for humans (exim_msgdate)
 
 - 55. The Exim monitor
 - 
56. Security considerations
- 1. Building a more “hardened” Exim
 - 2. Root privilege
 - 3. Running Exim without privilege
 - 4. Delivering to local files
 - 5. Running local commands
 - 6. Trust in configuration data
 - 7. IPv4 source routing
 - 8. The VRFY, EXPN, and ETRN commands in SMTP
 - 9. Privileged users
 - 10. Spool files
 - 11. Use of argv[0]
 - 12. Use of %f formatting
 - 13. Embedded Exim path
 - 14. Dynamic module directory
 - 15. Use of sprintf()
 - 16. Use of debug_printf() and log_write()
 - 17. Use of strcat() and strcpy()
 
 - 57. Format of spool files
 - 58. DKIM, SPF, SRS and DMARC
 - 
59. Proxies
- 1. Inbound proxies
 - 2. Outbound proxies
 - 3. Logging
 
 - 
60. Internationalisation
- 1. MTA operations
 - 2. MDA operations
 
 - 61. Events
 - 62. Adding new drivers or lookup types
 - 63. Concept Index
 - 64. Option Index
 - 65. Variable Index