;;; spam.el --- Identifying spam
-;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+
+;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: network
+;; Maintainer: Ted Zlatanov <tzz@lifelogs.com>
+;; Keywords: network, spam, mail, bogofilter, BBDB, dspam, dig, whitelist, blacklist, gmane, hashcash, spamassassin, bsfilter, ifile, stat, crm114, spamoracle
;; This file is part of GNU Emacs.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
(eval-when-compile (require 'cl))
(eval-when-compile (require 'spam-report))
+(eval-when-compile (require 'hashcash))
(require 'path-util)
(require 'gnus-sum)
;; autoload spam-report
(eval-and-compile
(autoload 'spam-report-gmane "spam-report")
+ (autoload 'spam-report-gmane-spam "spam-report")
+ (autoload 'spam-report-gmane-ham "spam-report")
(autoload 'spam-report-resend "spam-report"))
;; autoload gnus-registry
(defgroup spam nil
"Spam configuration."
- :version "21.4")
+ :version "22.1"
+ :group 'mail
+ :group 'news)
(defcustom spam-summary-exit-behavior 'default
"Exit behavior at the time of summary exit.
:type '(radio (const nil) regexp)
:group 'spam)
-(defcustom spam-face 'gnus-splash-face
+(defface spam
+ '((((class color) (type tty) (background dark))
+ (:foreground "gray80" :background "gray50"))
+ (((class color) (type tty) (background light))
+ (:foreground "gray50" :background "gray80"))
+ (((class color) (background dark))
+ (:foreground "ivory2"))
+ (((class color) (background light))
+ (:foreground "ivory4"))
+ (t :inverse-video t))
+ "Face for spam-marked articles."
+ :group 'spam)
+;; backward-compatibility alias
+(put 'spam-face 'face-alias 'spam)
+
+(defcustom spam-face 'spam
"Face for spam-marked articles."
:type 'face
:group 'spam)
nil)
(spam-install-nocheck-backend 'spam-use-gmane
- nil
+ 'spam-report-gmane-unregister-routine
'spam-report-gmane-register-routine
- ;; does Gmane support unregistration?
- nil
- nil)
+ 'spam-report-gmane-register-routine
+ 'spam-report-gmane-unregister-routine)
(spam-install-nocheck-backend 'spam-use-resend
'spam-report-resend-register-ham-routine
;;{{{ 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
(when spam-cache-lookups
(setq bbdb-cache (gethash 'spam-use-BBDB spam-caches))
(unless bbdb-cache
- (setq bbdb-cache
- ;; this is the expanded (bbdb-hashtable) macro
- ;; without the debugging support
- (with-current-buffer (bbdb-buffer)
- (save-excursion
- (save-window-excursion
- (bbdb-records nil t)
- bbdb-hashtable))))
+ (setq bbdb-cache (make-vector 17 0)) ; a good starting hash value
+ ;; this is based on the expanded (bbdb-hashtable) macro
+ ;; without the debugging support
+ (with-current-buffer (bbdb-buffer)
+ (save-excursion
+ (save-window-excursion
+ (bbdb-records nil t)
+ (mapatoms
+ (lambda (symbol)
+ (intern (downcase (symbol-name symbol)) bbdb-cache))
+ bbdb-hashtable))))
(puthash 'spam-use-BBDB bbdb-cache spam-caches)))
(when who
(setq who (nth 1 (gnus-extract-address-components who)))
(if
(if spam-cache-lookups
- (symbol-value
- (intern-soft who bbdb-cache))
+ (intern-soft (downcase who) bbdb-cache)
(bbdb-search-simple nil who))
t
(if spam-use-BBDB-exclusive
;;{{{ Spam-report glue (gmane and resend reporting)
(defun spam-report-gmane-register-routine (articles)
(when articles
- (apply 'spam-report-gmane articles)))
+ (apply 'spam-report-gmane-spam articles)))
+
+(defun spam-report-gmane-unregister-routine (articles)
+ (when articles
+ (apply 'spam-report-gmane-ham articles)))
(defun spam-report-resend-register-ham-routine (articles)
(spam-report-resend-register-routine articles t))
(add-to-list 'gnus-extra-headers header))
(setq spam-install-hooks t)
- ;; TODO: How do we redo this every time spam-face is customized?
- (push '((eq mark gnus-spam-mark) . spam-face)
+ ;; TODO: How do we redo this every time the `spam' face is customized?
+ (push '((eq mark gnus-spam-mark) . spam)
gnus-summary-highlight)
;; Add hooks for loading and saving the spam stats
(add-hook 'gnus-save-newsrc-hook 'spam-maybe-spam-stat-save)