॥ श्री ॥

Exim (Mail Transfer Agent)

Networking 2026-04-20

Exim is a pre-installed Mail Transfer Agent (MTA). On a desktop or homelab machine, its primary purpose is local mail delivery — routing system notifications, cron job output, fail2ban alerts, and other daemon messages to the local root or user mailbox, and optionally forwarding them to an external email address via a relay (smarthost).

Running a full inbound SMTP server on a residential IP is generally impractical (ISPs block port 25; major providers reject mail from dynamic IPs). The most useful configuration for Shani OS is smarthost / relay mode: Exim accepts local mail and forwards it through an authenticated external SMTP server such as Gmail, Fastmail, or Mailgun.

---

Service Management

sudo systemctl enable --now exim

systemctl status exim
journalctl -u exim -f

---

Configuration

Exim's config is at /etc/mail/exim.conf (on Arch-based systems, sometimes /etc/exim/exim.conf). Shani OS uses the standard Arch path /etc/mail/exim.conf.

Smarthost (Relay via External SMTP)

The most common setup: all local mail is relayed through an external SMTP server. Replace the values below with your provider's settings.

# /etc/mail/exim.conf

primary_hostname = yourhostname.local

# Accept mail for local delivery
local_interfaces = 127.0.0.1

# Route all outbound mail through a smarthost
begin routers

  send_via_smarthost:
    driver = manualroute
    domains = !+local_domains
    transport = smarthost_smtp
    route_list = * smtp.gmail.com

begin transports

  smarthost_smtp:
    driver = smtp
    hosts = smtp.gmail.com
    port = 587
    hosts_require_auth = *
    hosts_require_tls = *

begin authenticators

  plaintext_auth:
    driver = plaintext
    public_name = PLAIN
    client_send = : your@gmail.com : your-app-password

Gmail: Use an App Password (not your main password) — requires 2FA to be enabled on the account. Set smtp.gmail.com, port 587.

After editing:

# Test config syntax
sudo exim -bV

# Reload
sudo systemctl restart exim

Forward Root Mail to a User or External Address

System daemons send mail to root. Forward it to a real address by creating /etc/aliases:

root: youruser
youruser: you@example.com

Then rebuild the alias database:

sudo newaliases

Forward a User's Local Mail

Create ~/.forward in the user's home directory:

you@example.com

---

Sending Test Mail

# Send a test message
echo "Test from Shani OS" | mail -s "Test" root

# Or directly via Exim
echo "Subject: Test" | sudo exim -v root

# Check the mail queue
exim -bp

# Force delivery of queued messages
sudo exim -qf

# View Exim logs
sudo tail -f /var/log/exim/mainlog

---

Troubleshooting

| Issue | Solution | |-------|----------| | Mail stuck in queue | Run exim -bp to see the queue; sudo exim -qf to force retry; check mainlog for rejection reasons | | Authentication failed | Verify credentials in client_send; for Gmail, ensure you are using an App Password not your account password | | TLS negotiation failed | Confirm hosts_require_tls = * is set and the upstream SMTP port supports STARTTLS (587) or TLS (465) | | Cron output not being mailed | Ensure MAILTO is set in the crontab (MAILTO=root or MAILTO=youruser) and Exim is running | | Exim not starting | Run sudo exim -bV to check config syntax; check journalctl -u exim for errors |