Intro
I’m trying out the system-supplied postfix on a SLES system. i had been using sendmail but there doesn’t seem to be any development on that software.
Some commands I needed right away
Well, right away I had thousands of queued messages so I needed a way to make sense of what was happening.
For these commands to make sense you need to know that I am running a second postfix configuraiton out of /etc/postfixEXT.
Display the queue
postqueue -c /etc/postfixEXT -p |
Force delivery from the queue
postqueue -c /etc/postfixEXT -f |
List one email in detail
postcat -vq -c /etc/postfixEXT QUEUEID |
Delete one email
postsuper -c /etc/postfixEXT -d QUEUEID |
Put mail on hold
postsuper -c /etc/postfixEXT -h ALL|QUEUEID |
Release mail form hold
postsuper -c /etc/postfixEXT -H ALL|QUEUEID |
How to force delivery of a single message
This command is not documented anywhere – because it doesn’t exist so you have to get creative. If you have the luxury of halting all email for a few seconds simply do this:
Display the queue to find the queue ID of the email you want to force delivery of
postqueue -c /etc/postfixEXT -p |
Put all mail on hold
postsuper -c /etc/postfixEXT -h ALL |
Now release the hold on that one email
postsuper -c /etc/postfixEXT -H QUEUEID |
QUEUEID is, of course, the queue id .e.g., F2A1A27891E, of the email in question.
Look for what happened
Check your mail log’s last lines in /var/log/mail
Revert back to normal running
postsuper -c /etc/postfixEXT -H ALL |
Since mail is store-and-forward and not real time, you can do these steps, quickly, even on a production system and no one will be the wiser if you are pretty quick. Probably takes two minutes even for a slow typer.
How to run multiple listeners
I didn’t want to disturb the system-installed postfix too much. I would let it “have” the loopback address, 127.0.0.1, leaving me the other IPs for my relay config to listen on. I added these lines to /etc/postfix/main.cf
multi_instance_enable = yes multi_instance_directories = /etc/postfixEXT |
service postfix start starts up the local postfix plus my relay. Grep the process table for either master or postfix to see. However, to be honest, service postfix stop does not kill all processes. So I always end up killing one of the master processes by hand. Update: postmulti -p stop does the trick to kill all. There is also a status or start option instead of stop.
Sendmail to Postfix migration tips
This could be a separate post but I am too lazy to do that.
What happens to the access file? I kept the name of the file access but just list all the IPs, one per line, without any further arguments, to permit just those IPs relay access. In my main.cf I have a line like this to tie it together:
mynetworks = /etc/postfixEXT/access |
Note that there is no hashed or .db version of this file any longer, unlike in the sendmail case.
References and related
Since I mentioned sendmail I have to give a shout out to one of my old sendmail posts.
More info on postfix multiple instances. A pretty complete guide.