Skip to content

Qmail and Procmail How To

qmail wrapper to check each mail

File: /usr/local/bin/qproc-wrap.sh

#!/bin/sh

# original modified, taken from http://openwall.info/wiki/internal/email/qmail-procmail

/var/qmail/bin/preline /usr/local/bin/procmail /usr/local/etc/procmail.rc && exit 0

# check if procmail returned EX_TEMPFAIL (75)
[ $? -eq 75 ] && exit 111

# do we want to discard the message?
[ $? -eq 99 ] && exit 99

# otherwise return a permanent error
exit 100

Define procmail rules

This will send all messages with "^X-Spam-Status: Yes" and send those messages to
[email protected] email's inbox.

File: /usr/local/etc/procmail.rc

SHELL=/bin/sh
#LOGFILE=/tmp/procmail.log
#VERBOSE=yes

EXITCODE=99
:0h
*^X-Spam-Status: Yes
/usr/local/vpopmail/domains/test.com/spammer/Maildir/new

# deliver the message normally
EXITCODE=0
#

# this line needs to be here
# or else all mail will get double delivered to Maildir
# and to /var/mail/vpopmail, slowly filling /var
:0
/dev/null

Now run script using .qmail / .qmail-default

File: .qmail-default

| /usr/local/bin/qproc-wrap.sh
| /usr/local/vpopmail/bin/vdelivermail '' bounce-no-mailbox