\e$BD>@\$N_I2a$OM-1W$K$J$jF@$^$9!#\e(B
\e$B$b$&0l$D$NEE;R%a!<%k_I2a$X$N<h$jAH$_$OJ,;67?\e(B spam \e$B=hM}$G!"\e(BDCC (\e$BLuCm\e(B:
-Direct Client Connection) \e$B$,$=$N$h$&$J%7%9%F%`$rF3F~$7$F$$$^$9!#K\<AE*$K\e(B
-\e$B$O!"@$3&Cf$N\e(B @code{N} \e$B8D$N%7%9%F%`$,!"Cf9q!"%,!<%J$"$k$$$O%+%j%U%)%k%K%"\e(B
-\e$B$K$"$k%^%7%s\e(B @samp{X} \e$B$,\e(B spam \e$BEE;R%a!<%k$rAw=P$7$F$$$k$3$H$rG'$a$?$i!"$=\e(B
-\e$B$l$i\e(B @code{N} \e$B8D$N%7%9%F%`$O\e(B @samp{X} \e$B$^$?$O\e(B @samp{X} \e$B$+$i$d$C$FMh\e(B
-\e$B$?\e(B spam \e$B%a!<%k$r%G!<%?%Y!<%9$K5-F~$7$^$9!#\e(BSpam \e$B8!=P$N4p=`$OJQ$o$j$^$9!#\e(B
-\e$B$=$l$OAw$i$l$?%a%C%;!<%8$N?t$d%a%C%;!<%8$NFbMF$J$I$G$"$k$+$b$7$l$^$;$s!#\e(B
-\e$B%a%C%;!<%8$,\e(B spam \e$B$+$I$&$+$rJ,;6=hM}%7%9%F%`$N%f!<%6$,CN$j$?$$>l9g!"H`$O\e(B
-\e$B$=$l$i$N\e(B @code{N} \e$B8D$N%7%9%F%`$N$&$A$N0l$D$rD4$Y$^$9!#\e(B
+Distributed Checksum Clearinghouse --
+@uref{http://www.rhyolite.com/anti-spam/dcc/}) \e$B$,$=$N$h$&$J%7%9%F%`$rF3\e(B
+\e$BF~$7$F$$$^$9!#K\<AE*$K$O!"@$3&Cf$N\e(B @code{N} \e$B8D$N%7%9%F%`$,!"Cf9q!"%,!<%J\e(B
+\e$B$"$k$$$O%+%j%U%)%k%K%"$K$"$k%^%7%s\e(B @samp{X} \e$B$,\e(B spam \e$BEE;R%a!<%k$rAw=P$7$F\e(B
+\e$B$$$k$3$H$rG'$a$?$i!"$=$l$i\e(B @code{N} \e$B8D$N%7%9%F%`$O\e(B @samp{X} \e$B$^$?\e(B
+\e$B$O\e(B @samp{X} \e$B$+$i$d$C$FMh$?\e(B spam \e$B%a!<%k$r%G!<%?%Y!<%9$K5-F~$7$^$9!#\e(B
+Spam \e$B8!=P$N4p=`$OJQ$o$j$^$9!#$=$l$OAw$i$l$?%a%C%;!<%8$N?t$d%a%C%;!<%8$N\e(B
+\e$BFbMF$J$I$G$"$k$+$b$7$l$^$;$s!#%a%C%;!<%8$,\e(B spam \e$B$+$I$&$+$rJ,;6=hM}%7%9%F\e(B
+\e$B%`$N%f!<%6$,CN$j$?$$>l9g!"H`$O$=$l$i$N\e(B @code{N} \e$B8D$N%7%9%F%`$N$&$A$N0l$D\e(B
+\e$B$rD4$Y$^$9!#\e(B
\e$BJ,;67?\e(B spam \e$B=hM}$OF1;~$KB?$/$N%a%C%;!<%8$rAw$k\e(B spammers \e$B$HHs>o$K$h$/@o$C\e(B
\e$B$F$/$l$^$9$,!"$=$l$O%f!<%6!<$,$+$J$jJ#;($J%A%'%C%/$r@_Dj$9$k$3$H$r5a$a$^\e(B
\e$B$l\e(B @file{whitelist} \e$B$H\e(B @file{blacklist} \e$B$H$$$&L>A0$,IU$1$i$l$^$9!#\e(B
@node BBDB Whitelists
-@subsubsection BBDB Whitelists
+@subsubsection BBDB \e$B%[%o%$%H%j%9%H\e(B
@cindex spam filtering
@cindex BBDB whitelists, spam filtering
@cindex BBDB, spam filtering
@defvar spam-use-bbdb
-Analogous to @code{spam-use-whitelist} (@pxref{Blacklists and
-Whitelists}), but uses the BBDB as the source of whitelisted addresses,
-without regular expressions. You must have the BBDB loaded for
-@code{spam-use-bbdb} to work properly. Only addresses in the BBDB
-will be allowed through; all others will be classified as spam.
+@code{spam-use-whitelist} (@pxref{Blacklists and Whitelists}) \e$B$K;w$F$$$^\e(B
+\e$B$9$,!"%[%o%$%H%j%9%H$N%"%I%l%9$N8;$H$7$F!"@55,I=8=$G$O$J$$\e(B BBDB \e$B$r;H$$$^\e(B
+\e$B$9!#\e(B@code{spam-use-bbdb} \e$B$r$A$c$s$HF0:n$5$;$k$K$O\e(B BBDB \e$B$r\e(B load \e$B$7$J$1$l\e(B
+\e$B$P$J$j$^$;$s!#\e(BBBDB \e$B$K$"$k%"%I%l%9$@$1$,5v$5$l!"B>$O$9$Y$F\e(B spam \e$B$H$7$FJ,\e(B
+\e$BN`$5$l$^$9!#\e(B
@end defvar
@node Blackholes
-@subsubsection Blackholes
+@subsubsection \e$B%V%i%C%/%[!<%k\e(B
@cindex spam filtering
@cindex blackholes, spam filtering
@cindex spam.el
@defvar spam-use-blackholes
-You can let Gnus consult the blackhole-type distributed spam
-processing systems (DCC, for instance) when you set this option. The
-variable @code{spam-blackhole-servers} holds the list of blackhole servers
-Gnus will consult.
+\e$B$3$N%*%W%7%g%s$r%;%C%H$9$k$H!"\e(Bgnus \e$B$K%V%i%C%/%[!<%k7?$NJ,;6\e(B spam \e$B=hM}%7\e(B
+\e$B%9%F%`\e(B (\e$BNc$($P\e(B DCC) \e$B$rD4$Y$5$;$k$3$H$,$G$-$^$9!#JQ\e(B
+\e$B?t\e(B @code{spam-blackhole-servers} \e$B$O!"\e(Bgnus \e$B$,0U8+$r5a$a$k%V%i%C%/%[!<%k!&\e(B
+\e$B%5!<%P!<$N%j%9%H$r;}$A$^$9!#\e(B
-This variable is disabled by default. It is not recommended at this
-time because of bugs in the @code{dns.el} code.
+\e$B$3$NJQ?t$O%G%#%U%)%k%H$GL58z$K$J$C$F$$$^$9!#\e(B@code{dns.el} \e$B$N%3!<%I$K%P%0\e(B
+\e$B$,$"$k$N$G!"8=;~E@$G$O?d>)$5$l$^$;$s!#\e(B
@end defvar
@defvar spam-use-bogofilter
-Set this variable if you want to use Eric Raymond's speedy Bogofilter.
-This has been tested with a locally patched copy of version 0.4. Make
-sure to read the installation comments in @code{spam.el}.
+Eric Raymond \e$B$N?WB.$J\e(B Bogofilter \e$B$r;HMQ$7$?$$>l9g$O!"$3$NJQ?t$r%;%C%H$7\e(B
+\e$B$F$/$@$5$$!#$3$l$O!"%P!<%8%g%s\e(B 0.4 \e$B$N%m!<%+%k$K%Q%C%A$,Ev$?$C$?%3%T!<$G\e(B
+\e$B%F%9%H$5$l$^$7$?!#\e(B@code{spam.el} \e$B$K$"$k%$%s%9%H!<%k$K4X$9$k%3%a%s%H$rFI\e(B
+\e$B$s$G3N$+$a$F2<$5$$!#\e(B
-With a minimum of care for associating the @samp{H} mark for spam
-articles only, Bogofilter training all gets fairly automatic. You
-should do this until you get a few hundreds of articles in each
-category, spam or not. The shell command @command{head -1
-~/.bogofilter/*} shows both article counts. The command @kbd{S t} in
-summary mode, either for debugging or for curiosity, triggers
-Bogofilter into displaying in another buffer the @emph{spamicity}
-score of the current article (between 0.0 and 1.0), together with the
-article words which most significantly contribute to the score.
+Spam \e$B5-;v$@$1$N\e(B @samp{H} \e$B0u$r4XO"IU$1$k:G>.$N@$OC$K$h$C$F!"\e(BBogofilter \e$B%H\e(B
+\e$B%l!<%K%s%0$O$9$Y$F$+$J$j<+F0E*$K$J$j$^$9!#3F%+%F%4%j!<$N\e(B spam \e$B$+$=$&$G$J\e(B
+\e$B$$?tI4\e(B (a few hundreds) \e$B$N5-;v$rF~<j$9$k$^$G!"$3$l$r$d$i$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#%7%'%k%3%^%s%I\e(B @command{head -1 ~/.bogofilter/*} \e$B$ON>J}$N5-;v$N7W?t\e(B
+\e$B$rI=<($7$^$9!#35N,%b!<%I$K$*$1$k%G%P%C%0$N$?$a$N!"$"$k$$$O9%4q?4$N$?$a$N\e(B
+\e$B%3%^%s%I\e(B @kbd{S t} \e$B$O!"\e(BBogofilter \e$B$,8=:_$N5-;v$N\e(B @emph{spamicity} (\e$BLuCm\e(B:
+smap \e$BEY\e(B?) \e$B%9%3%"\e(B (0.0\e$B!A\e(B1.0) \e$B$r!"%9%3%"$K:G$bCx$7$/4sM?$9$k5-;v$N8l$H$$$C\e(B
+\e$B$7$g$K!"B>$N%P%C%U%!$KI=<($9$k$3$H$rB%$7$^$9!#\e(B
@end defvar
@node Ifile spam filtering
-@subsubsection Ifile spam filtering
+@subsubsection Ifile \e$B$K$h$k\e(B spam \e$B$N_I2a\e(B
@cindex spam filtering
@cindex ifile, spam filtering
@cindex spam.el
@defvar spam-use-ifile
-Enable this variable if you want to use Ifile, a statistical analyzer
-similar to Bogofilter. Currently you must have @code{ifile-gnus.el}
-loaded. The integration of Ifile with @code{spam.el} is not finished
-yet, but you can use @code{ifile-gnus.el} on its own if you like.
+Bogofilter \e$B$K;w$?E}7WJ,@O4o$G$"$k\e(B Ifile \e$B$r;H$$$?$$>l9g$O!"$3$NJQ?t$rM-8z\e(B
+\e$B$K$7$F2<$5$$!#:#$N$H$3$m\e(B @code{ifile-gnus.el} \e$B$r\e(B load \e$B$7$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#\e(BIfile \e$B$N\e(B @code{spam.el} \e$B$X$NE}9g$O$^$@:Q$s$G$$$^$;$s$,!"$=$l$r9%$`$J\e(B
+\e$B$i$P\e(B @code{ifile-gnus.el} \e$B$rC1FH$K;H$&$3$H$,$G$-$^$9!#\e(B
@end defvar
@node Extending spam.el
-@subsubsection Extending spam.el
+@subsubsection spam.el \e$B$N3HD%!#\e(B
@cindex spam filtering
@cindex spam.el, extending
@cindex extending spam.el
-Say you want to add a new backend called blackbox. Provide the following:
+\e$B?7$7$$%P%C%/%(%s%I\e(B blackbox \e$B$rDI2C$7$?$$$"$J$?$N$?$a$K!"0J2<$rDs6!$7$^$7$g\e(B
+\e$B$&\e(B:
@enumerate
@item documentation
@example
(defvar spam-use-blackbox nil
- "True if blackbox should be used.")
+ "Blackbox \e$B$r;H$&$H$-$O\e(B t \e$B$K$9$k!#\e(B")
@end example
-Add
+@code{spam-list-of-checks} \e$B$K\e(B
@example
(spam-use-blackbox . spam-check-blackbox)
@end example
-to @code{spam-list-of-checks}.
+\e$B$rDI2C!#\e(B
@item
-Write the @code{spam-check-blackbox} function. It should return
-@samp{nil} or @code{spam-split-group}. See the existing
-@code{spam-check-*} functions for examples of what you can do.
+@code{spam-check-blackbox} \e$B4X?t$r=q$$$F2<$5$$!#$=$l\e(B
+\e$B$O\e(B @samp{nil} \e$B$+\e(B @code{spam-split-group} \e$B$rJV$5$J$1$l$P$J$j$^$;$s!#$"$J\e(B
+\e$B$?$K$G$-$k$3$H$NNc$O!"4{B8$N\e(B @code{spam-check-*} \e$B4X?t$r;2>H$7$F$/$@$5$$!#\e(B
@end enumerate
@node Filtering Spam Using Statistics (spam-stat.el)
-@subsection Filtering Spam Using Statistics (spam-stat.el)
+@subsection Spam \e$B$N_I2a$KE}7W$r;H$&\e(B (spam-stat.el)
@cindex Paul Graham
@cindex Graham, Paul
@cindex naive Bayesian spam filtering
@cindex Bayesian spam filtering, naive
@cindex spam filtering, naive Bayesian
-Paul Graham has written an excellent essay about spam filterung using
-statisticts: @uref{http://www.paulgraham.com/spam.html,A Plan for
-Spam}. In it he describes the inherent deficiency of rule-based
-filtering as used by SpamAssassin, for example: Somebody has to write
-the rules, and everybody else has to install these rules. You are
-always late. It would be much better, he argues, to filter mail based
-on wether it somehow resembles spam or non-spam. One way to measure
-this is word distribution. He then goes on to describe a solution
-that checks wether a new mail resembles any of your other spam mails
-or not.
-
-The basic idea is this: Create a two collections of your mail, one
-with spam, one with non-spam. Count how often each word appears in
-either collection, weight this by the total number of mails in the
-collections, and store this information in a dictionary. For every
-word in a new mail, determine its probability to belong to a spam or a
-non-spam mail. Use the 15 most conspicuous words, compute the total
-probability of the mail being spam. If this probability is higher
-than a certain threshold, the mail is considered to be spam.
-
-Gnus supports this kind of filtering. But it needs some setting up.
-First, you need two collections of your mail, one with spam, one with
-non-spam. Then you need to create a dictionary using these two
-collections, and save it. And last but not least, you need to use
-this dictionary in your fancy mail splitting rules.
+Paul Graham \e$B$O!"E}7W$r;H$C$?\e(B spam \e$B$N_I2a$K4X$9$kM%$l$?%(%C%;%$$r=q$-$^$7\e(B
+\e$B$?\e(B: @uref{http://www.paulgraham.com/spam.html,A Plan for Spam}\e$B!#$=$3$GH`\e(B
+\e$B$O\e(B SpamAssassin \e$B$K$h$C$F;H$o$l$F$$$k$h$&$J%k!<%k%Y!<%9$N_I2a$K8GM-$J7g4Y\e(B
+\e$B$K$D$$$F=R$Y$F$$$^$9!#Nc$($P\e(B: \e$BC/$+$,%k!<%k$r=q$+$J$1$l$P$J$i$J$$$7!"B>$N\e(B
+\e$B$9$Y$F$N?M$O$3$l$i$N%k!<%k$r%$%s%9%H!<%k$7$J$1$l$P$J$j$^$;$s!#$"$J$?$O$$\e(B
+\e$B$D$bCY$l$^$9!#$=$l$,2?$d$i\e(B spam \e$B$^$?$OHs\e(B spam \e$B;w$F$$$k$+$I$&$+$K4p$E$$$F\e(B
+\e$B%a!<%k$r_I2a$9$k$[$&$,!"$O$k$+$KNI$$$@$m$&$HH`$O<gD%$7$^$9!#$3$l$rB,Dj$9\e(B
+\e$B$k0l$D$N<jCJ$OC18l$NJ,I[$G$9!#$=$N8eH`$O!"?7Ce%a!<%k$,$"$J$?$NB>\e(B
+\e$B$N\e(B spam \e$B%a!<%k$K;w$F$$$k$+$I$&$+$r%A%'%C%/$9$kJ}K!$N5-=R$K?J$_$^$9!#\e(B
+
+\e$B4pK\E*$J0F$O$3$l$G$9\e(B: \e$B$"$J$?$N%a!<%k$NFs$D$N%3%l%/%7%g%s$r:n$j$^$9!#0l$D\e(B
+\e$B$O\e(B spam\e$B!"$b$&0l$D$OHs\e(B spam \e$B$G!#N>J}$N%3%l%/%7%g%s$K$*$1$k3FC18l$N=P8=IQ\e(B
+\e$BEY$r?t$($F!"%3%l%/%7%g%s$N%a!<%k$NAm?t$G=E$_IU$1$r9T$J$$!"$3$N>pJs$r<-=q\e(B
+\e$B$K3JG<$7$^$9!#?7Ce%a!<%k$N$9$Y$F$NC18l$K$D$$$F!"\e(Bspam \e$B$+Hs\e(B spam \e$B%a!<%k$K\e(B
+\e$BB0$9$k3NN($r7hDj$7$^$9!#\e(B15\e$B$N:G$b82Cx$JC18l$r;H$C$F!"$=$N%a!<%k\e(B
+\e$B$,\e(B spam \e$B$G$"$k$3$H$N3NN($NAm7W$r7W;;$7$^$9!#$3$N3NN($,$"$kogCM$h$j9b$+$C\e(B
+\e$B$?$i!"$=$N%a!<%k$O\e(B spam \e$B$G$"$k$H9M$($i$l$^$9!#\e(B
+
+gnus \e$B$O$3$N<o$N_I2a$r%5%]!<%H$7$^$9!#$7$+$7$=$l$K$O$$$/$D$+$N@_Dj$,I,MW\e(B
+\e$B$G$9!#Bh0l$K!"$"$J$?$N%a!<%k$NFs$D$N%3%l%/%7%g%s$,MW$j$^$9!#0l$D$O\e(B spam\e$B!"\e(B
+\e$B$b$&0l$D$OHs\e(B spam \e$B$G!#$=$7$F!"$=$l$i$NFs$D$N%3%l%/%7%g%s$r;H$C$F<-=q$r:n\e(B
+\e$B$j!"$=$l$r%;!<%V$7$F2<$5$$!#$=$7$FFC$K:G8e$K!"$"$J$?$NFC5iJ,3d$N5,B'$G$3\e(B
+\e$B$N<-=q$r;H$C$F2<$5$$!#\e(B
@menu
* Creating a spam-stat dictionary::