+2004-04-02 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * spam.el (spam-set-difference): new function to replace
+ gnus-set-difference in spam.el
+ (spam-summary-prepare-exit): use spam-set-difference
+
2004-03-29 Teodor Zlatanov <tzz@lifelogs.com>
* gnus-registry.el (gnus-registry-cache-file): updated to use
(new-articles (spam-list-articles
gnus-newsgroup-articles
classification))
- (changed-articles (gnus-set-difference new-articles old-articles)))
+ (changed-articles (spam-set-difference new-articles old-articles)))
;; now that we have the changed articles, we go through the processors
(dolist (processor-param spam-list-of-processors)
(let ((processor (nth 0 processor-param))
(setq spam-old-ham-articles nil)
(setq spam-old-spam-articles nil))
+(defun spam-set-difference (list1 list2)
+ "Return a set difference of LIST1 and LIST2.
+When either list is nil, the other is returned."
+ (if (and list1 list2)
+ ;; we have two non-nil lists
+ (progn
+ (dolist (item (append list1 list2))
+ (when (and (memq item list1) (memq item list2))
+ (setq list1 (delq item list1))
+ (setq list2 (delq item list2))))
+ (append list1 list2))
+ ;; if either of the lists was nil, return the other one
+ (if list1 list1 list2)))
+
(defun spam-mark-junk-as-spam-routine ()
;; check the global list of group names spam-junk-mailgroups and the
;; group parameters
+2004-04-02 Teodor Zlatanov <tzz@lifelogs.com>
+ From Hubert Chan <hubert@uhoreg.ca>
+
+ * gnus.texi (SpamAssassin backend): added new node about SpamAssassin
+
2004-03-29 Teodor Zlatanov <tzz@lifelogs.com>
* gnus.texi (Spam ELisp Package Sequence of Events): some clarifications
* Blackholes::
* Regular Expressions Header Matching::
* Bogofilter::
+* SpamAssassin backend::
* ifile spam filtering::
* spam-stat spam filtering::
* SpamOracle::
* Blackholes::
* Regular Expressions Header Matching::
* Bogofilter::
+* SpamAssassin backend::
* ifile spam filtering::
* spam-stat spam filtering::
* SpamOracle::
\e$B$S\e(B @code{spam-use-bogofilter-headers} \e$BJQ?t$,Ds6!$5$l$^$9!#$3$N5!G=$r8!::\e(B
\e$B$9$k$?$a$K\e(B Bogofilter \e$B$N%P!<%8%g%s\e(B 0.9.2.1 \e$B$,;H$o$l$^$7$?!#\e(B
+@node SpamAssassin backend
+@subsubsection SpamAssassin backend
+@cindex spam filtering
+@cindex spamassassin, spam filtering
+@cindex spam
+
+@defvar spam-use-spamassassin
+
+@code{spam-split} \e$B$K\e(B SpamAssassin \e$B$r;H$$$?$$>l9g$O!"$3$NJQ?t$r%;%C%H$7$F\e(B
+\e$B2<$5$$!#\e(B
+
+SpamAssassin \e$B$O!"%Y%$%8%"%s%U%#%k%?$rFbJq$9$k5,B'$HJ,@O$N%;%C%H$K4p$E$$\e(B
+\e$B$F!"$=$l$>$l$N5-;v$N%9%3%"$r:[Dj$7$^$9!#%Y%$%8%"%s%U%#%k%?$O!"\e(Bspam \e$B5-;v\e(B
+\e$B$N\e(B @samp{$} \e$B0u$r4XO"$5$;$k$3$H$K$h$j71N}$9$k$3$H$,$G$-$^$9!#\e(BSpam \e$B$N%9%3\e(B
+\e$B%"$O!"35N,%b!<%I$G\e(B @kbd{S t} \e$B%3%^%s%I$r;H$&$3$H$K$h$C$F8+$k$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
+
+\e$B$3$NJQ?t$r%;%C%H$9$k$H!"$=$l$>$l$N5-;v$O\e(B @code{spam-split} \e$B$,8F$P$l$k$H\e(B
+\e$B$-$K\e(B SpamAssassin \e$B$K$h$C$F=hM}$5$l$^$9!#%a!<%k$,\e(B SpamAssassin \e$B$G=hM}$5$l\e(B
+\e$B$k$h$&$K$J$C$F$$$k>l9g$K!"C1$K\e(B SpamAssassin \e$B%X%C%@!<$r;H$$$?$$$N$J$i$P!"\e(B
+\e$BBe$o$j$K\e(B @code{spam-use-spamassassin-headers} \e$B$r%;%C%H$7$F2<$5$$!#\e(B
+
+@code{spam-use-spamassassin-headers} \e$B$r;H$&>l9g!"$3$l$rM-8z$K$7$F$O$$$1\e(B
+\e$B$^$;$s!#\e(B
+
+@end defvar
+
+@defvar spam-use-spamassassin-headers
+
+\e$B%a!<%k$,\e(B SpamAssassin \e$B$G=hM}$5$l$k$h$&$K$J$C$F$$$k>l9g$K!"\e(B
+SpamAssassin \e$B%X%C%@!<$K4p$E$$$F\e(B @code{spam-split} \e$B$KJ,3d$r9T$J$o$;$?$$$N\e(B
+\e$B$J$i$P!"$3$NJQ?t$r%;%C%H$7$F2<$5$$!#\e(B
+
+@code{spam-use-spamassassin} \e$B$r;H$&>l9g!"$3$l$rM-8z$K$7$F$O$$$1$^$;$s!#\e(B
+
+@end defvar
+
+@defvar spam-spamassassin-path
+
+\e$B$3$NJQ?t$O\e(B SpamAssassin \e$B$N<B9T7A<0$r;X$7$^$9!#\e(B@code{spamd} \e$B$r2TF/$7$F$$\e(B
+\e$B$k$J$i$P!"$h$jB.$$=hM}$N$?$a$K!"$3$NJQ?t$K\e(B @code{spamc} \e$B$N<B9T7A<0$r@_Dj\e(B
+\e$B$9$k$3$H$,$G$-$^$9!#\e(B@code{spamd}/@code{spamc} \e$B$N99$J$k>pJs$O!"\e(B
+SpamAssassin \e$B$N%I%-%e%a%s%H$r8+$F2<$5$$!#\e(B
+
+@end defvar
+
+SpamAssassin \e$B$O!"\e(Bspam \e$B$rF1Dj$9$k$?$a$K9-HO$JJ,@O$r9T$J$&!"6/NO$GM;DL@-$N\e(B
+\e$B$"$k\e(B spam \e$B_I2a4o$G$9!#\e(BSpamAssassin \e$B$,Ds6!$9$k\e(B ham \e$B$H\e(B spam \e$B$N%W%m%;%C%5!<\e(B
+\e$B$r;H$&$+!"$"$k$$$O4{$K$=$l$i$,5-;v$KE,MQ:Q$_$+$I$&$+$r!"\e(B
+@code{spam-use-spamassassin} \e$B$H\e(B @code{spam-use-spamassassin-headers} \e$BJQ\e(B
+\e$B?t$G\e(B @code{spam-split} \e$B$K;X<($7$^$9!#$3$N5!G=$r8!::$9$k$?$a\e(B
+\e$B$K\e(B SpamAssassin \e$B$N%P!<%8%g%s\e(B 2.63 \e$B$,;H$o$l$^$7$?!#\e(B
+
@node ifile spam filtering
@subsubsection ifile \e$B$K$h$k\e(B spam \e$B$N_I2a\e(B
@cindex spam filtering
* Blackholes::
* Regular Expressions Header Matching::
* Bogofilter::
+* SpamAssassin backend::
* ifile spam filtering::
* spam-stat spam filtering::
* SpamOracle::
used, or has already been used on the article. The 0.9.2.1 version of
Bogofilter was used to test this functionality.
+@node SpamAssassin backend
+@subsubsection SpamAssassin backend
+@cindex spam filtering
+@cindex spamassassin, spam filtering
+@cindex spam
+
+@defvar spam-use-spamassassin
+
+Set this variable if you want @code{spam-split} to use SpamAssassin.
+
+SpamAssassin assigns a score to each article based on a set of rules
+and tests, including a Bayesian filter. The Bayesian filter can be
+trained by associating the @samp{$} mark for spam articles. The
+spam score can be viewed by using the command @kbd{S t} in summary
+mode.
+
+If you set this variable, each article will be processed by
+SpamAssassin when @code{spam-split} is called. If your mail is
+preprocessed by SpamAssassin, and you want to just use the
+SpamAssassin headers, set @code{spam-use-spamassassin-headers}
+instead.
+
+You should not enable this is you use
+@code{spam-use-spamassassin-headers}.
+
+@end defvar
+
+@defvar spam-use-spamassassin-headers
+
+Set this variable if your mail is preprocessed by SpamAssassin and
+want @code{spam-split} to split based on the SpamAssassin headers.
+
+You should not enable this is you use @code{spam-use-spamassassin}.
+
+@end defvar
+
+@defvar spam-spamassassin-path
+
+This variable points to the SpamAssassin executable. If you have
+@code{spamd} running, you can set this variable to the @code{spamc}
+executable for faster processing. See the SpamAssassin documentation
+for more information on @code{spamd}/@code{spamc}.
+
+@end defvar
+
+SpamAssassin is a powerful and flexible spam filter that uses a wide
+variety of tests to identify spam. A ham and a spam processors are
+provided, plus the @code{spam-use-spamassassin} and
+@code{spam-use-spamassassin-headers} variables to indicate to
+spam-split that SpamAssassin should be either used, or has already
+been used on the article. The 2.63 version of SpamAssassin was used
+to test this functionality.
+
@node ifile spam filtering
@subsubsection ifile spam filtering
@cindex spam filtering