### 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.*"

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

# if $SENDER is undefined or not an email address, get it from the message
:0
* !SENDER ?? @
*$ ^Sender:$RE_EXTRACT_HEADER_VALUE
{ SENDER="$MATCH" }

:0
*$ ^Date:$RE_EXTRACT_HEADER_VALUE
{ DATE="$MATCH" }

:0
*$ ^From:$RE_EXTRACT_HEADER_VALUE
{ FROM="$MATCH" }

:0
*$ ^Subject:$RE_EXTRACT_HEADER_VALUE
{
  SUBJECT=$MATCH

  # mimedecode.c: * Disclaimer: We only handle charset of iso-8859-1
  :0
  * SUBJECT ?? =\?iso-8859-1\?[QBqb]\?.+\?=
  {
    DECODED="`echo Subject: $SUBJECT | mimedecode | iconv -f latin1 -t utf-8`"
    :0
    *$ DECODED ?? ^Subject:$RE_EXTRACT_HEADER_VALUE
    { SUBJECT=$MATCH }
  }
}

: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