#!/bin/bash MAILROOT=/usr/local/virtual DSPAM=/usr/local/bin/dspam LOGFILE=/var/log/dspam/fix.log CMDS=".Spam.IsSpam:spam:mv@|MBOX|/.Spam/cur/ .Spam.NotSpam:innocent:mv@|MBOX|/new/" ret=0 echo "Start at "`date` >>${LOGFILE} for DOMAIN in ${MAILROOT}/*; do DOMAIN_NAME=`echo ${DOMAIN} |sed -e "s:${MAILROOT}/::g"` echo "Starting ${DOMAIN_NAME}" >>${LOGFILE} for USER in ${DOMAIN}/*; do USER_NAME=`echo ${USER} |sed -e "s:${DOMAIN}/::g"` echo "Starting ${USER_NAME}" >>${LOGFILE} for CMD in ${CMDS}; do FOLDER=`echo ${CMD} |awk -F: '{ print $1 }'` CLASS=`echo ${CMD} |awk -F: '{ print $2 }'` ACTION_P=`echo ${CMD} |awk -F: '{ print $3 }'` ACTION=`echo ${ACTION_P} |awk -F\@ '{ print $1 }'` ARG_P=`echo ${ACTION_P} |awk -F\@ '{ print $2 }'` ARG=`echo ${ARG_P} |sed -e "s:|MBOX|:${USER}:g"` echo "Doing folder: ${FOLDER}, classing as: ${CLASS}" >>${LOGFILE} echo "Action: ${ACTION}, Arg: ${ARG}" >>${LOGFILE} MAILDIR=${USER}/${FOLDER} if [[ -d ${MAILDIR} ]]; then for MSG in ${MAILDIR}/cur/* \ ${MAILDIR}/new/*; do if [[ -a ${MSG} ]]; then out=`cat ${MSG} |${DSPAM} --mode=teft \ --user ${USER_NAME}@${DOMAIN_NAME} --class=${CLASS} --source=error 2>&1` if [[ -z ${out} ]]; then echo "Exec: '"${ACTION} ${MSG} ${ARG}"'" >>${LOGFILE} ${ACTION} ${MSG} ${ARG} else echo "Error message:" >>${LOGFILE} echo $out >>${LOGFILE} grep -m 1 -i "Subject:" ${MSG} >>${LOGFILE} echo -n "File:" ${MSG} >>${LOGFILE} echo >>${LOGFILE} echo >>${LOGFILE} ret=1 fi fi done else echo "Maildir doesn't exist" >>${LOGFILE} fi done done done exit $ret # vim:sts=8:ts=8:sw=8:noet