LOGFILE=${LOGFILE:-$PMVAR/log}
LOGABSTRACT=no
-NICE='/usr/bin/nice -20'
+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 -p $SA_PREFS"
-#SPAMC="$NICE /usr/bin/spamc -lxu $ID"
-SPAMC="$SPAMASSASSIN"
-TRAINER="$MAILFILT/bin/train"
+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"
-OURDATE=`date -R`
-OURDATE_SHORT=`date +%Y.%m.%d.%H.%m.%N`
+SQLITE="$NICE /usr/bin/sqlite3"
-INBOX=$HOME/.maildir
+BASE=$HOME/.maildir
-DEFAULT=$INBOX/
+#DEFAULT="|$DELIVER"
+DEFAULT=$BASE/
ORGMAIL=$HOME/BOUNCED-MAIL
# maximum message size for spam checking
-SPAMCHECK_MAX_MESSAGE_SIZE=2500000
+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=2.0
+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
### constants used in rules
NL="
"
-RE_MYDOMAIN="(.+\.)?madduck\.net"
+RE_MYDOMAIN="(.+\.)*madduck\.net"
RE_MAILRELAYS="(seamus|clegg)\.madduck\.net"
-RE_SPACE_NEWLINE="(^|[ ])"
+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_EXTRACT_HEADER_VALUE="$RE_SPACE*\/$RE_NOT_SPACE.*"
+RE_EMAILADDRESS="${RE_NOT_SPACE}+@${RE_NOT_SPACE}+\.[^ >]+"
+
+DEJAVU_HEADER=X-Deja-Vu
NULL=/dev/null
-DISCARD=$INBOX/.discard/
+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
# 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 ?? @
-*$ ^Sender:$RE_EXTRACT_HEADER_VALUE
-{ SENDER="$MATCH" }
+{
+ :0
+ *$ ^Sender:$RE_EXTRACT_HEADER_VALUE
+ { SENDER="$MATCH" }
+
+ :0 E
+ { SENDER="$FROMEMAIL" }
+}
:0
*$ ^Date:$RE_EXTRACT_HEADER_VALUE
{ DATE="$MATCH" }
-:0
-*$ ^From:$RE_EXTRACT_HEADER_VALUE
-{ FROM="$MATCH" }
-
:0
*$ ^Subject:$RE_EXTRACT_HEADER_VALUE
-{ SUBJECT="$MATCH" }
+{
+ SUBJECT=$MATCH
-# TODO: can be removed as soon as albatross is out of the loop
-:0 fw
-* ^X-Original-To-Saved: \/.*
-|$FORMAIL -R X-Original-To-Saved X-Original-To
+ :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
-{ LOG="NO ORIGINAL_TO: $MSGID" }
+* ^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
### run-time variables
-# OLD_MESSAGE
+# MSG_DEJAVU
# a procmail-style flag, which is true if unset and false if set (to !).
-# unset by marknew if the message has already been seen by the filter (according
+# unset by dejavu if the message has already been seen by the filter (according
# to the X-Been-There header).
-OLD_MESSAGE=!
+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
# skipping.
SPAM_UNKNOWN
-# CRM_RETRAIN
-# if set, causes crm114 to be retrained, according to the variable's value
-CRM_RETRAIN
+# 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
+
+:0
+* ? test -e $HOME/procmail.nodelays
+{ DISABLE_DELAYS=true }
+
+# 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