X-Git-Url: https://git.madduck.net/etc/mailfilter.git/blobdiff_plain/2e7884b9fa8f9c3961a4acb15d58e6ec534ecd5a..0a23c4eb391215da52f5b0cd21c24ac383f75a2b:/procmail/spamfilter

diff --git a/procmail/spamfilter b/procmail/spamfilter
index 9e6d787..491f157 100755
--- a/procmail/spamfilter
+++ b/procmail/spamfilter
@@ -23,29 +23,50 @@ PMDIR=${PMDIR:-$HOME/.etc/mailfilter/procmail}
 # Note: add E flag to next recipe when uncommenting
 #:0
 #* SPAMTRAPPED ?? .
-#{ 
+#{
 #  LOG="spamfilter:  skipping checks for spamtrapped message$NL"
 #  :0 fw
 #  |$FORMAIL -I"X-Spam: spamtrapped"
 #}
 
-# check whether this message is being reinjected
-TRAINED_AS
+# check whether this message is being resubmitted
 :0
-*$ $REPROC_MESSAGE
-* ^X-Trained-As: \/(h|sp)am
+*$ $MSG_DEJAVU
 {
-  LOG="spamfilter:  skipping already trained $MATCH$NL"
   :0
-  * MATCH ?? spam
-  { IS_SPAM=already-trained }
+  * TRAINED_AS ?? .
+  {
+    LOG="spamfilter:  skipping already trained $TRAINED_AS$NL"
+    :0 fw
+    |$FORMAIL -I"X-Spam: $TRAINED_AS (already trained)"
+    :0
+    * TRAINED_AS ?? spam
+    { IS_SPAM=already-trained }
+  }
+
+  :0 E
+  {
+    LOG="spamfilter:  skipping resubmitted message$NL"
+    :0 fw
+    |$FORMAIL -I"X-Spam: unknown (resubmitted)"
+  }
+}
+
+# do not run spamfilters if the message destination is already set
+:0 E
+* DEST ?? .
+{
+  LOG="spamfilter:  message already routed to '$DEST'$NL"
+  :0 fw
+  |$FORMAIL -I"X-Spam: unknown (already routed)"
+  SPAM_UNKNOWN=already-destined
 }
 
 # let earlier parts of the mailfilter cause bypassing the checks
 :0 E
 * SKIP_SPAMCHECKS ?? .
-{ 
-  LOG="spamfilter:  skipping checks as requested: $SKIP_SPAMCHECKS$NL" 
+{
+  LOG="spamfilter:  skipping checks as requested: $SKIP_SPAMCHECKS$NL"
   :0 fw
   |$FORMAIL -I"X-Spam: unknown (skip requested)"
   SPAM_UNKNOWN=skip-requested
@@ -60,6 +81,7 @@ TRAINED_AS
   :0 fw
   |$FORMAIL -I"X-Spam: unknown (check skipped)"
   SPAM_UNKNOWN=skip-match
+  SKIP_SPAMCHECKS=match
 }
 
 # sanity check on message size
@@ -75,6 +97,9 @@ TRAINED_AS
 # now run the spamfilters
 :0 E
 {
+  INCLUDERC=$PMDIR/spamtraps
+  INCLUDERC=$PMDIR/spammers
+  INCLUDERC=$PMDIR/spampat
   INCLUDERC=$PMDIR/pre-spam-cleanup
 
   # crm114
@@ -83,6 +108,7 @@ TRAINED_AS
   :0
   * !SKIP_CRM ?? .
   {
+    #TODO: somehow filter out headers we added
     :0 fw
     |$CRM114
 
@@ -239,7 +265,7 @@ TRAINED_AS
   :0 E
   * CRM_SPAM ?? SPAM
   * SA_SPAM ?? Yes
-  { 
+  {
     IS_SPAM=sa+crm
     :0 fw
     |$FORMAIL -I"X-Spam: yes (crm114:$CRM_SCORE SA:$SA_SCORE)"
@@ -252,14 +278,15 @@ TRAINED_AS
 # schedule spamtrapped ham for retraining as spam
 :0
 * SPAMTRAPPED ?? .
+* ! SKIP_SPAMCHECKS ?? .
 * ! IS_SPAM ?? .
-{ 
+{
   LOG="spamfilter:  found spamtrapped ham, retraining...$NL"
   :0 fw
   |$FORMAIL -I"X-Spam: spamtrapped ham"
   IS_SPAM=spamtrapped-ham
   RETRAIN=spam
+  SPAM_UNSURE
 }
 
-INCLUDERC=$PMDIR/handlespam
 #VERBOSE=no