How to check Postfix’s email queue and delete it .

Cheap reseller Hosting


On this post you can check the messages in the postfix queue.


1- Postfix maintains two queues, the pending mails queue, and the deferred mail queue,
the differed mail queue has the mail that has soft-fail and should be retried (Temporary failure),
Postfix retries the deferred queue on set intervals (configurable, and by default 5 minutes)


1- Display a list of queued mail, deferred and pending



postqueue -p

To save the output to a text file you can run

mailq > mail.txt


postqueue -p > mail.txt

the above commands display all queued messages (Not the message itself but the sender and recipients and ID), The ID is particularly useful if you want to inspect the message itself.

2- View message (contents, header and body) in Postfix queue

Assuming the message has the ID XXXXXXX (you can see the ID form the QUEUE)

postcat -vq XXXXXXXXXX

Or to save it in a file

postcat -vq XXXXXXXXXX > themessage.txt

3- Tell Postfix to process the Queue now

postqueue -f


postfix flush

4- Delete queued mail

Delete all queued mail

postsuper -d ALL

Delete differed mail queue messages

(The ones the system intends to retry later)

postsuper -d ALL deferred

Delete from queue selectively

To delete from the queue all emails that have a certain address in them, we can use this program (perl script)…

NOTE: This perl script seems to be free, and is all over the internet, i could not find out where it originates or who wrote it.

1- Download this file, unzip, and upload the file to your server, then from your bash command line, Change Directory to wherever you uploaded this file, for example cd /root (Just an example, You can upload it wherever you wish)

NOTE: A second script here works differently, i have not yet tested it, download it here

Now, from within that directory, execute…


Any mail that has this email address in it’s IN or OUT list will be deleted

The script uses the postqueue -p then looks for your string, once found, it deletes the email by ID, this means that this script can delete messages using any text that appears when you run mailq (or postqueue -p), so if you run it with the parameter joe all mail with addresses such as and

Other moethods exist, like executing directly

mailq | tail +2 | grep -v '^ *(' | awk  'BEGIN { RS = "" } { if ($8 == "" && $9 == "") print $1 } ' | tr -d '*!' | postsuper -d -


Sample Messages in a differed mail queue


SOME282672ID 63974 Mon Nov 29 05:12:30
(temporary failure. Command output: maildrop: maildir over quota.)


SOME282672ID 9440 Wed Jun 30 05:30:11 MAILER-DAEMON
(SomeHostName [] said: 452 <> Mailbox size limit exceeded (in reply to RCPT TO command))


SOME282672ID 4171 Thu Nov 25 13:22:03 MAILER-DAEMON
(host [yyy.yyy.yyy.yyy] refused to talk to me: 550 Rejected: 188.xx.179.46, listed at for remediation.)


SOME282672ID 37031 Thu Nov 25 08:53:36
(Host or domain name not found. Name service error for type=MX: Host not found, try again) 

Cheap web Hosting

Exim commands : To remove emails from mail queue for a specific Sender/Receiver

Cheap reseller Hosting

In this article i will show you how to remove emails from mail queue for a specific Sender/Receiver.


How to remove all emails from a particular user using exiqgrep?

Do follow this command:

# exiqgrep -i -f $user | xargs exim -Mrm



How to remove all emails to a particular user using exiqgrep?

Do follow this command:

# exiqgrep -i -r $user | xargs exim -Mrm


That’s it 🙂 🙂


Exim related post


Cheap web Hosting

Exim Commands : Searching the queue with exiqgrep

Cheap reseller Hosting

Searching the queue with exiqgrep



In this article I am explaining the command usages for finding emails in Exim mail queue for particular sender or receiver.

Exim includes a utility that is quite nice for grepping through the queue, called exiqgrep. Learn it. Know it. Live it. If you’re not using this, and if you’re not familiar with the various flags it uses, you’re probably doing things the hard way, like piping `exim -bp` into awk, grep, cut, or `wc -l`. Don’t make life harder than it already is.

First, various flags that control what messages are matched. These can be combined to come up with a very particular search.



1) Use -f ( To search the queue for messages from a specific sender )

Command :


root@localhost# exiqgrep -f [luser]@domain


2) Use -r ( To search the queue for messages for a specific recipient/domain )

Command :


root@localhost# exiqgrep -r [luser]@domain


3) Use -o ( To print messages older than the specified number of seconds. For example, messages older than 1 day )

Command :


root@localhost# exiqgrep -o 86400 […]


4) Use -y ( To print messages that are younger than the specified number of seconds. For example, messages less than an hour old )

Command :


root@localhost# exiqgrep -y 3600 […]


5) Use -s ( To match the size of a message with a regex. For example, 700-799 bytes )

Command :


root@localhost# exiqgrep -s ‘^7..$’ […]


“^3$” –> 3bytes
“^3.$” –> 3-30bytes
“^3..$” –> 3-300bytes
“^3…$” –> 3-3000bytes
And so on..


6) Use -z ( To match only frozen messages )


7) Use -x ( To match only unfrozen messages )


There are also a few flags that control the display of the output.


8) Use -i ( To print just the message-id as a result of one of the above two searches )

Command :


root@localhost# exiqgrep -i [ -r | -f ] …


9) Use -c ( To print a count of messages matching one of the above searches )

Command :


root@localhost# exiqgrep -c …


10) Print just the message-id of the entire queue

Command :


root@localhost# exiqgrep -i


That’s it 🙂 🙂


Exim related post



Cheap web Hosting