Exim Management Command List

Below are some shell commands that can be used to manage Exim and it's email queue. The commands listed below must be run as root.

Managing Exim Itself

Start/Stop/Restart Exim

/etc/init.d/exim start|stop|restart

Print what Exim is doing right now


Test how exim will route a given email address

exim -bt email@address.tld

Generate and display Exim stats from a logfile

eximstats /path/to/exim_mainlog

Run a pretend SMTP transaction from the command line, as if it were coming from the given IP address. This will display Exim’s checks, ACLs, and filters as they are applied. Replace x.x.x.x with the IP you want to use as the source

exim -bh x.x.x.x

Display all of Exim’s configuration settings

exim -bP

Queue Information

Print a count of messages in the queue

exim -bpc

Print a listing of the messages in the queue (time queued, size, message-id, sender, recipient)

exim -bp

Print a summary of messages in the queue (count, volume, oldest, newest, domain, and totals)

exim -bp | exiqsumm

Searching the Queue

Search the queue for messages from a specific sender

exiqgrep -f [user]@domain

Search the queue for messages for a specific recipient/domain

exiqgrep -r [user]@domain

Print just the message-id as a result of one of the above two searches

exiqgrep -i [ -r | -f ] ...

Print a count of messages matching one of the above searches

exiqgrep -c [ -r | -f ] ...

Print just the message-id of the entire queue

exiqgrep -i

Print just the message-id of frozen messages in the queue

exiqgrep -iz

Viewing Messages In The Queue

View a message's headers:

exim -Mvh <message-id>

View a message's body:

exim -Mvb <message-id>

View a message's logs:

exim -Mvl <message-id>

Queue Management

Start a queue run

exim -q -v

Start a queue run for just local deliveries

exim -ql -v

Remove a message from the queue

exim -Mrm <message-id>

Remove all messages older than X seconds from the queue(for example 5 days would be 432000 seconds)

exiqgrep -o 432000 -i | xargs -P25 exim -Mrm

Freeze all queued mail from a sender

exiqgrep -i -f email@address.tld | xargs exim -Mf

View a queued message's header

exim -Mvh <message-id>

View a queued message's body

exim -Mvb <message-id>

View a queued message's log

exim -Mvl <message-id>

Remove all messages from the queue (usually a bad idea), note the -P25 switch passed to xargs. This option tells xargs to run 25 concurrent exim removal processes.

exiqgrep -i | xargs -P25 exim -Mrm

Remove all frozen messages from the queue.

exiqgrep -iz | xargs -P25 exim -Mrm

One disadvantage of using exiqgrep and xargs is that it will not start removing messages until exiqgrep prints out it's results. One solution to this the following. The disadvantage to this method is that you will be removing ALL of the email in your queue.

cd /var/spool/exim/msglog
find . -type f -exec sh -c 'exim -Mrm `echo "${0##*/}"`' {} \;