How do I delete the pending mail in the Exim queue?
To delete pending mail in the Exim mail queue, you need to use Exim’s command-line tools. Here’s a step-by-step guide:
List the Mail Queue: Before deleting any mail, it’s useful to see what’s in the queue.
exim -bp
Pending mail in the Exim queue
exim -bp | exiqgrep -i | xargs exim -Mrm
-
exim -bplists the queue.exiqgrep -iextracts the message IDs.xargs exim -Mrmremoves the messages with the extracted IDs.
Delete Specific Messages: If you want to delete specific messages, first get their IDs using:
exim -bp
Then delete them individually using:
exim -Mrm <message-id>
Replace <message-id> with the actual ID of the message you want to delete.
Delete Frozen Messages: Sometimes you may want to delete only frozen messages (emails that couldn’t be delivered and are not being retried).
exim -bp | grep frozen | awk '{print $3}' | xargs exim -Mrm
This command pipeline finds all frozen messages and removes them.
Additional Tips
- Check for Exim Version: Ensure you are using the correct commands for your version of Exim. Some commands might slightly differ.
- Automation with Scripts: If you need to perform this task regularly, consider writing a script and scheduling it with cron.
Here’s an example script to delete all frozen messages, which you can save as clean_exim_queue.sh:
#!/bin/bash
# Script to clean up Exim mail queue
# Delete frozen messages
exim -bp | grep frozen | awk '{print $3}' | xargs exim -Mrm
# Optionally, delete all messages (uncomment the following lines if needed)
# exim -bp | exiqgrep -i | xargs exim -Mrm
Make the script executable:
chmod +x clean_exim_queue.sh
You can then set up a cron job to run this script periodically. For example, to run it every day at midnight, add the following line to your crontab:
0 0 * * * /path/to/clean_exim_queue.sh
