X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fspam.el;h=ff2227b51fce954a8d3fadc7740ececade300bda;hb=f6935d192f748d6907da49c2856407d0de328b00;hp=0ba194675af927a548aa663e4fc1de88b18d2d13;hpb=c40056695d7dcc4e7c71707009bc077a18a3344d;p=gnus diff --git a/lisp/spam.el b/lisp/spam.el index 0ba194675..ff2227b51 100644 --- a/lisp/spam.el +++ b/lisp/spam.el @@ -1,6 +1,6 @@ ;;; spam.el --- Identifying spam -;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Maintainer: Ted Zlatanov @@ -42,6 +42,7 @@ (eval-when-compile (require 'cl)) (eval-when-compile (require 'spam-report)) +(eval-when-compile (require 'hashcash)) (require 'gnus-sum) @@ -108,6 +109,7 @@ a group through group/topic parameters overrides this mechanism." (defcustom spam-mark-new-messages-in-spam-group-as-spam t "Whether new messages in a spam group should get the spam-mark." :type 'boolean + ;; :version "22.1" ;; Gnus 5.10.8 / No Gnus 0.3 :group 'spam) (defcustom spam-log-to-registry nil @@ -1154,6 +1156,8 @@ backends)." (push 'X-Spam-Status list)) (when spam-use-bogofilter (push 'X-Bogosity list)) + (when spam-use-crm114 + (push 'X-CRM114-Status list)) list)) (defun spam-user-format-function-S (headers) @@ -1172,26 +1176,37 @@ backends)." (return)))) result)) +(defvar spam-spamassassin-score-regexp + ".*\\b\\(?:score\\|hits\\)=\\(-?[0-9.]+\\)" + "Regexp matching SpamAssassin score header. +The first group must match the number.") +;; "score" for Spamassassin 3.0 or later: +;; X-Spam-Status: Yes, score=13.1 required=5.0 tests=DNS_FROM_RFC_ABUSE, +;; [...],UNDISC_RECIPS autolearn=disabled version=3.0.3 + + (defun spam-extra-header-to-number (header headers) "Transform an extra HEADER to a number, using list of HEADERS. Note this has to be fast." - (if (gnus-extra-header header headers) - (cond - ((eq header 'X-Spam-Status) - (string-to-number (gnus-replace-in-string - (gnus-extra-header header headers) - ".*hits=" ""))) - ;; for CRM checking, it's probably faster to just do the string match - ((and spam-use-crm114 (string-match "( pR: \\([0-9.-]+\\)" header)) - (match-string 1 header)) - ((eq header 'X-Bogosity) - (string-to-number (gnus-replace-in-string - (gnus-replace-in-string - (gnus-extra-header header headers) - ".*spamicity=" "") - ",.*" ""))) - (t nil)) - nil)) + (let ((header-content (gnus-extra-header header headers))) + (if header-content + (cond + ((eq header 'X-Spam-Status) + (string-to-number (gnus-replace-in-string + header-content + spam-spamassassin-score-regexp + "\\1"))) + ;; for CRM checking, it's probably faster to just do the string match + ((and spam-use-crm114 (string-match "( pR: \\([0-9.-]+\\)" header-content)) + (string-to-number (match-string 1 header-content))) + ((eq header 'X-Bogosity) + (string-to-number (gnus-replace-in-string + (gnus-replace-in-string + header-content + ".*spamicity=" "") + ",.*" ""))) + (t nil)) + nil))) (defun spam-summary-score (headers &optional specific-header) "Score an article for the summary buffer, as fast as possible. @@ -1246,6 +1261,7 @@ Will not return a nil score." (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-report-gmane spam spam-use-gmane) ;; Buggy? (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-bsfilter ham spam-use-bsfilter) @@ -2023,18 +2039,10 @@ See the Info node `(gnus)Fancy Mail Splitting' for more details." ;;{{{ Hashcash. -(eval-when-compile - (autoload 'mail-check-payment "hashcash")) - -(condition-case nil - (progn - (require 'hashcash) - - (defun spam-check-hashcash () - "Check the headers for hashcash payments." - (mail-check-payment))) ;mail-check-payment returns a boolean +(defun spam-check-hashcash () + "Check the headers for hashcash payments." + (ignore-errors (mail-check-payment))) ;mail-check-payment returns a boolean - (file-error)) ;;}}} ;;{{{ BBDB @@ -2510,7 +2518,7 @@ REMOVE not nil, remove the ADDRESSES." (if db `("-d" ,db "-v") `("-v")))) (setq return (spam-check-bogofilter-headers score)))) return) - (gnus-error "`spam.el' doesnt support obsolete bogofilter versions"))) + (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions"))) (defun spam-bogofilter-register-with-bogofilter (articles spam @@ -2536,7 +2544,7 @@ REMOVE not nil, remove the ADDRESSES." spam-bogofilter-path nil nil nil switch (if db `("-d" ,db "-v") `("-v"))))))) - (gnus-error "`spam.el' doesnt support obsolete bogofilter versions"))) + (gnus-error 5 "`spam.el' doesn't support obsolete bogofilter versions"))) (defun spam-bogofilter-register-spam-routine (articles &optional unregister) (spam-bogofilter-register-with-bogofilter articles t unregister)) @@ -2621,7 +2629,7 @@ REMOVE not nil, remove the ADDRESSES." (if score ; scoring mode (let ((header (message-fetch-field spam-spamassassin-spam-status-header))) (when header - (if (string-match "hits=\\(-?[0-9.]+\\)" header) + (if (string-match spam-spamassassin-score-regexp header) (match-string 1 header) "0"))) ;; spam detection mode