WARNING: This documentation is for an old version of Exim (latest)
Specification of the Exim Mail Transfer Agent
Copyright © 2009 University of Cambridge
Revision 4.71 - 5 November 2009
Expand/Collapse all Chapters
- 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
- 15. Temporary delivery failure
- 16. Permanent delivery failure
- 17. Failures to deliver bounce messages
-
4. Building and installing Exim
- 1. Unpacking
- 2. Multiple machine architectures and operating systems
- 3. PCRE library
- 4. DBM libraries
- 5. Pre-building configuration
- 6. Support for iconv()
- 7. Including TLS/SSL encryption support
- 8. Use of tcpwrappers
- 9. Including support for IPv6
- 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. Upgrading Exim
- 21. Stopping the Exim daemon on Solaris
- 5. The Exim command line
-
6. The Exim run time 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. Conditional skips in the configuration file
- 10. Common option syntax
- 11. Boolean options
- 12. Integer values
- 13. Octal integer values
- 14. Fixed point numbers
- 15. Time intervals
- 16. String values
- 17. Expanded strings
- 18. User and group names
- 19. List construction
- 20. Changing list separators
- 21. Empty items in lists
- 22. 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. Pseudo dnsdb record types
- 12. Multiple dnsdb lookups
- 13. More about LDAP
- 14. Format of LDAP queries
- 15. LDAP quoting
- 16. LDAP connections
- 17. LDAP authentication and control information
- 18. Format of data returned by LDAP
- 19. More about NIS+
- 20. SQL lookups
- 21. More about MySQL, PostgreSQL, Oracle, and InterBase
- 22. Specifying the server in the query
- 23. Special MySQL features
- 24. Special PostgreSQL features
- 25. More about SQLite
-
10. Domain, host, address, and local part lists
- 1. Expansion of lists
- 2. Negated items in lists
- 3. File names in lists
- 4. An lsearch file is not an out-of-line list
- 5. Named lists
- 6. Named lists compared with macros
- 7. Named list caching
- 8. Domain lists
- 9. Host lists
- 10. Special host list patterns
- 11. Host list patterns that match by IP address
- 12. Host list patterns for single-key lookups by host address
- 13. Host list patterns that match by host name
- 14. Behaviour when an IP address or name cannot be found
- 15. Temporary DNS errors when looking up host information
- 16. Host list patterns for single-key lookups by host name
- 17. Host list patterns for query-style lookups
- 18. Mixing wildcarded host names and addresses in host lists
- 19. Address lists
- 20. Case of letters in address lists
- 21. 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 obsolete 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
- 1. Explicitly configured address rewriting
- 2. When does rewriting happen?
- 3. Testing the rewriting rules that apply on input
- 4. Rewriting rules
- 5. Rewriting patterns
- 6. Rewriting replacements
- 7. Rewriting flags
- 8. Flags specifying which headers and envelope addresses to rewrite
- 9. The SMTP-time rewriting flag
- 10. Flags controlling the rewriting process
- 11. Rewriting examples
-
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 spa authenticator
-
39. Encrypted SMTP connections using TLS/SSL
- 1. Support for the legacy “ssmtp” (aka “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. Requesting and verifying client certificates
- 8. Revoked certificates
- 9. Configuring an Exim client to use TLS
- 10. Multiple messages on the same encrypted TCP/IP connection
- 11. Certificates and all that
- 12. Certificate chains
- 13. Self-signed certificates
-
40. Access control lists
- 1. Testing ACLs
- 2. Specifying when ACLs are used
- 3. The non-SMTP ACLs
- 4. The SMTP connect ACL
- 5. The EHLO/HELO ACL
- 6. The DATA ACLs
- 7. The SMTP MIME ACL
- 8. The QUIT ACL
- 9. The not-QUIT ACL
- 10. Finding an ACL to use
- 11. ACL return codes
- 12. Unset ACL options
- 13. Data for message ACLs
- 14. Data for non-message ACLs
- 15. Format of an ACL
- 16. ACL verbs
- 17. ACL variables
- 18. Condition and modifier processing
- 19. ACL modifiers
- 20. Use of the control modifier
- 21. Summary of message fixup control
- 22. Adding header lines in ACLs
- 23. ACL conditions
- 24. Using DNS lists
- 25. Specifying the IP address for a DNS list lookup
- 26. DNS lists keyed on domain names
- 27. Multiple explicit keys for a DNS list
- 28. Data returned by DNS lists
- 29. Variables set from DNS lists
- 30. Additional matching conditions for DNS lists
- 31. Negated DNS matching conditions
- 32. Handling multiple DNS records from a DNS list
- 33. Detailed information from merged DNS lists
- 34. DNS lists and IPv6
- 35. Rate limiting incoming messages
- 36. Ratelimit options for what is being measured
- 37. Ratelimit options for handling fast clients
- 38. Using rate limiting
- 39. Reading ratelimit data without updating
- 40. Address verification
- 41. Callout verification
- 42. Additional parameters for callouts
- 43. Callout caching
- 44. Sender address verification reporting
- 45. Redirection while verifying
- 46. Client SMTP authorization (CSA)
- 47. Bounce address tag validation
- 48. Using an ACL to control relaying
- 49. Checking a relay configuration
- 41. Content scanning at ACL time
- 42. Adding a local scan function to Exim
-
43. 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
-
44. Message processing
- 1. Submission mode for non-local messages
- 2. Line endings
- 3. Unqualified addresses
- 4. The UUCP From line
- 5. Resent- header lines
- 6. The Auto-Submitted: header line
- 7. The Bcc: header line
- 8. The Date: header line
- 9. The Delivery-date: header line
- 10. The Envelope-to: header line
- 11. The From: header line
- 12. The Message-ID: header line
- 13. The Received: header line
- 14. The References: header line
- 15. The Return-path: header line
- 16. The Sender: header line
- 17. Adding and removing header lines in routers and transports
- 18. Constructed addresses
- 19. Case of local parts
- 20. Dots in local parts
- 21. Rewriting addresses
-
45. SMTP processing
- 1. Outgoing SMTP and LMTP over TCP/IP
- 2. Errors in outgoing SMTP
- 3. Incoming SMTP messages over TCP/IP
- 4. Unrecognized SMTP commands
- 5. Syntax and protocol errors in SMTP commands
- 6. Use of non-mail SMTP commands
- 7. The VRFY and EXPN commands
- 8. The ETRN command
- 9. Incoming local SMTP
- 10. Outgoing batched SMTP
- 11. Incoming batched SMTP
- 46. Customizing bounce and warning messages
-
47. 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
- 48. Using Exim as a non-queueing client
-
49. 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
-
50. 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. exim_dumpdb
- 13. exim_tidydb
- 14. exim_fixdb
- 15. Mailbox maintenance (exim_lock)
- 51. The Exim monitor
-
52. Security considerations
- 1. Building a more “hardened” Exim
- 2. Root privilege
- 3. Running Exim without privilege
- 4. Delivering to local files
- 5. IPv4 source routing
- 6. The VRFY, EXPN, and ETRN commands in SMTP
- 7. Privileged users
- 8. Spool files
- 9. Use of argv[0]
- 10. Use of %f formatting
- 11. Embedded Exim path
- 12. Use of sprintf()
- 13. Use of debug_printf() and log_write()
- 14. Use of strcat() and strcpy()
- 53. Format of spool files
- 54. Support for DKIM (DomainKeys Identified Mail) - RFC4871
- 55. Adding new drivers or lookup types
- 56. Concept Index
- 57. Option Index
-
58. Variable Index
- 1. Symbols