### basic settings SHELL=/bin/sh PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin COMSAT=no LINEBUF=16384 UMASK=0077 PMVAR=$HOME/.var/procmail MAILFILT=$HOME/.etc/mailfilter PMRULES=$PMDIR/rules CONF=$MAILFILT/config REPLIES=$MAILFILT/autoreplies LOGFILE=${LOGFILE:-$PMVAR/log} LOGABSTRACT=no LC_CTYPE=de_CH.UTF-8 #NICE='/usr/bin/nice -20' PROCMAIL="$NICE /usr/bin/procmail -p $PMDIR/procmailrc" FORMAIL="$NICE /usr/bin/formail -f" GREP="$NICE /bin/grep" EGREP="$NICE /bin/egrep" FGREP="$NICE /bin/fgrep" SED="$NICE /bin/sed" BIN_DATE="/bin/date" DELIVER="$NICE /usr/lib/dovecot/deliver" CRM114="$NICE /usr/share/crm114/mailreaver.crm -u $MAILFILT/crm114/" SA_PREFS="$MAILFILT/spamassassin/user_prefs" SPAMASSASSIN="$NICE /usr/bin/spamassassin --prefs-file=$SA_PREFS" SPAMC="$NICE /usr/bin/spamc --log-to-stderr --no-safe-fallback" #SPAMC="$SPAMASSASSIN" TRAINER="$NICE $MAILFILT/bin/train" SQLITE="$NICE /usr/bin/sqlite3" BASE=$HOME/.maildir #DEFAULT="|$DELIVER" DEFAULT=$BASE/ ORGMAIL=$HOME/BOUNCED-MAIL # maximum message size for spam checking SPAMCHECK_MAX_MESSAGE_SIZE=512000 # if crm114 is unsure and SA returns a score less-than-or-equal to this, # autotrain crm114 with ham CRM_UNSURE_SA_AUTOTRAIN_LIMIT_HAM=0.0 # if crm114 classifies a message as spam but SA returns a score # less-than-or-equal to this, retrain crm114 CRM_MISCLASSIFY_SA_AUTOTRAIN_LIMIT_HAM=-1.0 # if crm114 is unsure and SA returns a score greater than this, autotrain # crm114 with spam CRM_UNSURE_SA_AUTOTRAIN_LIMIT_SPAM=8.0 # if crm114 classifies a message as ham but SA returns a score # greate than this, retrain crm114 CRM_MISCLASSIFY_SA_AUTOTRAIN_LIMIT_SPAM=11 ### constants used in rules NL=" " RE_MYDOMAIN="(.+\.)*madduck\.net" RE_MAILRELAYS="(seamus|clegg)\.madduck\.net" RE_SPACE="[ ]" RE_NOT_SPACE="[^ ]" RE_SPACE_NEWLINE="(^|$RE_SPACE)" RE_FIRSTNAME="martin($RE_SPACE_NEWLINE+f(\.?|elix))?" RE_LASTNAME="kraff?t" RE_EXTRACT_HEADER_VALUE="$RE_SPACE*\/$RE_NOT_SPACE.*" RE_EMAILADDRESS="${RE_NOT_SPACE}+@${RE_NOT_SPACE}+\.[^ >]+" DEJAVU_HEADER=X-Deja-Vu NULL=/dev/null DELAYED_QUEUE=$BASE/.delayed/ TICKLER_QUEUE=$BASE/.store/ DISCARD=$BASE/.discard/ SPAM=$BASE/.spam/ #DISCARD="'|$DELIVER -m BASE.discard'" DELAY_NEXT_WEEKEND='next sunday 28 hours ago' # fri night, 20:00 DELAY_TONIGHT='tomorrow 00:00 4 hours ago' # tonight at 20:00 DELAY_AFTERNOON='tomorrow 00:00 8 hours ago' # today at 16:00 OURDATE="`$BIN_DATE +'%s %Y%m%d.%H%M.%N %a, %d %b %Y %T %z'`" :0 *$ OURDATE ?? ^\/${RE_NOT_SPACE}+ { OURDATE_TS="$MATCH" } :0 *$ OURDATE ?? ^[0-9]+${RE_SPACE}+\/${RE_NOT_SPACE}+ { OURDATE_SHORT="$MATCH" } :0 *$ OURDATE ?? ^[0-9]+${RE_SPACE}+[0-9.]+${RE_SPACE}+\/.+ { OURDATE="$MATCH" } ### variables from the message ### local recipient data # user+foobar@my.domain.org # < > $USER # < > $EXTENSION # < > $LOCAL # < > $DOMAIN # < > $RECIPIENT USER="${USER:-$LOGNAME}" EXTENSION="${EXTENSION:-}" LOCAL="${LOCAL:-$USER${EXTENSION:++$EXTENSION}}" HOSTNAME="`hostname --fqdn`" DOMAIN="${DOMAIN:-$HOSTNAME}" RECIPIENT="${RECIPIENT:-$LOCAL@$DOMAIN}" ID="$LOGNAME@$HOSTNAME" # message-id INCLUDERC=$PMDIR/get-msgid :0 *$ ^From:$RE_EXTRACT_HEADER_VALUE { FROM="$MATCH" } :0 * FROM ?? ^.+ <\/.+@[^>]+ { FROMEMAIL="$MATCH" } :0 E * FROM ?? ^.+ \(\/.+@[^\)]+ { FROMEMAIL="$MATCH" } :0 E *$ FROM ?? ^\/$RE_EMAILADDRESS { FROMEMAIL="$MATCH" } :0 * FROMEMAIL ?? ^".+"$ * FROMEMAIL ?? ^"\/[^"]+ { FROMEMAIL="$MATCH" } # if $SENDER is undefined or not an email address, get it from the message :0 * !SENDER ?? @ { :0 *$ ^Sender:$RE_EXTRACT_HEADER_VALUE { SENDER="$MATCH" } :0 E { SENDER="$FROMEMAIL" } } :0 *$ ^Date:$RE_EXTRACT_HEADER_VALUE { DATE="$MATCH" } :0 *$ ^Subject:$RE_EXTRACT_HEADER_VALUE { SUBJECT=$MATCH :0 * SUBJECT ?? =\?.+\?[QBqb]\?.+\?= { SUBJECT="`PERL_UNICODE=S perl -MEncode=decode -e \"print decode(\\\"MIME-Header\\\", \\\"$SUBJECT\\\") . \\\"\n\\\";\"`" } } :0 *$ ^X-Original-To:$RE_EXTRACT_HEADER_VALUE { ORIGINAL_TO="$MATCH" } :0 E * ^Received: { LOGLATER="NO ORIGINAL_TO: $MSGID" } :0 *$ ^X-Trained-As:$RE_EXTRACT_HEADER_VALUE { TRAINED_AS="$MATCH" } :0 *$ ^X-Postponed:$RE_EXTRACT_HEADER_VALUE { POSTPONED="$MATCH" } # fix variable values for special cases INCLUDERC=$PMDIR/normalise :0 * ORIGINAL_TO ?? ^\/[^@]+ { ORIG_LOCAL="$MATCH" } :0 * ORIGINAL_TO ?? .+@\/.+ { ORIG_DOMAIN="$MATCH" } ### run-time variables # MSG_DEJAVU # a procmail-style flag, which is true if unset and false if set (to !). # unset by dejavu if the message has already been seen by the filter (according # to the X-Been-There header). MSG_DEJAVU=! # DEST # set this to a folder if the message should be delivered elsewhere than the # default DEST # SKIP_SPAMCHECKS # if set, cuases spamchecks to be skipped, value lists reason SKIP_SPAMCHECKS # SPAMTRAPPED # set by spamtrapped and eqdomains and used to bypass spamchecks and handle as # spam immediately. The value identifies who unset the variable. SPAMTRAPPED # IS_SPAM # if set, then the mailfilter is as sure as it gets that the message is spam. # The value identifies who set the variable. IS_SPAM # SPAM_DISAGREE # if set, then the various spamchecks disagree about spaminess of the mail. # The value can hold additional information. SPAM_DISAGREE # SPAM_UNSURE # if set, then the various spamchecks are unsure about spaminess of the mail. # The value can hold additional information. SPAM_UNSURE # SPAM_UNKNOWN # if set, the spamchecks were skipped. The value gives the reason for # skipping. SPAM_UNKNOWN # RETRAIN # if set, causes spamfilters to be retrained, according to the variable's value RETRAIN # JUSTME # if set, contains reason why justme message was passed JUSTME # DISABLE_DELAYS # if set, disables delaying messages DISABLE_DELAYS # DELAY # argument to /bin/date -d to indicate a message delay. This is overridden by # RELEASE DELAY # RELEASE # /bin/date time expression indicating the time at which a message is to be # released. Overrides DELAY. RELEASE # MARK_READ # when set, causes mails to be marked as read when delivered. Can be # initialised with DELIVER_READ MARK_READ=$DELIVER_READ # vim:ft=procmail