# assuming Slackware Linux # virtual domains and Maildir format PATH=/bin:/usr/bin:/usr/local/bin SHELL=/bin/ksh DROPPRIVS=yes VERBOSE=no LOGFILE=/var/log/procmail.log MAILDIR=/var/spool/virtual/${ER_DOMAIN}/${ER_USER}/ DEFAULT=/var/spool/virtual/${ER_DOMAIN}/${ER_USER}/ SYSYEAR=`date +%Y` # grab the year from the last Received header :0 * $ ^Received:.*for .*; \/(Mon|Tue|Wed|Thu|Fri|Sat|Sun), .+ { MFROM_ = $MATCH #LOG="MFROM_ = $MFROM_" :0 * MFROM_ ?? ()\/[1-9][0-9][0-9][0-9] { YEAR = $MATCH } #LOG="YEAR = $YEAR" } # deal with sent-mail (Received header is missing) :0 * ? [[ -z $YEAR ]] { :0 * $ ^Date: \/(Mon|Tue|Wed|Thu|Fri|Sat|Sun), .+ { MFROM_ = $MATCH #LOG="MFROM_ = $MFROM_" :0 * MFROM_ ?? ()\/[1-9][0-9][0-9][0-9] { YEAR = $MATCH } #LOG="YEAR = $YEAR" } } # define and do some tests against YEAR # otherwise you may end up with `.archives..inbox` :0 * !? [[ $SYSYEAR = $YEAR ]] { prefix = .zarchives-${YEAR} } :0 * ? [[ -z $YEAR ]] { prefix = .zarchives-NOYEAR } # process sent-mail first :0 * !^Received: * ^From:.*$ER_USER@$ER_DOMAIN ${prefix}.sent-mail/ :0 * !^Received: ${prefix}.sent-mail-nofrom/ # finish-up :0 * !^\ (To:.*$ER_USER@$ER_DOMAIN\ |Cc:.*$ER_USER@$ER_DOMAIN) ${prefix}.bcc/ # we need to differenciate older vs. current year inboxes for once (the rest goes to DEFAULT) #* !? [[ $SYSYEAR = $YEAR ]] # UNTESTED :0 * ^\ (To:.*$ER_USER@$ER_DOMAIN\\ |Cc:.*$ER_USER@$ER_DOMAIN\) ${prefix}/