Mail Server
Adjust the server settings used to send, receive and filter email.
Where to find it: Sign in as root, open Server > Configuration, then choose Mail Server.
Available to: Root only.
Before you start
Mail changes affect delivery and sometimes existing client connections. Confirm the exact address or domain, preserve credentials, and use delivery reports or the queue to verify the result.
Why use it — and when not to
Use Mail Server for the selected account or server mail workflow. Use DNS Manager, Services, Mail Queue, or Delivery Reports instead when the problem belongs to delegation, service installation, queued transport, or delivery evidence.
How to use it
- Find the sending, receiving or filtering setting you need.
- Review its effect on hosted mailboxes before changing it.
- Save or apply as required, then test sending and receiving email.
Available settings
These are the settings offered by the current SHM page. Defaults describe the baseline for an unset value; your saved configuration may differ. Review the effect and capacity of the server before changing a value.
Local Submission & Identity
Controls how Exim handles untrusted local submissions and sender identity.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Check From: for local submissions (local_from_check)local_from_check | true / false Baseline: false | When an untrusted user submits mail locally (not via TCP/IP), Exim can verify that the From: header matches the caller login + qualify_domain; otherwise it may add a Sender: header. Disabling removes that header check for local submissions. Keep enabled unless you have a specific reason. Disabling can make local sender spoofing easier. |
Allow untrusted users to set envelope sender (untrusted_set_sender)untrusted_set_sender | Text Baseline: * | Controls which envelope sender addresses untrusted local users may set (via -f / MAIL FROM) when submitting locally. "*" means unrestricted; otherwise use patterns/address list items. Avoid "*" on shared systems. Prefer restricting to the user's own senders/domains to reduce spoofing. |
TLS / OpenSSL
TLS library behavior used for both inbound and outbound connections.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
OpenSSL options (openssl_options)openssl_options | Text Baseline: +no_sslv2 +no_sslv3 | OpenSSL option flags Exim applies for TLS. It is a space-separated list where each item is +added or -removed. Incorrect values can reduce security or break TLS compatibility. Keep defaults unless you know why you are changing this. Disabling old protocols (SSLv2/SSLv3) is generally recommended. |
Network & Protocol
Low-level protocol behavior and verification caching.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Disable IPv6 (disable_ipv6)disable_ipv6 | true / false Baseline: true | When enabled, Exim performs no IPv6 activity even if IPv6 support is compiled in (no AAAA lookups, ignores IPv6 interfaces and addresses). Enable IPv6 if your server has working IPv6. Keep disabled only if you intentionally do not use IPv6. |
RFC1413 ident timeout (rfc1413_query_timeout)rfc1413_query_timeout | Time with a unit, for example 30s or 5m Baseline: 0s | Timeout for RFC 1413 ident queries. A value of 0s disables RFC 1413 calls entirely. Keep 0s unless you have a specific operational need; ident lookups often add latency and provide little value. |
Callout negative cache TTL (domain) (callout_domain_negative_expire)callout_domain_negative_expire | Time with a unit, for example 30s or 5m Baseline: 1h | Expiry time for negative callout cache data for a domain (used by callout verification). If you use callout verification, keep this at a reasonable value (hours) to avoid repeated expensive checks. |
Callout negative cache TTL (address) (callout_negative_expire)callout_negative_expire | Time with a unit, for example 30s or 5m Baseline: 1h | Expiry time for negative callout cache data for an address (used by callout verification). Keep similar to the domain TTL unless you have a specific tuning reason. |
DNSBL / RBL Filtering
Controls DNS blocklists used by the Exim SMTP ACL.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Enabled DNSBL/RBL listsrbl_dnslists | zen.spamhaus.org (Spamhaus ZEN), bl.spamcop.net (SpamCop), b.barracudacentral.org (Barracuda) Baseline: zen.spamhaus.org : bl.spamcop.net : b.barracudacentral.org | Selected lists are written to /etc/exim/rbl_lists.conf as RBL_DNSLISTS. If no list is selected, the file is kept present but empty and the DNSBL ACL block is omitted from generated Exim config. Keep the default lists enabled on public mail servers. Clear all only when you intentionally want to disable DNSBL filtering. |
RBL actionrbl_action | hard_reject (Hard Reject), mark_spam (Mark as Spam), monitor (Monitor only) Baseline: hard_reject | Controls what Exim does when an enabled DNSBL/RBL lists the sending host. Use Hard Reject for the strongest SMTP-time block. Use Mark as Spam when you want delivery into the user's Spam/Junk flow. Use Monitor only when evaluating new RBL lists. |
RBL spam scorerbl_spam_score | int; range 0–100 Baseline: 8 | SpamAssassin score added when RBL action is Mark as Spam. Keep 8 unless you have tuned SpamAssassin thresholds. 0 records the hit without increasing score. |
Respect user whitelist/blacklistrbl_respect_user_allowdeny | true / false Baseline: true | When enabled, account-level allow/deny sender rules are reflected into Exim RBL decisions and SpamAssassin user preferences. Keep enabled so user whitelist entries can bypass RBL hard rejects and blacklist entries can block or mark senders consistently. |
Headers & MIME
Header/body parsing behavior for expansions and RFC edge cases.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Preserve newlines in $message_body expansions (message_body_newlines)message_body_newlines | true / false Baseline: true | Controls whether newlines in the message body are preserved in the $message_body and $message_body_end expansion variables (otherwise they are replaced by spaces). Leave default unless you rely on these expansion variables and explicitly need newlines preserved. |
Enforce RFC2047 encoded-word length (check_rfc2047_length)check_rfc2047_length | true / false Baseline: false | When enabled, Exim rejects/ignores RFC 2047 encoded words that exceed the RFC maximum length. Disabling allows overlong encoded words from non-compliant software. Keep enabled for standards compliance; disable only if you encounter real mail compatibility issues due to overlong encoded words. |
Max total header size (header_maxsize)header_maxsize | Size, for example 128k or 64m Baseline: 10M | Maximum size of a message's entire header section. Messages with larger headers are rejected. Keep reasonable to reduce abuse via oversized headers while allowing typical modern messages. |
Virus Scanning (ClamAV)
Optional malware scanning for SMTP traffic using ClamAV (clamd). Enabling scanning can increase mail latency and CPU usage.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Enable virus scanning for incoming mailvirus_scanner_incoming | true / false Baseline: false | When enabled, Exim scans incoming messages (remote SMTP) and rejects messages that contain malware. Enable for improved protection against infected attachments and common malware. |
Enable virus scanning for outgoing mailvirus_scanner_outgoing | true / false Baseline: false | When enabled, Exim scans outbound SMTP submissions (SMTP AUTH / submission ports / local-smtp) and rejects messages that contain malware. Enable if you want to prevent sending infected attachments from compromised accounts. |
Logging & Time
Log formatting and time behavior.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Include timezone offset in logs (log_timezone)log_timezone | true / false Baseline: true | Adds the timezone offset to log timestamps to avoid ambiguity around DST changes. This increases log line length. Enable if you correlate logs across systems/timezones or want unambiguous timestamps. |
Message Limits
Core limits for message size, recipients, and bounce return content.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Max message size (message_size_limit)message_size_limit | Size, for example 128k or 64m Baseline: 1024M | Maximum message size Exim will accept/process. For SMTP this is advertised via ESMTP SIZE, and oversized messages are rejected. Set based on policy and your scanning/storage limits. Very large values can increase load and disk usage. |
Max original content returned in bounces (bounce_return_size_limit)bounce_return_size_limit | Size, for example 128k or 64m Baseline: 1M | Limits how much of the original message is included in bounce messages. Oversized originals are truncated in the bounce. Keep relatively small. It should be less than message_size_limit to leave room for bounce text. |
Max recipients per message (recipients_max)recipients_max | int; range 0–500000 Baseline: 500 | Maximum number of original recipients for a message. Alias/forward-generated recipients do not count. Applies primarily to SMTP RCPT handling. Set a value that matches your policy. RFC guidance expects servers to accept at least 100 RCPT commands. |
Reject (instead of defer) when too many recipients (recipients_max_reject)recipients_max_reject | true / false Baseline: true | If enabled, Exim rejects messages that exceed recipients_max (surplus RCPT fails and DATA fails). If disabled, Exim accepts for the first recipients and returns 452 for the rest so the sender can retry later. Enable for strict enforcement. Disable if you prefer interoperability where senders retry remaining recipients later. |
SMTP Connection Limits
Controls concurrency and abuse limits for inbound SMTP.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Max concurrent SMTP connections (smtp_accept_max)smtp_accept_max | int; range 0–100000 Baseline: 100 | Maximum number of simultaneous inbound SMTP connections accepted by the Exim daemon. 0 means no limit. Keep non-zero on public servers to protect resources. Ensure it's sized for CPU/memory capacity. |
Queue-only above this concurrency (smtp_accept_queue)smtp_accept_queue | int; range 0–100000 Baseline: 50 | If the number of concurrent inbound SMTP connections exceeds this value, Exim queues received messages without starting immediate delivery processes (per connection). Set lower than smtp_accept_max. Use to shed load during spikes while still accepting mail. |
Max MAIL commands per connection (smtp_accept_max_per_connection)smtp_accept_max_per_connection | int; range 0–100000 Baseline: 20 | Limits the number of MAIL commands Exim will accept over a single SMTP connection (safety guard against runaway clients). 0 disables the limit. Keep a finite limit on Internet-facing servers. |
Max auto-deliveries started per connection (smtp_accept_queue_per_connection)smtp_accept_queue_per_connection | int; range 0–100000 Baseline: 10 | Limits how many delivery processes Exim starts automatically for messages received in a single SMTP session; subsequent messages are queued only. Increase on large systems; set to 0 to disable (queue-only behavior per session). |
Max concurrent connections per host (smtp_accept_max_per_host)smtp_accept_max_per_host | int; range 0–100000 Baseline: 5 | Limits the number of simultaneous inbound SMTP connections from a single IP address. 0 means no limit. Keep small to mitigate abuse, but ensure legitimate senders are not blocked. |
Max non-mail commands per session (smtp_accept_max_nonmail)smtp_accept_max_nonmail | int; range 1–100000 Baseline: 10 | Limits the number of non-mail SMTP commands (for example repeated EHLO/RSET) before Exim drops the connection. Helps mitigate certain DoS patterns and broken clients. Keep default unless you have known clients that misbehave and require a higher limit. |
SMTP receive timeout per line (smtp_receive_timeout)smtp_receive_timeout | Time with a unit, for example 30s or 5m Baseline: 180s | Timeout for receiving each SMTP command or data line. If exceeded, Exim drops the connection and abandons the message. Keep non-zero for SMTP over TCP/IP. Increase slightly if you have slow links or very large messages. |
IMAP Connection Limits
Connection capacity for IMAP mail clients.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
IMAP login process limitdovecot_imap_login_process_limit | int; range 1–100000 Baseline: 256 | Maximum concurrent Dovecot IMAP login processes. TLS connections can retain a login process after authentication, and each mail client can open multiple connections. Default is 256. Increase only with sufficient memory and after checking connection usage. Existing saved values are preserved during updates. |
Service Memory Limits
Per-process memory ceilings for mail daemons. These limits protect the server from individual mail workers that try to allocate excessive memory.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Dovecot service process memory limit (vsz_limit)dovecot_vsz_limit | memory Baseline: Server-derived memory limit | Maximum virtual memory/address-space limit for the Dovecot configuration parser and IMAP, POP3 and LMTP worker processes. Default is 1024M on normal servers and lower only on very small systems. Increase to 2048M for large mailbox migrations after confirming enough RAM headroom. |
Exim process memory limit (systemd LimitAS)exim_process_memory_limit | memory Baseline: Server-derived memory limit | Maximum virtual memory/address-space limit inherited by Exim daemon and delivery processes through systemd LimitAS. Default is 1024M on normal servers. Keep this per-process limit conservative; use SMTP and queue concurrency limits to control total mail-stack memory. |
Queue & Load
Controls queue runners, load-shedding, and frozen-message handling.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Max concurrent queue runners (queue_run_max)queue_run_max | int; range 0–100000 Baseline: 3 | Maximum number of queue runner processes the daemon will run simultaneously. 0 disables the limit. Set based on IO/CPU capacity. Too high can overload the server on large queues. |
Max parallel remote deliveries per message (remote_max_parallel)remote_max_parallel | int; range 0–100000 Baseline: 10 | Maximum parallel remote deliveries for a single message within one delivery process. Values < 2 disable parallel delivery. Keep moderate to avoid large bursts of outbound connections. |
Queue-only above load average (queue_only_load)queue_only_load | fixed Baseline: 25 | If system load average exceeds this value, incoming messages are queued and no immediate deliveries are started. Set to a load level that indicates overload for your server. Too low will cause constant queueing. |
Abort queue run above load average (deliver_queue_load_max)deliver_queue_load_max | fixed Baseline: 50 | Abandons a queue run if system load average becomes greater than this value. Set above normal load but below overload to avoid queue runs worsening high-load situations. |
Retry frozen messages after (auto_thaw)auto_thaw | Time with a unit, for example 30s or 5m Baseline: 7d | If set to a time > 0, queue runners will re-attempt delivery on frozen (non-bounce) messages after this age. Use with caution; it can repeatedly retry problematic messages. Prefer monitoring and using timeout_frozen_after. |
Cancel frozen messages after (timeout_frozen_after)timeout_frozen_after | Time with a unit, for example 30s or 5m Baseline: 5d | If set to a time > 0, frozen messages older than this are cancelled at the next queue run (bounce messages are discarded; others are bounced to sender). Set a finite timeout to avoid frozen mail remaining forever while still allowing time to troubleshoot. |
Discard undeliverable bounces after (ignore_bounce_errors_after)ignore_bounce_errors_after | Time with a unit, for example 30s or 5m Baseline: 1d | For undeliverable bounce messages that become frozen after permanent failure, Exim can retry once after this age; if it fails again the bounce is discarded. Zero discards immediately. Keep relatively short (hours/days) to prevent dead bounces from cluttering the queue. |
Delete queued messages older than N daysqueue_auto_delete_after_days | int; range 0–3650 Baseline: 7 | SHM cron removes Exim queue entries whose queue age is at least this many days. This cleanup is separate from Exim frozen-message handling and applies to old queued mail regardless of whether it is deferred or frozen. Default is 7 days. Set 0 to disable. Increase it if you want a longer troubleshooting window before automatic removal. |
Disk Resource Checks
Pre-acceptance checks for free disk space and inodes. Helps protect the server from filling the spool/log partitions.
| Setting | Values and baseline | Purpose and when to change it |
|---|---|---|
Minimum free spool space (check_spool_space)check_spool_space | Size, for example 128k or 64m Baseline: 10M | Minimum free space required on the spool partition before Exim accepts incoming mail. If insufficient, SMTP MAIL gets a 452 temporary error. Keep some headroom to protect the queue filesystem. Disable only if you are sure you will not run out of space. |
Minimum free spool inodes (check_spool_inodes)check_spool_inodes | int; range 0–100000000 Baseline: 100 | Minimum free inodes required on the spool partition before Exim accepts mail. Keep enabled to avoid inode exhaustion breaking mail delivery. |
Minimum free log space (check_log_space)check_log_space | Size, for example 128k or 64m Baseline: 10M | Minimum free space required on the log partition. Only meaningful if logs are written to a different partition than the spool directory. Set only if your log_file_path is on a different filesystem than the spool directory; otherwise this can match spool checks. |
Minimum free log inodes (check_log_inodes)check_log_inodes | int; range 0–100000000 Baseline: 100 | Minimum free inodes required on the log partition (if separate from spool). Keep enabled if logs are on a separate filesystem to avoid logging failures. |
Theme color