From: asjo@koldfront.dk (Adam Sjøgren)
Subject: Re: CRM114 Mailfilter and spam.el
Date: Tue, 06 Apr 2004 23:36:54 +0200 [thread overview]
Message-ID: <87brm4ss95.fsf@virgil.koldfront.dk> (raw)
In-Reply-To: <87ptangacp.fsf@virgil.koldfront.dk>
[-- Attachment #1: Type: text/plain, Size: 371 bytes --]
On Sun, 04 Apr 2004 15:07:34 +0200, Adam wrote:
>> [untested!]
> I will test, thanks!
Works great, thanks again.
Attached is a patch with the changes you suggested incorporated.
Best regards,
--
"Do not feed the oysters under the clouds" Adam Sjøgren
asjo@koldfront.dk
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: crm114-mailfilter-2.patch --]
[-- Type: text/x-patch, Size: 10232 bytes --]
Index: spam.el
===================================================================
RCS file: /usr/local/cvsroot/gnus/lisp/spam.el,v
retrieving revision 7.27
diff -u -r7.27 spam.el
--- spam.el 2 Apr 2004 19:09:16 -0000 7.27
+++ spam.el 6 Apr 2004 21:34:42 -0000
@@ -263,6 +263,11 @@
:type 'boolean
:group 'spam)
+(defcustom spam-use-crm114 nil
+ "Whether CRM114 Mailfilter should be used by `spam-split'."
+ :type 'boolean
+ :group 'spam)
+
(defcustom spam-install-hooks (or
spam-use-dig
spam-use-gmane-xref
@@ -281,7 +286,8 @@
spam-use-BBDB-exclusive
spam-use-ifile
spam-use-stat
- spam-use-spamoracle)
+ spam-use-spamoracle
+ spam-use-crm114)
"Whether the spam hooks should be installed.
Default to t if one of the spam-use-* variables is set."
:group 'spam
@@ -515,6 +521,53 @@
:type 'string
:group 'spam-spamassassin)
+(defgroup spam-crm114 nil
+ "Spam CRM114 Mailfilter configuration."
+ :group 'spam)
+
+(defcustom spam-crm114-program (executable-find "mailfilter.crm")
+ "File path of the CRM114 Mailfilter executable program."
+ :type '(choice (file :tag "Location of CRM114 Mailfilter")
+ (const :tag "CRM114 Mailfilter is not installed"))
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-header "X-CRM114-Status"
+ "The header that CRM114 Mailfilter inserts in messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-switch "--learnspam"
+ "The switch that CRM114 Mailfilter uses to register spam messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-switch "--learnnonspam"
+ "The switch that CRM114 Mailfilter uses to register ham messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-spam-strong-switch "--UNKNOWN"
+ "The switch that CRM114 Mailfilter uses to unregister ham messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-ham-strong-switch "--UNKNOWN"
+ "The switch that CRM114 Mailfilter uses to unregister spam messages."
+ :type 'string
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-positive-spam-header "^SPAM"
+ "The regex on `spam-crm114-header' for positive spam identification."
+ :type 'regexp
+ :group 'spam-crm114)
+
+(defcustom spam-crm114-database-directory nil
+ "Directory path of the CRM114 Mailfilter databases."
+ :type '(choice (directory
+ :tag "Location of the CRM114 Mailfilter database directory")
+ (const :tag "Use the default"))
+ :group 'spam-crm114)
+
;;; Key bindings for spam control.
(gnus-define-keys gnus-summary-mode-map
@@ -605,6 +658,7 @@
(gnus-group-spam-exit-processor-stat spam spam-use-stat)
(gnus-group-spam-exit-processor-spamoracle spam spam-use-spamoracle)
(gnus-group-spam-exit-processor-spamassassin spam spam-use-spamassassin)
+ (gnus-group-spam-exit-processor-crm114 spam spam-use-crm114)
(gnus-group-ham-exit-processor-ifile ham spam-use-ifile)
(gnus-group-ham-exit-processor-bogofilter ham spam-use-bogofilter)
(gnus-group-ham-exit-processor-stat ham spam-use-stat)
@@ -612,7 +666,8 @@
(gnus-group-ham-exit-processor-BBDB ham spam-use-BBDB)
(gnus-group-ham-exit-processor-copy ham spam-use-ham-copy)
(gnus-group-ham-exit-processor-spamassassin ham spam-use-spamassassin)
- (gnus-group-ham-exit-processor-spamoracle ham spam-use-spamoracle))
+ (gnus-group-ham-exit-processor-spamoracle ham spam-use-spamoracle)
+ (gnus-group-ham-exit-processor-crm114 ham spam-use-crm114))
"The `spam-list-of-processors' list.
This list contains pairs associating a ham/spam exit processor
variable with a classification and a spam-use-* variable.")
@@ -657,6 +712,9 @@
(defun spam-group-spam-processor-spamoracle-p (group)
(spam-group-processor-p group 'gnus-group-spam-exit-processor-spamoracle))
+(defun spam-group-spam-processor-crm114-p (group)
+ (spam-group-processor-p group 'gnus-group-spam-exit-processor-crm114))
+
(defun spam-group-ham-processor-bogofilter-p (group)
(spam-group-processor-p group 'gnus-group-ham-exit-processor-bogofilter))
@@ -678,6 +736,9 @@
(defun spam-group-ham-processor-spamoracle-p (group)
(spam-group-processor-p group 'gnus-group-ham-exit-processor-spamoracle))
+(defun spam-group-ham-processor-crm114-p (group)
+ (spam-group-processor-p group 'gnus-group-ham-exit-processor-crm114))
+
(defun spam-report-articles-gmane (n)
"Report the current message as spam.
Respects the process/prefix convention."
@@ -686,6 +747,7 @@
(gnus-summary-remove-process-mark article)
(spam-report-gmane article)))
+; asjo: Perhaps add spam-crm114-score here? How?
(defun spam-generic-score ()
(interactive)
"Invoke whatever scoring method we can."
@@ -776,8 +838,8 @@
(spam-ham-copy-routine
(gnus-parameter-ham-process-destination gnus-newsgroup-name)))
- ;; now move all ham articles out of spam groups
- (when (spam-group-spam-contents-p gnus-newsgroup-name)
+ ;; now move all ham articles out of non-ham groups
+ (when (not (spam-group-ham-contents-p gnus-newsgroup-name))
(gnus-message 5 "Moving ham messages from spam group")
(spam-ham-move-routine
(gnus-parameter-ham-process-destination gnus-newsgroup-name))))
@@ -859,7 +921,7 @@
(gnus-check-backend-function
'request-move-article gnus-newsgroup-name))
(respool-method (gnus-find-method-for-group gnus-newsgroup-name))
- article mark todo deletep respool)
+ article mark deletep respool)
(when (member 'respool groups)
(setq respool t) ; boolean for later
@@ -1006,7 +1068,8 @@
(spam-use-spamassassin-headers . spam-check-spamassassin-headers)
(spam-use-spamassassin . spam-check-spamassassin)
(spam-use-bogofilter-headers . spam-check-bogofilter-headers)
- (spam-use-bogofilter . spam-check-bogofilter))
+ (spam-use-bogofilter . spam-check-bogofilter)
+ (spam-use-crm114 . spam-check-crm114))
"The spam-list-of-checks list contains pairs associating a
parameter variable with a spam checking function. If the
parameter variable is true, then the checking function is called,
@@ -1028,7 +1091,8 @@
spam-use-bogofilter
spam-use-blackholes
spam-use-spamassassin
- spam-use-spamoracle)
+ spam-use-spamoracle
+ spam-use-crm114)
"The spam-list-of-statistical-checks list contains all the mail
splitters that need to have the full message body available.
Note that you should fetch extra headers if you don't like this,
@@ -1209,7 +1273,12 @@
(spam-use-bogofilter spam-bogofilter-register-ham-routine
spam-bogofilter-register-spam-routine
spam-bogofilter-unregister-ham-routine
- spam-bogofilter-unregister-spam-routine))
+ spam-bogofilter-unregister-spam-routine)
+ (spam-use-crm114 spam-crm114-register-ham-routine
+ spam-crm114-register-spam-routine
+ ;; does CRM114 Mailfilter support unregistration?
+ nil
+ nil))
"The spam-registration-functions list contains pairs
associating a parameter variable with the ham and spam
registration functions, and the ham and spam unregistration
@@ -2162,6 +2231,89 @@
(defun spam-spamassassin-unregister-ham-routine (articles)
(spam-spamassassin-register-with-sa-learn articles nil t))
+\f
+;;;; CRM114 Mailfilter
+(defun spam-check-crm114-headers (&optional score)
+ (let ((header (message-fetch-field spam-crm114-header))
+ (spam-split-group (if spam-split-symbolic-return
+ 'spam
+ spam-split-group)))
+ (when header ; return nil when no header
+ (if score ; scoring mode
+ (if (string-match "( pR: \\([0-9.-]+\\)" header)
+ (match-string 1 header)
+ "0")
+ ;; spam detection mode
+ (when (string-match spam-crm114-positive-spam-header
+ header)
+ spam-split-group)))))
+
+;; return something sensible if the score can't be determined
+(defun spam-crm114-score ()
+ "Get the CRM114 Mailfilter pR"
+ (interactive)
+ (save-window-excursion
+ (gnus-summary-show-article t)
+ (set-buffer gnus-article-buffer)
+ (let ((score (or (spam-check-crm114-headers t)
+ (spam-check-crm114 t))))
+ (gnus-summary-show-article)
+ (message "pR: %s" score)
+ (or score "0"))))
+
+(defun spam-check-crm114 (&optional score)
+ "Check the CRM114 Mailfilter backend for the classification of this message"
+ (let ((article-buffer-name (buffer-name))
+ (db spam-crm114-database-directory)
+ return)
+ (with-temp-buffer
+ (let ((temp-buffer-name (buffer-name)))
+ (save-excursion
+ (set-buffer article-buffer-name)
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-crm114-program
+ nil temp-buffer-name nil
+ (when db (list (concat "--fileprefix=" db)))))
+ (setq return (spam-check-crm114-headers score))))
+ return))
+
+(defun spam-crm114-register-with-crm114 (articles
+ spam
+ &optional unregister)
+ "Register an article, given as a string, as spam or non-spam."
+ (dolist (article articles)
+ (let ((article-string (spam-get-article-as-string article))
+ (db spam-crm114-database-directory)
+ (switch (if unregister
+ (if spam
+ spam-crm114-spam-strong-switch
+ spam-crm114-ham-strong-switch)
+ (if spam
+ spam-crm114-spam-switch
+ spam-crm114-ham-switch))))
+ (when (stringp article-string)
+ (with-temp-buffer
+ (insert article-string)
+
+ (apply 'call-process-region
+ (point-min) (point-max)
+ spam-crm114-program
+ nil nil nil
+ (when db (list switch (concat "--fileprefix=" db)))))))))
+
+(defun spam-crm114-register-spam-routine (articles &optional unregister)
+ (spam-crm114-register-with-crm114 articles t unregister))
+
+(defun spam-crm114-unregister-spam-routine (articles)
+ (spam-crm114-register-spam-routine articles t))
+
+(defun spam-crm114-register-ham-routine (articles &optional unregister)
+ (spam-crm114-register-with-crm114 articles nil unregister))
+
+(defun spam-crm114-unregister-ham-routine (articles)
+ (spam-crm114-register-ham-routine articles t))
+
\f
;;;; Hooks
next prev parent reply other threads:[~2004-04-06 21:36 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-01 20:54 Adam Sjøgren
2004-04-02 6:22 ` Kai Grossjohann
2004-04-02 16:04 ` Adam Sjøgren
2004-04-03 13:28 ` Kai Grossjohann
2004-04-03 14:01 ` Adam Sjøgren
2004-04-05 13:21 ` Ted Zlatanov
2004-04-02 16:06 ` Adam Sjøgren
2004-04-02 17:14 ` Ted Zlatanov
2004-04-03 21:10 ` Adam Sjøgren
2004-04-03 21:19 ` Adam Sjøgren
2004-04-03 21:48 ` Adam Sjøgren
2004-04-03 21:58 ` Adam Sjøgren
2004-04-03 13:29 ` Kai Grossjohann
2004-04-03 13:49 ` Adam Sjøgren
2004-04-06 8:12 ` Kai Grossjohann
2004-04-06 21:40 ` Adam Sjøgren
2004-04-02 16:10 ` Jody Klymak
2004-04-02 17:07 ` Ted Zlatanov
2004-04-02 17:06 ` Ted Zlatanov
2004-04-02 17:26 ` Adam Sjøgren
2004-04-02 17:44 ` Ted Zlatanov
2004-04-03 14:22 ` Adam Sjøgren
2004-04-03 14:24 ` Adam Sjøgren
2004-04-03 23:59 ` Adam Sjøgren
2004-04-04 1:59 ` Jesper Harder
2004-04-04 13:07 ` Adam Sjøgren
2004-04-05 13:24 ` Ted Zlatanov
2004-04-05 15:50 ` Jesper Harder
2004-04-06 21:36 ` Adam Sjøgren [this message]
2004-05-20 18:39 ` Ted Zlatanov
2004-05-20 19:19 ` Adam Sjøgren
2004-05-22 23:44 ` Lars Magne Ingebrigtsen
2004-05-23 13:44 ` Adam Sjøgren
2004-05-26 16:23 ` Ted Zlatanov
2004-05-26 20:30 ` Adam Sjøgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87brm4ss95.fsf@virgil.koldfront.dk \
--to=asjo@koldfront.dk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).