54

I used mailq command and I got a line like for example:

A705238B4C   603953 Wed May 23 11:09:58  apache@myserver.com

So, now I'm wondering is there a way where I can "read" an actual content of the mail by its id A705238B4C

Nikola
  • 907

2 Answers2

87

The best way is to make use of the postcat command.

postcat -q A705238B4C

At least the system I can look at right now, /var/spool/postfix is the master directory. Subdirectories of that which matter include active, deferred, bounce, etc. Queued files may be stored using the full file name (A705238B4C) or with some level of hashing depth (A/7/05238B4C).

Jeff Ferland
  • 20,987
4

As stated in Jeff's answer you can use postcat with the -q option.

But since Postfix version 2.7, you can also get readable output, by adding the -h and/or -b options:

-b Show body content.

-h Show message header content.

-q Search the Postfix queue for the named files instead of taking the names literally.

So this will show you the entire original message with headers and body:

id=DEDCB58048B
postcat -bh -q $id

or to show the headers of all queued messages, you could do something like this:

mailq | awk '/^[A-F0-9]+\s+/ {print $1}' \
| while read id; do echo $id; postcat -h -q $id; echo; done
mivk
  • 4,924