Question: I'm using Exim mail server under CentOS Linux. How do I remove all messages from the Exim mail queue using a shell prompt?
Answer: Exim is a mail transfer agent (MTA) used on Unix-like operating systems. It aims to be a general and flexible mailer with extensive facilities for checking incoming e-mail.
To print a list of the messages in the queue, enter:
# exim -bp
To remove a message from the queue, enter:
# exim -Mrm {message-id}
To remove all messages from the queue, enter:
# exim -bp | awk '/^ *[0-9]+[mhd]/{print "exim -Mrm " $3}' | bash
Dallas Marlow, suggested following clean command:
# exim -bp | exiqgrep -i | xargs exim -Mrm
Further readings:
- man pages awk, exim
- Exim documentation
Want to read Linux tips and tricks, but don't have time to check our blog everyday? Subscribe to our daily email newsletter to make sure you don't miss a single tip/tricks. Subscribe to our weekly newsletter here!


{ 5 comments… read them below or add one }
Hello,
the most secure thing (and the most ugly one) you can do is delete all files from EXIM input folder (/var/spool/exim/input). The folder that uses exim to keep the mail queue .
EXIM creates 2 files for email - 1 for the headers part and another for the message body. Erasing everything from this folder must erase the queue.
EXIM names the files with the msg_id an put -H or -D part on the end of filename - H for headers an -D for body file
The solution of Vivek is good, but for less traffic, otherwise if you manage lots of emails I recommend you to rm the files.
One of my cases:
[root@mta1 ~]# exim -bpcO/p:
… and i afraid i cannot use this solution.
Regards
Ol.
Bulgaria
Another solution is put this router in the EXIM configure and run some queue runners - exim -qff&
If you place the router in first place he will delete all messages older than X seconds. 1800 = 30 min.
router_mailxpire:
driver = redirect condition = ${if >= {$message_age}{1800}} data = /dev/null file_transport = address_file no_more… you are welcome
Cheers
Oldzhay,
Thanks for sharing your solution!
this is a much cleaner/safer way to do the same thing (using the tools provided by all modern exim installations)
exim -bp | exiqgrep -i | xargs exim -Mrm
exim -bp # this prints the contents of the mail queue
exiqgrep # extracts the id from each mail
xargs exim -Mrm # removes the mail
exiqgrep is pretty flexible (for instance if you wanted to only extract the frozen email id’s used exiqgrep -iz ), exipick is an extension of exiqgrep that can help a bit too.
Dallas,
The faq has been updated with your command. Thanks for sharing with us!