+2004-01-17 Jesper Harder <harder@ifa.au.dk>
+
+ * sieve.texi (Manage Sieve API): nil -> @code{nil}.
+
+ * pgg.texi (User Commands, Backend methods): do.
+
+ * gnus.texi (Debugging IMAP): Fix.
+ (Thwarting Email Spam): Avoid overfull hboxes in printed
+ version. Markup fixes.
+
2004-01-12 Teodor Zlatanov <tzz@lifelogs.com>
* gnus.texi (The problem of spam): fixed so many countries and
\e$B$^$l$?$3$H$,L5$$!"$^$?$OL$FI$N5-;v$,$"$k%0%k!<%W$KF~$k$3$H$O!"?7Ce%a!<%k\e(B
\e$B$N8!::$NBe$o$j$K$J$j$^$9!#$^$@FI$^$l$?$3$H$,L5$$5-;v!"$^$?$O$9$Y$F$NL$FI\e(B
\e$B$N5-;v$,=hM}$5$l$k$+$I$&$+$O!"\e(B@code{spam-autodetect-recheck-messages} \e$B$K\e(B
-\e$B$h$C$F7h$^$j$^$9!#\e(Bt \e$B$K@_Dj$5$l$k$H!"L$FI$N%a%C%;!<%8$,:F8!::$5$l$^$9!#\e(B
+\e$B$h$C$F7h$^$j$^$9!#\e(B@code{t} \e$B$K@_Dj$5$l$k$H!"L$FI$N%a%C%;!<%8$,:F8!::$5$l\e(B
+\e$B$^$9!#\e(B
@code{spam-autodetect} \e$B$O!"B?>/$J$j$H$b\e(B spam \e$B_I2a$N4IM}$r%f!<%6$K5v2D$7\e(B
\e$B$^$9!#%f!<%6$O3F%0%k!<%W$N\e(B spam \e$B8!=P$N<jCJ$r$h$jB?$/4IM}$9$k$3$H$,$G$-$k\e(B
\e$B$$$H;W$&$3$H$G$9!#\e(B@code{spam-process-destination} \e$B$,\e(B @code{nil} \e$B$@$C$?>l\e(B
\e$B9g!"\e(Bspam \e$B$K$O4|8B@Z$l>C5n$N0u$,IU$1$i$l$^$9!#IaDL$=$l$O@5$7$$9T$J$$$G$9!#\e(B
-Spam \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B NNTP \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N\e(B
-\e$B$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
+Spam \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B @acronym{NNTP} \e$B$N$h$&$JFI$_9~$_@lMQ%P%C\e(B
+\e$B%/%(%s%I$G$"$k$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
Ham \e$B%0%k!<%W$G\e(B @code{ham-marks} \e$B%Q%i%a!<%?$G7hDj$5$l$k\e(B ham \e$B%a!<%k$,8+$D\e(B
\e$B$+$C$?$i!"%0%k!<%W$rH4$1$k$H$-$K3h$-$F$$$k\e(B ham @code{spam-processor} \e$B$G\e(B
\e$B$&$7$?$$$H;W$&$3$H$G$9!#$3$l$K4X$9$k>\:Y$O\e(B @xref{Spam ELisp Package
Configuration Examples}.
-Ham \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B NNTP \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N$?\e(B
-\e$B$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
+Ham \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B @acronym{NNTP} \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/\e(B
+\e$B%(%s%I$G$"$k$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
\e$B$3$l$i$N$9$Y$F$,$o$1$,$o$+$i$J$/$F$b!"?4G[$OMW$j$^$;$s\e(B (\e$BLuCm\e(B: \e$B$G$bLuJ8$,\e(B
\e$B@53N$G$O$J$$$+$b$7$l$J$$$N$G!"JQ$@$H;W$C$?$i86J8$r8+$F$M\e(B :-p)\e$B!#$9$0$K$=\e(B
\e$B$F42MF$+$I$&$+$K0MB8$9$k$G$7$g$&!#\e(B
\e$B$^$?!"\e(B@code{spam-split} \e$B$K%Q%i%a!<%?!"Nc$(\e(B
-\e$B$P\e(B @samp{spam-use-regex-headers} \e$B$^$?$O\e(B @samp{"maybe-spam"} \e$B$rM?$($k$3$H\e(B
+\e$B$P\e(B @code{spam-use-regex-headers} \e$B$^$?$O\e(B @code{"maybe-spam"} \e$B$rM?$($k$3$H\e(B
\e$B$b$G$-$^$9!#$J$<$3$l$,M-MQ$J$N$G$7$g$&$+\e(B?
\e$B$3$l$i$N\e(B (@code{spam-use-regex-headers} \e$B$H\e(B @code{spam-use-blackholes} \e$B$N\e(B
nnimap-split-fancy '(|
(any "ding" "ding")
(: spam-split)
- ;; default mailbox
+ ;; @r{\e$B%G%#%U%)%k%H$N%a!<%k%\%C%/%9!#\e(B}
"mail")
@end example
@example
nnimap-split-fancy '(|
-;;; spam-use-regex-headers \e$B$G8!=P$5$l$?$9$Y$F$N\e(B spam \e$B$O\e(B "regex-spam" \e$B$X!#\e(B
+;;; @r{@code{spam-use-regex-headers} \e$B$G8!=P$5$l$?$9$Y$F$N\e(B spam \e$B$O\e(B @samp{regex-spam} \e$B$X!#\e(B}
(: spam-split "regex-spam" 'spam-use-regex-headers)
(any "ding" "ding")
-;;; spam-split \e$B$G8!=P$5$l$?B>$N$9$Y$F$N\e(B spam \e$B$O\e(B spam-split-group \e$B$X!#\e(B
+;;; @r{spam-split \e$B$G8!=P$5$l$?B>$N$9$Y$F$N\e(B spam \e$B$O\e(B @code{spam-split-group} \e$B$X!#\e(B}
(: spam-split)
- ;; default mailbox
+ ;; @r{\e$B%G%#%U%)%k%H$N%a!<%k%\%C%/%9!#\e(B}
"mail")
@end example
\e$B$F=hM}$7$^$9!#\e(B
Spam \e$B$^$?$O\e(B ham \e$B%W%m%;%C%5!<$r;XDj$9$k7A<0$r!"$+$D$F$O%7%s%\%k$GI=$7$F$$\e(B
-\e$B$?$N$G$9$,!"8=:_$O\e(B cons \e$B%;%k$K$J$C$F$$$^$9!#>\$7$/$O8D!9$N\e(B spam \e$B%W%m%;%C\e(B
-\e$B%5!<$N9`$r;2>H$7$F2<$5$$!#\e(B
+\e$B$?$N$G$9$,!"8=:_$O\e(B @sc{cons} \e$B%;%k$K$J$C$F$$$^$9!#>\$7$/$O8D!9$N\e(B spam \e$B%W\e(B
+\e$B%m%;%C%5!<$N9`$r;2>H$7$F2<$5$$!#\e(B
@vindex gnus-spam-newsgroup-contents
gnus \e$B$O$"$J$?$,<u$1<h$C$?\e(B spam \e$B$+$i3X$S$^$9!#$"$J$?$O0l$D0J>e$N\e(B spam \e$B%0\e(B
@code{ham-process-destination} \e$B%0%k!<%W%Q%i%a!<%?\e(B
\e$B$+\e(B @code{gnus-ham-process-destinations} \e$BJQ?t$N$I$A$i$+$K9gCW$9$k>l=j$K0\\e(B
\e$B$5$l$^$9!#$=$l$i$O%0%k!<%WL>$K9gCW$9$k@55,I=8=$N%j%9%H$G\e(B
-\e$B$9\e(B (@code{customize-variable gnus-ham-process-destinations} \e$B$K$h$C$F$3$N\e(B
-\e$BJQ?t$r%+%9%?%^%$%:$9$k$N$,:G$b4JC1$G$9\e(B)\e$B!#JQ?t$r<j$G%+%9%?%^%$%:$9$kJ}$,\e(B
-\e$B9%$-$J?M$N$?$a$K8@$C$F$*$/$H!"$=$l$i$OIaDL$N\e(B Lisp \e$B$N\e(B list \e$B$G!"$=$l$>$l$N\e(B
-\e$B%K%e!<%9%0%k!<%W$N;EMM@_Dj$O\e(B @code{(REGEXP PROCESSOR)} \e$B$N7A<0$NCM$r;}$A\e(B
-\e$B$^$9!#:G=*E*$J>l=j$O\e(B (\e$BC1?t$^$?$OJ#?t$N\e(B) \e$B%0%k!<%WL>$G$9!#\e(B
+\e$B$9\e(B (@kbd{M-x customize-variable @key{RET}
+gnus-ham-process-destinations} \e$B$K$h$C$F$3$NJQ?t$r%+%9%?%^%$%:$9$k$N$,:G\e(B
+\e$B$b4JC1$G$9\e(B)\e$B!#JQ?t$r<j$G%+%9%?%^%$%:$9$kJ}$,9%$-$J?M$N$?$a$K8@$C$F$*$/$H!"\e(B
+\e$B$=$l$i$OIaDL$N\e(B Lisp \e$B$N\e(B list \e$B$G!"$=$l$>$l$N%K%e!<%9%0%k!<%W$N;EMM@_Dj\e(B
+\e$B$O\e(B @code{(@var{regexp} @var{processor})} \e$B$N7A<0$NCM$r;}$A$^$9!#:G=*E*$J\e(B
+\e$B>l=j$O\e(B (\e$BC1?t$^$?$OJ#?t$N\e(B) \e$B%0%k!<%WL>$G$9!#\e(B
@code{ham-process-destination} \e$B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bham \e$B5-;v\e(B
\e$B$O$=$3$KN1$aCV$+$l$^$9!#\e(B
@code{spam-mark-ham-unread-before-move-from-spam-group} \e$B%Q%i%a!<%?$,@_Dj\e(B
\e$B$5$l$F$$$k$H!"\e(Bham \e$B5-;v$O0\F0$5$;$i$l$kA0$KL$FI$N0u$,IU$1$i$l$^$9!#\e(B
-Ham \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B NNTP \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N$?\e(B
-\e$B$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
+Ham \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B @acronym{NNTP} \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/\e(B
+\e$B%(%s%I$G$"$k$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
\e$B%0%k!<%W$^$?$O@55,I=8=$4$H$KJ#?t$N0\F0@h$r;XDj$G$-$k$3$H$KCmL\$7$F2<$5$$\e(B!
\e$B$3$l$K$h$C$F\e(B ham \e$B5-;v$r@55,$N%a!<%k%0%k!<%W$H\e(B @emph{ham \e$B%H%l!<%K%s%0\e(B} \e$B%0\e(B
\e$B$N\e(B @strong{spam} \e$B5-;v$O!"\e(B@code{spam-process-destination} \e$B%0%k!<%W%Q%i%a!<\e(B
\e$B%?$+\e(B @code{gnus-spam-process-destinations} \e$BJQ?t$N$I$A$i$+$K9gCW$9$k>l=j\e(B
\e$B$K0\$5$l$^$9!#$=$l$i$O%0%k!<%WL>$K9gCW$9$k@55,I=8=$N%j%9%H$G\e(B
-\e$B$9\e(B (@code{customize-variable gnus-spam-process-destinations} \e$B$K$h$C$F$3\e(B
-\e$B$NJQ?t$r%+%9%?%^%$%:$9$k$N$,:G$b4JC1$G$9\e(B)\e$B!#JQ?t$r<j$G%+%9%?%^%$%:$9$kJ}\e(B
-\e$B$,9%$-$J?M$N$?$a$K8@$C$F$*$/$H!"$=$l$i$OIaDL$N\e(B Lisp \e$B$N\e(B list \e$B$G!"$=$l$>$l\e(B
-\e$B$N%K%e!<%9%0%k!<%W$N;EMM@_Dj$O\e(B @code{(REGEXP GROUP)} \e$B$N7A<0$NCM$r;}$A$^\e(B
-\e$B$9!#:G=*E*$J>l=j$O\e(B (\e$BC1?t$^$?$OJ#?t$N\e(B) \e$B%0%k!<%WL>$G$9!#\e(B
-@code{spam-process-destination} \e$B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bspam \e$B5-\e(B
-\e$B;v$OC1$K4|8B@Z$l>C5n$5$l$^$9!#%0%k!<%WL>$O40A47A$G$"$k$3$H!"$9$J$o$A%0%k!<\e(B
-\e$B%W%P%C%U%!$G%0%k!<%WL>$NA0$K\e(B @samp{nntp:servername} \e$B$N$h$&$J$b$N$,8+$($k\e(B
-\e$B>l9g$O!"$3$3$G$b$=$l$r;H$&I,MW$,$"$j$^$9!#\e(B
-
-Spam \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B NNTP \e$B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N\e(B
-\e$B$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
+\e$B$9\e(B (@kbd{M-x customize-variable @key{RET}
+gnus-spam-process-destinations} \e$B$K$h$C$F$3$NJQ?t$r%+%9%?%^%$%:$9$k$N$,:G\e(B
+\e$B$b4JC1$G$9\e(B)\e$B!#JQ?t$r<j$G%+%9%?%^%$%:$9$kJ}$,9%$-$J?M$N$?$a$K8@$C$F$*$/$H!"\e(B
+\e$B$=$l$i$OIaDL$N\e(B Lisp \e$B$N\e(B list \e$B$G!"$=$l$>$l$N%K%e!<%9%0%k!<%W$N;EMM@_Dj\e(B
+\e$B$O\e(B @code{(@var{regexp} @var{group})} \e$B$N7A<0$NCM$r;}$A$^$9!#:G=*E*$J>l=j\e(B
+\e$B$O\e(B (\e$BC1?t$^$?$OJ#?t$N\e(B) \e$B%0%k!<%WL>$G$9!#\e(B@code{spam-process-destination} \e$B%Q\e(B
+\e$B%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bspam \e$B5-;v$OC1$K4|8B@Z$l>C5n$5$l$^$9!#%0%k!<\e(B
+\e$B%WL>$O40A47A$G$"$k$3$H!"$9$J$o$A%0%k!<%W%P%C%U%!$G%0%k!<%WL>$NA0\e(B
+\e$B$K\e(B @samp{nntp:servername} \e$B$N$h$&$J$b$N$,8+$($k>l9g$O!"$3$3$G$b$=$l$r;H$&\e(B
+\e$BI,MW$,$"$j$^$9!#\e(B
+
+Spam \e$B$,0\F0$G$-$J$$>l9g\e(B (\e$BNc$($P\e(B @acronym{NNTP} \e$B$N$h$&$JFI$_9~$_@lMQ%P%C\e(B
+\e$B%/%(%s%I$G$"$k$?$a$K\e(B)\e$B!"$=$l$O%3%T!<$5$l$^$9!#\e(B
\e$B%0%k!<%W$^$?$O@55,I=8=$4$H$KJ#?t$N0\F0@h$r;XDj$G$-$k$3$H$KCmL\$7$F2<$5$$\e(B!
\e$B$3$l$K$h$C$F\e(B spam \e$B5-;v$r@55,$N%a!<%k%0%k!<%W\e(B
Ham \e$B$,\e(B spam \e$B%0%k!<%W$+$i0\F0$5$l$kA0$K0u$r>C$7$?$$>l9g$O!"$3$NJQ?t$r%;%C\e(B
\e$B%H$7$F2<$5$$!#$3$l$O\e(B ham \e$B$K0u$rIU$1$k$?$a$K2D;k\e(B (tick) \e$B0u$N$h$&$J$b$N$r\e(B
\e$B;H$&>l9g$K!"$H$F$bLr$KN)$A$^$9!#5-;v$O$"$?$+$b$=$l$,%a!<%k%5!<%P$r=P$?$P\e(B
-\e$B$+$j$N$h$&$K!"L50u$G\e(B ham \e$B=hM}>l$KCV$+$l$k$G$7$g$&!#\e(B
+\e$B$+$j$N$h$&$K!"L50u$G\e(B @code{ham-process-destination} \e$B$KCV$+$l$k$G$7$g$&!#\e(B
@vindex spam-autodetect-recheck-messages
\e$B$3$NJQ?t$O\e(B @code{spam.el} \e$B$,\e(B spam \e$B$N<+F08!=P$r9T$J$&>l9g$K!"$^$@FI$^$l$?\e(B
From Ted Zlatanov <tzz@@lifelogs.com>.
@example
-;; gnus-registry-split-fancy-with-parent \e$B$H\e(B spam \e$B$N<+F08!=P$N$?$a!#\e(B
-;; \e$B>\:Y$O\e(B gnus-registry.el \e$B$r;2>H!#\e(B
+;; @r{@code{gnus-registry-split-fancy-with-parent} \e$B$H\e(B spam \e$B$N<+F08!=P$N$?$a!#\e(B}
+;; @r{\e$B>\:Y$O\e(B @file{gnus-registry.el} \e$B$r;2>H!#\e(B}
(gnus-registry-initialize)
(spam-initialize)
-;; \e$B;d$O\e(B spam \e$B0u$rIU$1$k$N$K\e(B control-S \e$B$r9%$`!#\e(B
+;; @r{\e$B;d$O\e(B spam \e$B0u$rIU$1$k$N$K\e(B @kbd{C-s} \e$B$r9%$`!#\e(B}
(define-key gnus-summary-mode-map "\C-s" 'gnus-summary-mark-as-spam)
(setq
- spam-log-to-registry t ;; Spam \e$B$N<+F08!=P$N$?$a!#\e(B
+ spam-log-to-registry t ;; @r{Spam \e$B$N<+F08!=P$N$?$a!#\e(B}
spam-use-BBDB t
- spam-use-regex-headers t ;; X-Spam-Flag (SpamAssassin) \e$B$r$D$+$^$($k!#\e(B
- ;; \e$BL>A0$K\e(B "spam" \e$B$r4^$`$9$Y$F$N%0%k!<%W$K$O\e(B spam \e$B5-;v$,$"$k!#\e(B
+ spam-use-regex-headers t ;; @r{X-Spam-Flag (SpamAssassin) \e$B$r$D$+$^$($k!#\e(B}
+ ;; @r{\e$BL>A0$K\e(B @samp{spam} \e$B$r4^$`$9$Y$F$N%0%k!<%W$K$O\e(B spam \e$B5-;v$,$"$k!#\e(B}
gnus-spam-newsgroup-contents '(("spam" gnus-group-spam-classification-spam))
- ;; \e$B$3$l$i$N\e(B docstring \e$B$r;2>H!#\e(B
+ ;; @r{\e$B$3$l$i$N\e(B docstring \e$B$r;2>H!#\e(B}
spam-move-spam-nonspam-groups-only nil
spam-mark-only-unseen-as-spam t
spam-mark-ham-unread-before-move-from-spam-group t
nnimap-split-rule 'nnimap-split-fancy
- ;; \e$B$"$J$?$N@_Dj$KDI2C$9$kA0$K!"$3$l$,2?$r$9$k$+M}2r$;$h\e(B!
+ ;; @{\e$B$"$J$?$N@_Dj$KDI2C$9$kA0$K!"$3$l$,2?$r$9$k$+M}2r$;$h\e(B!}
nnimap-split-fancy '(|
- ;; References \e$B$r?F$^$GC)$C$F$=$l$i$N%0%k!<%W$rF~$l$k!#\e(B
+ ;; @r{References \e$B$r?F$^$GC)$C$F$=$l$i$N%0%k!<%W$rF~$l$k!#\e(B}
(: gnus-registry-split-fancy-with-parent)
- ;; \e$B$3$l$O%5!<%P!<B&$N\e(B SpamAssassin \e$B%?%0$r$D$+$^$($k!#\e(B
+ ;; @r{\e$B$3$l$O%5!<%P!<B&$N\e(B SpamAssassin \e$B%?%0$r$D$+$^$($k!#\e(B}
(: spam-split 'spam-use-regex-headers)
(any "ding" "ding")
- ;; Spam \e$B5-;v$O%G%#%U%)%k%H$G\e(B "spam" \e$B$K9T$/$3$H$KCm0U!#\e(B
+ ;; @r{Spam \e$B5-;v$O%G%#%U%)%k%H$G\e(B @samp{spam} \e$B$K9T$/$3$H$KCm0U!#\e(B}
(: spam-split)
- ;; \e$B%G%#%U%)%k%H$N%a!<%k%\%C%/%9!#\e(B
- ;; default mailbox
+ ;; @r{\e$B%G%#%U%)%k%H$N%a!<%k%\%C%/%9!#\e(B}
"mail"))
-;; `G p' \e$B$G@_Dj$7$?;d$N%Q%i%a!<%?!#\e(B
+;; @r{@kbd{G p} \e$B$G@_Dj$7$?;d$N%Q%i%a!<%?!#\e(B}
-;; \e$B$9$Y$F$N\e(B nnml \e$B%0%k!<%W$H!"\e(B"nnimap+mail.lifelogs.com:train"
-;; \e$B$H\e(B "nnimap+mail.lifelogs.com:spam" \e$B$r=|$$$?$9$Y$F$N\e(B nnimap
-;; \e$B%0%k!<%W$G$O!"$I$N\e(B spam \e$B$b\e(B nnimap \e$B%H%l!<%K%s%0$K9T$/!#\e(B
-;; \e$B$=$l$O<jF0$G8!=P$7$J$1$l$P$J$i$J$$$+$i!#\e(B
+;; @r{\e$B$9$Y$F$N\e(B nnml \e$B%0%k!<%W$H!"\e(B@samp{nnimap+mail.lifelogs.com:train}}
+;; @r{\e$B$H\e(B @samp{nnimap+mail.lifelogs.com:spam} \e$B$r=|$$$?$9$Y$F$N\e(B nnimap}
+;; @r{\e$B%0%k!<%W$G$O!"$I$N\e(B spam \e$B$b\e(B nnimap \e$B%H%l!<%K%s%0$K9T$/!#\e(B}
+;; @r{\e$B$=$l$O<jF0$G8!=P$7$J$1$l$P$J$i$J$$$+$i!#\e(B}
((spam-process-destination . "nnimap+mail.lifelogs.com:train"))
-;; \e$B$9$Y$F$N\e(B NNTP \e$B%0%k!<%W!#\e(B
-;; Spam \e$B$r\e(B blacklist \e$B$G!"\e(Bham \e$B$r\e(B BBDB \e$B$G<+F08!=P!#\e(B
+;; @r{\e$B$9$Y$F$N\e(B @acronym{NNTP} \e$B%0%k!<%W!#\e(B}
+;; @r{Spam \e$B$r\e(B blacklist \e$B$G!"\e(Bham \e$B$r\e(B BBDB \e$B$G<+F08!=P!#\e(B}
((spam-autodetect-methods spam-use-blacklist spam-use-BBDB)
-;; \e$B$9$Y$F$N\e(B spam \e$B$r%H%l!<%K%s%0%0%k!<%W$KAw$k!#\e(B
+;; @r{\e$B$9$Y$F$N\e(B spam \e$B$r%H%l!<%K%s%0%0%k!<%W$KAw$k!#\e(B}
(spam-process-destination . "nnimap+mail.lifelogs.com:train"))
-;; \e$B;d$,\e(B spam \e$B$r<+F08!=P$5$;$?$$!"$$$/$D$+$N\e(B NNTP \e$B%0%k!<%W!#\e(B
+;; @r{\e$B;d$,\e(B spam \e$B$r<+F08!=P$5$;$?$$!"$$$/$D$+$N\e(B @acronym{NNTP} \e$B%0%k!<%W!#\e(B}
((spam-autodetect . t))
-;; \e$B;d$N\e(B nnimap "nnimap+mail.lifelogs.com:spam" \e$B%0%k!<%W!#\e(B
+;; @r{\e$B;d$N\e(B nnimap @samp{nnimap+mail.lifelogs.com:spam} \e$B%0%k!<%W!#\e(B}
-;; \e$B$3$l$O\e(B spam \e$B%0%k!<%W!#\e(B
+;; @r{\e$B$3$l$O\e(B spam \e$B%0%k!<%W!#\e(B}
((spam-contents gnus-group-spam-classification-spam)
- ;; \e$B$I$s$J\e(B spam \e$B$b;d$O\e(B ham \e$B0u$rIU$1$J$1$l$P\e(B
- ;; "nnimap+mail.lifelogs.com:train" \e$B$K9T$/\e(B (\e$BA0=R$N\e(B
- ;; gnus-spam-newsgroup-contents \e$B@_Dj$K$h$j!"$9$Y$F$N$^$@FI$^$l$?$3$H\e(B
- ;; \e$B$,L5$$%a%C%;!<%8$rFI$`$H$=$&$J$k\e(B)\e$B!#\e(B
+ ;; @r{\e$B$I$s$J\e(B spam \e$B$b;d$O\e(B ham \e$B0u$rIU$1$J$1$l$P\e(B}
+ ;; @r{@samp{nnimap+mail.lifelogs.com:train} \e$B$K9T$/\e(B}
+ ;; @r{(\e$BA0=R$N\e(B @code{gnus-spam-newsgroup-contents} \e$B@_Dj$K$h$j!"$9$Y$F$N\e(B}
+ ;; @r{\e$B$^$@FI$^$l$?$3$H$,L5$$%a%C%;!<%8$rFI$`$H$=$&$J$k\e(B)\e$B!#\e(B}
(spam-process-destination "nnimap+mail.lifelogs.com:train")
- ;; \e$B$I$s$J\e(B ham \e$B$b;d$N\e(B "nnimap+mail.lifelogs.com:mail" \e$B%U%)%k%@$K9T$/\e(B
- ;; \e$B$,!";d$N\e(B "nnimap+mail.lifelogs.com:trainham" \e$B%U%)%k%@$K$b%H%l!<\e(B
- ;; \e$B%K%s%0$N$?$a$K9T$/!#\e(B
+ ;; @r{\e$B$I$s$J\e(B ham \e$B$b;d$N\e(B @samp{nnimap+mail.lifelogs.com:mail} \e$B%U%)%k%@$K9T$/\e(B}
+ ;; @r{\e$B$,!";d$N\e(B @samp{nnimap+mail.lifelogs.com:trainham} \e$B%U%)%k%@$K$b%H%l!<\e(B}
+ ;; @r{\e$B%K%s%0$N$?$a$K9T$/!#\e(B}
(ham-process-destination "nnimap+mail.lifelogs.com:mail"
"nnimap+mail.lifelogs.com:trainham")
- ;; \e$B$3$N%0%k!<%W$G$O\e(B '!' \e$B0u$,IU$$$F$$$k$b$N$@$1$,\e(B ham\e$B!#\e(B
+ ;; @r{\e$B$3$N%0%k!<%W$G$O\e(B @samp{!} \e$B0u$,IU$$$F$$$k$b$N$@$1$,\e(B ham\e$B!#\e(B}
(ham-marks
(gnus-ticked-mark))
- ;; \e$B=P$+$1$k4V:]$K\e(B blacklist \e$B$KAw?.<T$r3P$($5$;$k\e(B - \e$B$3$l$OL@$i$+$K\e(B
- ;; \e$BITMW$G!"C1$K;d$N]5J0$r@2$i$9$?$a$K$"$j$^$9!#\e(B
+ ;; @r{\e$B=P$+$1$k4V:]$K\e(B blacklist \e$B$KAw?.<T$r3P$($5$;$k\e(B - \e$B$3$l$OL@$i$+$K\e(B}
+ ;; @r{\e$BITMW$G!"C1$K;d$N]5J0$r@2$i$9$?$a$K$"$j$^$9!#\e(B}
(spam-process (gnus-group-spam-exit-processor-blacklist)))
-;; \e$B$=$N8e\e(B IMAP \e$B%5!<%P!<>e$G!";d$O\e(B SpamAssassin \e$B$,\e(B spam \e$B$rG'<1$9$k\e(B
-;; \e$B%H%l!<%K%s%0$N$?$a$K\e(B "train" \e$B%0%k!<%W$r!"\e(Bham \e$B$rG'<1$9$k%H%l!<\e(B
-;; \e$B%K%s%0$N$?$a$K\e(B "trainham" \e$B%0%k!<%W$r;H$$$^$9!#$G$b\e(B Gnus \e$B$O$=$&\e(B
-;; \e$B$$$&$3$H$O$d$C$F$/$l$^$;$s!#\e(B
+;; @r{\e$B$=$N8e\e(B @acronym{IMAP} \e$B%5!<%P!<>e$G!";d$O\e(B SpamAssassin \e$B$,\e(B spam \e$B$rG'<1$9$k\e(B}
+;; @r{\e$B%H%l!<%K%s%0$N$?$a$K\e(B @samp{train} \e$B%0%k!<%W$r!"\e(Bham \e$B$rG'<1$9$k%H%l!<\e(B}
+;; @r{\e$B%K%s%0$N$?$a$K\e(B @samp{trainham} \e$B%0%k!<%W$r;H$$$^$9!#$G$b\e(B Gnus \e$B$O$=$&\e(B}
+;; @r{\e$B$$$&$3$H$O$d$C$F$/$l$^$;$s!#\e(B}
@end example
@subsubheading \e$B%5!<%P!<>e$N\e(B IMAP \e$B%5!<%P!<$G!"E}7WE*$J_I2a4o$H\e(B @file{spam.el} \e$B$r;H$&\e(B
-
From Reiner Steib <reiner.steib@@gmx.de>.
\e$B;d$N%W%m%P%$%@$O\e(B (@acronym{IMAP}) \e$B%a!<%k%5!<%P!<>e$G\e(B (@acronym{DCC} \e$B$HO"\e(B
@code{spam-list-of-checks} \e$B$K\e(B
-@example
- (spam-use-blackbox . spam-check-blackbox)
-@end example
+@lisp
+(spam-use-blackbox . spam-check-blackbox)
+@end lisp
\e$B$rDI2C!#\e(B@code{spam-list-of-processors} \e$B$K\e(B
-@example
- (gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox)
- (gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
-@end example
+@lisp
+(gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox)
+(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
+@end lisp
\e$B$rDI2C!#\e(B@code{spam-registration-functions} \e$B$K\e(B
-@example
- (spam-use-blackbox spam-blackbox-register-routine
- nil
- spam-blackbox-unregister-routine
- nil)
-@end example
+@lisp
+(spam-use-blackbox spam-blackbox-register-routine
+ nil
+ spam-blackbox-unregister-routine
+ nil)
+@end lisp
\e$B$rDI2C!#\e(B
@code{gnus.el} \e$B$K$"$k%0%k!<%W%Q%i%a!<%?\e(B @code{spam-process} \e$B$K\e(B
-@example
- (const :tag "Spam: Blackbox" (spam spam-use-blackbox))
- (const :tag "Ham: Blackbox" (ham spam-use-blackbox))
-@end example
+@lisp
+(const :tag "Spam: Blackbox" (spam spam-use-blackbox))
+(const :tag "Ham: Blackbox" (ham spam-use-blackbox))
+@end lisp
\e$B$r2C$($F2<$5$$!#$=$l$r%Q%i%a!<%?$HJQ?t$N%+%9%?%^%$%:$NFs2s$K$D$$$F9T$J$&\e(B
\e$B$3$H$r3N$+$a$F2<$5$$!#\e(B
@code{gnus.el} \e$B$N%0%k!<%W%Q%i%a!<%?\e(B @code{spam-autodetect-methods} \e$B$K\e(B
-@example
- (variable-item spam-use-blackbox)
-@end example
+@lisp
+(variable-item spam-use-blackbox)
+@end lisp
\e$B$r2C$($F2<$5$$!#\e(B
This instructs the @code{imap.el} package to log any exchanges with
the server. The log is stored in the buffer @samp{*imap-log*}. Look
for error messages, which sometimes are tagged with the keyword
-@code{BAD} - but when submitting a bug, make sure to include all the
+@code{BAD}---but when submitting a bug, make sure to include all the
data.
@node Other Sources
articles becomes the substitute for checking incoming mail. Whether
only unseen articles or all unread articles will be processed is
determined by the @code{spam-autodetect-recheck-messages}. When set
-to t, unread messages will be rechecked.
+to @code{t}, unread messages will be rechecked.
@code{spam-autodetect} grants the user at once more and less control
of spam filtering. The user will have more control over each group's
@code{spam-process-destination} is @code{nil}, the spam is marked as
expired, which is usually the right thing to do.
-If spam can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If spam can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
If a ham mail is found in a ham group, as determined by the
@code{ham-marks} parameter, it is processed as ham by the active ham
necessary, which is what most people want. More on this in
@xref{Spam ELisp Package Configuration Examples}.
-If ham can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If ham can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
If all this seems confusing, don't worry. Soon it will be as natural
-as typing Lisp one-liners on a neural interface... err, sorry, that's
+as typing Lisp one-liners on a neural interface@dots{} err, sorry, that's
50 years in the future yet. Just trust us, it's not so bad.
@node Spam ELisp Package Filtering of Incoming Mail
work depending on your server's tolerance for strange group names.
You can also give @code{spam-split} a parameter,
-e.g. @samp{'spam-use-regex-headers} or @samp{"maybe-spam"}. Why is
+e.g. @code{spam-use-regex-headers} or @code{"maybe-spam"}. Why is
this useful?
Take these split rules (with @code{spam-use-regex-headers} and
nnimap-split-fancy '(|
(any "ding" "ding")
(: spam-split)
- ;; default mailbox
+ ;; @r{default mailbox}
"mail")
@end example
regex-headers check) will be after the ding rule:
@example
- nnimap-split-fancy '(|
-;;; all spam detected by spam-use-regex-headers goes to "regex-spam"
- (: spam-split "regex-spam" 'spam-use-regex-headers)
- (any "ding" "ding")
-;;; all other spam detected by spam-split goes to spam-split-group
- (: spam-split)
- ;; default mailbox
- "mail")
+nnimap-split-fancy
+ '(|
+ ;; @r{all spam detected by @code{spam-use-regex-headers} goes to @samp{regex-spam}}
+ (: spam-split "regex-spam" 'spam-use-regex-headers)
+ (any "ding" "ding")
+ ;; @r{all other spam detected by spam-split goes to @code{spam-split-group}}
+ (: spam-split)
+ ;; @r{default mailbox}
+ "mail")
@end example
This lets you invoke specific @code{spam-split} checks depending on
will be detected later.
The format of the spam or ham processor entry used to be a symbol,
-but now it is a cons cell. See the individual spam processor entries
+but now it is a @sc{cons} cell. See the individual spam processor entries
for more information.
@vindex gnus-spam-newsgroup-contents
determined by either the @code{ham-process-destination} group
parameter or a match in the @code{gnus-ham-process-destinations}
variable, which is a list of regular expressions matched with group
-names (it's easiest to customize this variable with
-@code{customize-variable gnus-ham-process-destinations}). Each
-newsgroup specification has the format (REGEXP PROCESSOR) in a
-standard Lisp list, if you prefer to customize the variable manually.
-The ultimate location is a group name or names. If the
-@code{ham-process-destination} parameter is not set, ham articles are
-left in place. If the
+names (it's easiest to customize this variable with @kbd{M-x
+customize-variable @key{RET} gnus-ham-process-destinations}). Each
+newsgroup specification has the format @code{(@var{regexp}
+@var{processor})} in a standard Lisp list, if you prefer to customize
+the variable manually. The ultimate location is a group name or
+names. If the @code{ham-process-destination} parameter is not set,
+ham articles are left in place. If the
@code{spam-mark-ham-unread-before-move-from-spam-group} parameter is
-set, the ham articles are marked as unread before being moved.
+set, the ham articles are marked as unread before being moved.
-If ham can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If ham can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
Note that you can use multiples destinations per group or regular
expression! This enables you to send your ham to a regular mail
the @code{spam-process-destination} group parameter or a match in the
@code{gnus-spam-process-destinations} variable, which is a list of
regular expressions matched with group names (it's easiest to
-customize this variable with @code{customize-variable
+customize this variable with @kbd{M-x customize-variable @key{RET}
gnus-spam-process-destinations}). Each newsgroup specification has
-the repeated format (REGEXP GROUP) and they are all in a standard Lisp
-list, if you prefer to customize the variable manually. The ultimate
-location is a group name or names. If the
+the repeated format @code{(@var{regexp} @var{group})} and they are all
+in a standard Lisp list, if you prefer to customize the variable
+manually. The ultimate location is a group name or names. If the
@code{spam-process-destination} parameter is not set, the spam
articles are only expired. The group name is fully qualified, meaning
that if you see @samp{nntp:servername} before the group name in the
-group buffer then you need it here as well.
+group buffer then you need it here as well.
-If spam can not be moved - because of a read-only backend such as NNTP,
-for example, it will be copied.
+If spam can not be moved---because of a read-only backend such as
+@acronym{NNTP}, for example, it will be copied.
Note that you can use multiples destinations per group or regular
expression! This enables you to send your spam to multiple @emph{spam
@vindex spam-mark-ham-unread-before-move-from-spam-group
Set this variable if you want ham to be unmarked before it is moved
out of the spam group. This is very useful when you use something
-like the tick mark @samp{!} to mark ham - the article will be placed
-in your ham-process-destination, unmarked as if it came fresh from
-the mail server.
+like the tick mark @samp{!} to mark ham---the article will be placed
+in your @code{ham-process-destination}, unmarked as if it came fresh
+from the mail server.
@vindex spam-autodetect-recheck-messages
When autodetecting spam, this variable tells @code{spam.el} whether
From Ted Zlatanov <tzz@@lifelogs.com>.
@example
-
-;; for gnus-registry-split-fancy-with-parent and spam autodetection
-;; see gnus-registry.el for more information
+;; @r{for @code{gnus-registry-split-fancy-with-parent} and spam autodetection}
+;; @r{see @file{gnus-registry.el} for more information}
(gnus-registry-initialize)
(spam-initialize)
-;; I like control-S for marking spam
+;; @r{I like @kbd{C-s} for marking spam}
(define-key gnus-summary-mode-map "\C-s" 'gnus-summary-mark-as-spam)
(setq
- spam-log-to-registry t ;; for spam autodetection
+ spam-log-to-registry t ; @r{for spam autodetection}
spam-use-BBDB t
- spam-use-regex-headers t ; catch X-Spam-Flag (SpamAssassin)
- ;; all groups with "spam" in the name contain spam
- gnus-spam-newsgroup-contents '(("spam" gnus-group-spam-classification-spam))
- ;; see documentation for these
+ spam-use-regex-headers t ; @r{catch X-Spam-Flag (SpamAssassin)}
+ ;; @r{all groups with @samp{spam} in the name contain spam}
+ gnus-spam-newsgroup-contents
+ '(("spam" gnus-group-spam-classification-spam))
+ ;; @r{see documentation for these}
spam-move-spam-nonspam-groups-only nil
spam-mark-only-unseen-as-spam t
spam-mark-ham-unread-before-move-from-spam-group t
nnimap-split-rule 'nnimap-split-fancy
- ;; understand what this does before you copy it to your own setup!
+ ;; @r{understand what this does before you copy it to your own setup!}
nnimap-split-fancy '(|
- ;; trace references to parents and put in their group
+ ;; @r{trace references to parents and put in their group}
(: gnus-registry-split-fancy-with-parent)
- ;; this will catch server-side SpamAssassin tags
+ ;; @r{this will catch server-side SpamAssassin tags}
(: spam-split 'spam-use-regex-headers)
(any "ding" "ding")
- ;; note that spam by default will go to "spam"
+ ;; @r{note that spam by default will go to @samp{spam}}
(: spam-split)
- ;; default mailbox
+ ;; @r{default mailbox}
"mail"))
-;; my parameters, set with `G p'
+;; @r{my parameters, set with @kbd{G p}}
-;; all nnml groups, and all nnimap groups except
-;; "nnimap+mail.lifelogs.com:train" and
-;; "nnimap+mail.lifelogs.com:spam": any spam goes to nnimap training,
-;; because it must have been detected manually
+;; @r{all nnml groups, and all nnimap groups except}
+;; @r{@samp{nnimap+mail.lifelogs.com:train} and}
+;; @r{@samp{nnimap+mail.lifelogs.com:spam}: any spam goes to nnimap training,}
+;; @r{because it must have been detected manually}
((spam-process-destination . "nnimap+mail.lifelogs.com:train"))
-;; all NNTP groups
-;; autodetect spam with the blacklist and ham with the BBDB
+;; @r{all @acronym{NNTP} groups}
+;; @r{autodetect spam with the blacklist and ham with the BBDB}
((spam-autodetect-methods spam-use-blacklist spam-use-BBDB)
-;; send all spam to the training group
+;; @r{send all spam to the training group}
(spam-process-destination . "nnimap+mail.lifelogs.com:train"))
-;; only some NNTP groups, where I want to autodetect spam
+;; @r{only some @acronym{NNTP} groups, where I want to autodetect spam}
((spam-autodetect . t))
-;; my nnimap "nnimap+mail.lifelogs.com:spam" group
+;; @r{my nnimap @samp{nnimap+mail.lifelogs.com:spam} group}
-;; this is a spam group
+;; @r{this is a spam group}
((spam-contents gnus-group-spam-classification-spam)
- ;; any spam (which happens when I enter for all unseen messages,
- ;; because of the gnus-spam-newsgroup-contents setting above), goes to
- ;; "nnimap+mail.lifelogs.com:train" unless I mark it as ham
+ ;; @r{any spam (which happens when I enter for all unseen messages,}
+ ;; @r{because of the @code{gnus-spam-newsgroup-contents} setting above), goes to}
+ ;; @r{@samp{nnimap+mail.lifelogs.com:train} unless I mark it as ham}
(spam-process-destination "nnimap+mail.lifelogs.com:train")
- ;; any ham goes to my "nnimap+mail.lifelogs.com:mail" folder, but
- ;; also to my "nnimap+mail.lifelogs.com:trainham" folder for training
+ ;; @r{any ham goes to my @samp{nnimap+mail.lifelogs.com:mail} folder, but}
+ ;; @r{also to my @samp{nnimap+mail.lifelogs.com:trainham} folder for training}
(ham-process-destination "nnimap+mail.lifelogs.com:mail"
"nnimap+mail.lifelogs.com:trainham")
- ;; in this group, only '!' marks are ham
+ ;; @r{in this group, only @samp{!} marks are ham}
(ham-marks
(gnus-ticked-mark))
- ;; remembers senders in the blacklist on the way out - this is
- ;; definitely not needed, it just makes me feel better
+ ;; @r{remembers senders in the blacklist on the way out---this is}
+ ;; @r{definitely not needed, it just makes me feel better}
(spam-process (gnus-group-spam-exit-processor-blacklist)))
-;; Later, on the IMAP server I use the "train" group for training
-;; SpamAssassin to recognize spam, and the "trainham" group for
-;; recognizing ham - but Gnus has nothing to do with it.
+;; @r{Later, on the @acronym{IMAP} server I use the @samp{train} group for training}
+;; @r{SpamAssassin to recognize spam, and the @samp{trainham} group fora}
+;; @r{recognizing ham---but Gnus has nothing to do with it.}
@end example
@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server
-
From Reiner Steib <reiner.steib@@gmx.de>.
My provider has set up bogofilter (in combination with @acronym{DCC}) on
messages are marked as spam (with @code{$}). When I find a false
positive, I mark the message with some other ham mark (@code{ham-marks},
@ref{Spam ELisp Package Global Variables}). On group exit, those
-messages are copied to both groups, @samp{INBOX} (were I want to have
+messages are copied to both groups, @samp{INBOX} (where I want to have
the article) and @samp{training.ham} (for training bogofilter) and
deleted from the @samp{spam.detected} folder.
@enumerate
@item
-code
+Code
@lisp
(defvar spam-use-blackbox nil
@end lisp
Add
-@example
- (spam-use-blackbox . spam-check-blackbox)
-@end example
+@lisp
+(spam-use-blackbox . spam-check-blackbox)
+@end lisp
to @code{spam-list-of-checks}.
Add
-@example
- (gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox)
- (gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
-@end example
+@lisp
+(gnus-group-ham-exit-processor-blackbox ham spam-use-blackbox)
+(gnus-group-spam-exit-processor-blackbox spam spam-use-blackbox)
+@end lisp
+
to @code{spam-list-of-processors}.
Add
-@example
- (spam-use-blackbox spam-blackbox-register-routine
- nil
- spam-blackbox-unregister-routine
- nil)
-@end example
+@lisp
+(spam-use-blackbox spam-blackbox-register-routine
+ nil
+ spam-blackbox-unregister-routine
+ nil)
+@end lisp
+
to @code{spam-registration-functions}. Write the register/unregister
routines using the bogofilter register/unregister routines as a
start, or other restister/unregister routines more appropriate to
Blackbox.
@item
-functionality
+Functionality
Write the @code{spam-check-blackbox} function. It should return
@samp{nil} or @code{spam-split-group}, observing the other
@enumerate
@item
-code
+Code
Note you don't have to provide a spam or a ham processor. Only
provide them if Blackbox supports spam or ham processing.
Gnus parameters
Add
-@example
- (const :tag "Spam: Blackbox" (spam spam-use-blackbox))
- (const :tag "Ham: Blackbox" (ham spam-use-blackbox))
-@end example
+@lisp
+(const :tag "Spam: Blackbox" (spam spam-use-blackbox))
+(const :tag "Ham: Blackbox" (ham spam-use-blackbox))
+@end lisp
to the @code{spam-process} group parameter in @code{gnus.el}. Make
sure you do it twice, once for the parameter and once for the
variable customization.
Add
-@example
- (variable-item spam-use-blackbox)
-@end example
+@lisp
+(variable-item spam-use-blackbox)
+@end lisp
to the @code{spam-autodetect-methods} group parameter in
@code{gnus.el}.
@item sieve-manage-log
@vindex sieve-manage-log
-If non-nil, should be a string naming a buffer where a protocol trace
+If non-@code{nil}, should be a string naming a buffer where a protocol trace
is dumped (for debugging purposes).
@end table
@item sieve-manage-havespace
@findex sieve-manage-havespace
-Returns non-nil iff server have roam for a script of given size.
+Returns non-@code{nil} iff server have roam for a script of given
+size.
@item sieve-manage-getscript
@findex sieve-manage-getscript