/var/log/exim4/mainlog for specific error codes like connection refused or authentication failed. Restarting the service and verifying network connectivity often resolves immediate transmission issues.
Initial Service Verification
Before diving into complex configurations, ensure the Exim4 daemon is actually running and listening on the correct ports. A stopped service is the most common reason for silent failures. Use the following command to check the status of the service:systemctl status exim4
If the service is inactive, start it with:
sudo systemctl start exim4
To ensure it starts automatically on boot, enable it:
sudo systemctl enable exim4
Verify that Exim is listening on port 25 (SMTP) using netstat or ss:
sudo ss -tlnp | grep :25
You should see output indicating that a process named exim4 is bound to 0.0.0.0:25 or :::25. If no output appears, the service may have crashed during startup due to configuration syntax errors. In such cases, check the system journal for immediate error messages:
journalctl -u exim4 -n 50 --no-pager
This step isolates whether the problem is operational (service down) or logical (configuration wrong).
Checking Local Delivery vs. Remote Transmission
A critical distinction in Exim troubleshooting is whether mail is being accepted locally but not delivered remotely, or if it is bouncing immediately. Exim handles local mail differently than remote mail. If you are sending email from the same server to a local user, Exim uses its local transport. If sending to an external domain, it uses the remote SMTP transport. Test local delivery by sending a test email to a local user account:echo "Test body" | mail -s "Test Subject" root@localhost
Check the main log file located at /var/log/exim4/mainlog. Look for lines containing your test message. You might see entries like:
1HxYzZ-000000-00 <= [email protected] H=local [127.0.0.1] P=esmtp S=...
1HxYzZ-000000-00 => root R=localuser T=local_delivery
If this succeeds, local delivery is working. Now test remote delivery by sending an email to an external address (e.g., Gmail):
echo "Remote Test" | mail -s "Remote Test" [email protected]
Check the log again. If the message disappears from the queue without being sent, look for errors related to DNS resolution or connection timeouts. Common errors include:
- DNS Lookup Failed: Exim cannot resolve the MX record for the recipient domain.
- Connection Refused: The remote server is unreachable or blocking port 25.
- Helo/Ehlo Rejected: The HELO hostname does not match the reverse DNS of your IP.
Verifying DNS Resolution
Exim relies heavily on DNS for finding recipient mail servers. Ensure your system can resolve MX records properly. Usedig or nslookup to check:
dig MX gmail.com +short
If this returns no results, check your /etc/resolv.conf file to ensure valid nameservers are configured. Also, verify that your server's own reverse DNS (PTR record) is correctly set up for your public IP address. Many receiving servers reject mail if the PTR record does not match the forward DNS lookup of the connecting IP.
Configuration File Inspection
The main Exim configuration file on Ubuntu is typically/etc/exim4/update-exim4.conf.conf. Open this file and review the settings. Key parameters include:
- dc_eximconfig_configtype: Should be set to
internetif your server sends and receives mail directly, orlocalif it only delivers locally. - dc_local_interfaces: Defines which interfaces Exim listens on. For internet mail, this is often set to
0.0.0.0 : 25. - dc_relay_nets: Lists networks allowed to relay mail through your server.
- dc_readhost: The primary hostname of your server.
sudo update-exim4.conf
Then restart the service:
sudo systemctl restart exim4
Failure to run update-exim4.conf after editing the template file will result in your changes not taking effect, leading to persistent configuration errors.
Queue Management and Log Analysis
If emails are stuck in the queue, inspect the queue status:exim -bp
This lists all messages currently waiting for delivery. To view detailed information about a specific message ID, use:
exim -Mvl <message-id>
This shows the entire history of the message, including every attempt to deliver it and the response from remote servers. Look for patterns in these logs. If many messages fail with the same error, it indicates a systemic issue rather than a transient network glitch.
For issues involving local delivery agents specifically, understanding how Exim routes mail internally is crucial. See our article on Troubleshooting Postfix: Local Delivery despite External Agent Configuration for broader concepts on local vs. remote handling that apply across MTA software.
Firewall and Network Checks
Ensure that your firewall allows outbound traffic on port 25. On Ubuntu,ufw is commonly used:
sudo ufw status
If UFW is active, allow outgoing SMTP:
sudo ufw allow out 25/tcp
Some cloud providers (like AWS, DigitalOcean, or Google Cloud) block outbound port 25 by default to prevent spam. If you are on one of these platforms, you may need to submit a ticket to request port 25 unblocking or use a smart host (relay) instead. Configuring a smart host involves setting dc_eximconfig_configtype to satellite and specifying the relay server in dc_smarthost.
Frequently Asked Questions
Why are my emails stuck in the queue?
Emails remain in the queue when Exim encounters a temporary failure, such as a DNS timeout or a remote server refusing the connection. Check /var/log/exim4/mainlog for the specific error code associated with each queued message.
How do I clear the Exim mail queue?
You can remove all messages from the queue using exim -bp | awk '/^ *[0-9]+[mhd]/{print $3}' | xargs exim -Mrm. Be cautious, as this deletes pending mail permanently. Always verify why they were queued before clearing them.
What causes authentication failures in Exim?
Authentication failures typically occur when the username or password provided for SMTP AUTH is incorrect, or when the user account does not exist in the configured backend (such as MySQL or LDAP). Verify credentials against your user database.
Can I use Exim with a smart host instead of direct delivery?
Yes, configuring Exim as a satellite system allows you to route all outgoing mail through a provider’s SMTP server. This bypasses port 25 blocks on cloud platforms and simplifies SPF/DKIM management.
How do I check if my server is open to spam relaying?
An open relay allows anyone to send email through your server. Verify your configuration by ensuring dc_relay_nets is restricted to trusted IPs and that allow_rfc1918 is disabled unless necessary for internal networks.