From: yamaoka Date: Sun, 4 Jan 2004 23:32:55 +0000 (+0000) Subject: T-gnus 6.16.6 revision 00. X-Git-Tag: t-gnus-6_16_6-00 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=refs%2Fheads%2Ft-gnus-6_16;p=elisp%2Fgnus.git- T-gnus 6.16.6 revision 00. --- diff --git a/ChangeLog b/ChangeLog index 3ebc9c4..ea338cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2004-01-04 Katsumi Yamaoka + * lisp/gnus-vers.el: T-gnus 6.16.6 revision 00. + +2004-01-04 Katsumi Yamaoka + * lisp/gnus-vers.el: T-gnus 6.16.5 revision 00. 2004-01-04 Katsumi Yamaoka diff --git a/README.T-gnus b/README.T-gnus index 24bfd41..e7782dc 100644 --- a/README.T-gnus +++ b/README.T-gnus @@ -33,5 +33,5 @@ NEWS: * T-gnus 6.16 - this is based on Gnus. - The latest T-gnus is T-gnus 6.16.5 (based on Gnus 5.10.5). It + The latest T-gnus is T-gnus 6.16.6 (based on Gnus 5.10.6). It requires SEMI 1.14, FLIM 1.14, and APEL 10.0 or later. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 3965be6..f2f699f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,17 @@ 2004-01-04 Lars Magne Ingebrigtsen + * gnus.el: Gnus v5.10.6 is released. + +2004-01-04 Kai Grossjohann + + * gnus-sum.el (gnus-summary-print-article): Doc fix. + +2004-01-04 Lars Magne Ingebrigtsen + + * gnus.el (gnus-version-number): Bump. + +2004-01-04 Lars Magne Ingebrigtsen + * gnus.el: Gnus v5.10.5 is released. 2004-01-03 Lars Magne Ingebrigtsen diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 2dd2bd4..a8938f3 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -8648,10 +8648,16 @@ article. If BACKWARD (the prefix) is non-nil, search backward instead." "[()]" "\\\\\\&")) (defun gnus-summary-print-article (&optional filename n) - "Generate and print a PostScript image of the N next (mail) articles. + "Generate and print a PostScript image of the process-marked (mail) articles. -If N is negative, print the N previous articles. If N is nil and articles -have been marked with the process mark, print these instead. +If used interactively, print the current article if none are +process-marked. With prefix arg, prompt the user for the name of the +file to save in. + +When used from Lisp, accept two optional args FILENAME and N. N means +to print the next N articles. If N is negative, print the N previous +articles. If N is nil and articles have been marked with the process +mark, print these instead. If the optional first argument FILENAME is nil, send the image to the printer. If FILENAME is a string, save the PostScript image in a file with diff --git a/lisp/gnus-vers.el b/lisp/gnus-vers.el index f7b6325..0f64bfe 100644 --- a/lisp/gnus-vers.el +++ b/lisp/gnus-vers.el @@ -40,10 +40,10 @@ ;; Product information of this gnus. (product-provide 'gnus-vers (product-define "T-gnus" nil - (list 6 16 5 + (list 6 16 6 (string-to-number gnus-revision-number)))) -(defconst gnus-original-version-number "5.10.5" +(defconst gnus-original-version-number "5.10.6" "Version number for this version of Gnus.") (provide 'running-pterodactyl-gnus-0_73-or-later) diff --git a/texi/ChangeLog b/texi/ChangeLog index 37230bc..8c0289a 100644 --- a/texi/ChangeLog +++ b/texi/ChangeLog @@ -1,3 +1,17 @@ +2004-01-04 Reiner Steib + + * gnus.texi (Spam ELisp Package Configuration Examples): Markup fixes. + +2004-01-03 Teodor Zlatanov + + * gnus.texi (Spam ELisp Package Sequence of Events): explain more + about the sequence of events and what happens with read-only + backends + (Spam ELisp Package Global Variables): explain what happens with + read-only backends + (Spam ELisp Package Configuration Examples): added Reiner Steib + and Ted Zlatanov's setups + 2004-01-03 Reiner Steib * emacs-mime.texi (Display Customization): Add mm-enable-external. diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 580d63e..6d80aa6 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -21757,7 +21757,11 @@ Package Global Variables}) $B$K0\F0$5$;$i$l$^$9!#(BSpam $B$,:F;0=hM}$5$l$k$3$ $B$rK>$^$J$$$J$i$P!"(B@file{gnus-registry.el} $B%Q%C%1!<%8$rFI$_9~$_!"(B @code{spam-log-to-registry} $BJQ?t$rM-8z$K$7$J$1$l$P$J$j$^$;$s!#$3$N$h$&(B $B$K(B spam $B$O$I$3$G$b8!CN$5$l=hM}$5$l$^$9!#$=$l$O$[$H$s$I$N?M!9$,K>$`$b$N$G(B -$B$9!#(B +$B$9!#(B@code{spam-process-destination} $B$,(B nil $B$@$C$?>l9g!"(Bspam $B$K$O4|8B@Z$l(B +$B>C5n$N0u$,IU$1$i$l$^$9!#IaDL$=$l$O@5$7$$9T$J$$$G$9!#(B + +Spam $B$,0\F0$G$-$J$$>l9g(B ($BNc$($P(B NNTP $B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N(B +$B$?$a$K(B)$B!"$=$l$O%3%T!<$5$l$^$9!#(B Ham $B%0%k!<%W$G(B @code{ham-marks} $B%Q%i%a!<%?$G7hDj$5$l$k(B ham $B%a!<%k$,8+$D(B $B$+$C$?$i!"%0%k!<%W$rH4$1$k$H$-$K3h$-$F$$$k(B ham @code{spam-processor} $B$G(B @@ -21770,6 +21774,9 @@ Ham $B%0%k!<%W$G(B @code{ham-marks} $B%Q%i%a!<%?$G7hDj$5$l$k(B ham $B%a!<%k $B$b$N$G$9!#$3$l$K4X$9$k>\:Y$O(B @xref{Spam ELisp Package Configuration Examples}. +Ham $B$,0\F0$G$-$J$$>l9g(B ($BNc$($P(B NNTP $B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N$?(B +$B$a$K(B)$B!"$=$l$O%3%T!<$5$l$^$9!#(B + $B$3$l$i$9$Y$F$,$o$1$,$o$+$i$J$/$F$b!"?4G[$OL5MQ$G$9(B ($BLuCm(B: $B$G$bLuJ8$,@53N(B $B$G$O$J$$$+$b$7$l$J$$$N$G!"JQ$@$H;W$C$?$i86J8$r;2>H$N$3$H(B :-p)$B!#$9$0$K$=(B $B$l$O?@7P%$%s%?!<%U%'!<%9>e$K(B Lisp $B<0$r%?%$%W$9$k$h$&$K<+A3$J$3$H$K$J$j$^(B @@ -21980,6 +21987,9 @@ Ham $B0u$N%j%9%H$K2D;k(B (tick) $B0u$r4^$a$k$3$H$,LrN)$D$3$H$b$"$j$^$9!#L$FI0 @code{spam-mark-ham-unread-before-move-from-spam-group} $B%Q%i%a!<%?$,@_Dj(B $B$5$l$F$$$k$H!"(Bham $B5-;v$O0\F0$5$;$i$l$kA0$KL$FI$N0u$,IU$1$i$l$^$9!#(B +Ham $B$,0\F0$G$-$J$$>l9g(B ($BNc$($P(B NNTP $B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N$?(B +$B$a$K(B)$B!"$=$l$O%3%T!<$5$l$^$9!#(B + $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$$(B! $B$3$l$K$h$C$F(B ham $B5-;v$r@55,$N%a!<%k%0%k!<%W$H(B @emph{ham $B%H%l!<%K%s%0(B} $B%0(B $B%k!<%W$KAw$k$3$H$,$G$-$^$9!#(B @@ -22016,6 +22026,9 @@ Ham $B0u$N%j%9%H$K2D;k(B (tick) $B0u$r4^$a$k$3$H$,LrN)$D$3$H$b$"$j$^$9!#L$FI0 $B%W%P%C%U%!$G%0%k!<%WL>$NA0$K(B @samp{nntp:servername} $B$N$h$&$J$b$N$,8+$($k(B $B>l9g$O!"$3$3$G$b$=$l$r;H$&I,MW$,$"$j$^$9!#(B +Spam $B$,0\F0$G$-$J$$>l9g(B ($BNc$($P(B NNTP $B$N$h$&$JFI$_9~$_@lMQ%P%C%/%(%s%I$N(B +$B$?$a$K(B)$B!"$=$l$O%3%T!<$5$l$^$9!#(B + $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$$(B! $B$3$l$K$h$C$F(B spam $B5-;v$r@55,$N%a!<%k%0%k!<%W(B $B$H(B @emph{spam $B%H%l!<%K%s%0(B} $B%0%k!<%W$KAw$k$3$H$,$G$-$^$9!#(B @@ -22050,7 +22063,165 @@ Ham $B$,(B spam $B%0%k!<%W$+$i0\F0$5$l$kA0$K0u$r>C$7$?$$>l9g$O!"$3$NJQ?t$r%;% @cindex spam configuration examples @cindex spam -@emph{TODO}: $BF|:";H$&$?$a$N@bL@IU$-$G@_DjNc$r2C$($k!#(B +@subsubheading Ted's setup + +From Ted Zlatanov . +@example + +;; for gnus-registry-split-fancy-with-parent and spam autodetection +;; see gnus-registry.el for more information +(gnus-registry-initialize) +(spam-initialize) + +;; I like control-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-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-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! + nnimap-split-fancy '(| + ;; trace references to parents and put in their group + (: gnus-registry-split-fancy-with-parent) + ;; 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" + (: spam-split) + ;; default mailbox + "mail")) + +;; my parameters, set with `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 + +((spam-process-destination . "nnimap+mail.lifelogs.com:train")) + +;; all NNTP groups +;; 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 + (spam-process-destination . "nnimap+mail.lifelogs.com:train")) + +;; only some NNTP groups, where I want to autodetect spam +((spam-autodetect . t)) + +;; my nnimap "nnimap+mail.lifelogs.com:spam" group + +;; 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 + + (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 + + (ham-process-destination "nnimap+mail.lifelogs.com:mail" + "nnimap+mail.lifelogs.com:trainham") + ;; in this group, only '!' 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 + (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. + +@end example + +@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server + +From Reiner Steib . + +My provider has set up bogofilter (in combination with @acronym{DCC}) on +the mail server (@acronym{IMAP}). Recognized spam goes to +@samp{spam.detected}, the rest goes through the normal filter rules, +i.e. to @samp{some.folder} or to @samp{INBOX}. Training on false +positives or negatives is done by copying or moving the article to +@samp{training.ham} or @samp{training.spam} respectively. A cron job on +the server feeds those to bogofilter with the suitable ham or spam +options and deletes them from the @samp{training.ham} and +@samp{training.spam} folders. + +With the following entries in @code{gnus-parameters}, @code{spam.el} +does most of the job for me: + +@lisp + ("nnimap:spam\\.detected" + (gnus-article-sort-functions '(gnus-article-sort-by-chars)) + (ham-process-destination "nnimap:INBOX" "nnimap:training.ham") + (spam-contents gnus-group-spam-classification-spam)) + ("nnimap:\\(INBOX\\|other-folders\\)" + (spam-process-destination . "nnimap:training.spam") + (spam-contents gnus-group-spam-classification-ham)) +@end lisp + +@itemize + +@item @b{The Spam folder:} + +In the folder @samp{spam.detected}, I have to check for false positives +(i.e. legitimate mails, that were wrongly judged as spam by +bogofilter or DCC). + +Because of the @code{gnus-group-spam-classification-spam} entry, all +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 +the article) and @samp{training.ham} (for training bogofilter) and +deleted from the @samp{spam.detected} folder. + +The @code{gnus-article-sort-by-chars} entry simplifies detection of +false positives for me. I receive lots of worms (sweN, @dots{}), that all +have a similar size. Grouping them by size (i.e. chars) makes finding +other false positives easier. (Of course worms aren't @i{spam} +(@acronym{UCE}, @acronym{UBE}) strictly speaking. Anyhow, bogofilter is +an excellent tool for filtering those unwanted mails for me.) + +@item @b{Ham folders:} + +In my ham folders, I just hit @kbd{S x} +(@code{gnus-summary-mark-as-spam}) whenever I see an unrecognized spam +mail (false negative). On group exit, those messages are moved to +@samp{training.ham}. +@end itemize + +@subsubheading Reporting spam articles in Gmane groups with @code{spam-report.el} + +From Reiner Steib . + +With following entry in @code{gnus-parameters}, @kbd{S x} +(@code{gnus-summary-mark-as-spam}) marks articles in @code{gmane.*} +groups as spam and reports the to Gmane at group exit: + +@lisp + ("^gmane\\." + (spam-process (gnus-group-spam-exit-processor-report-gmane))) +@end lisp + +Additionally, I use `(setq spam-report-gmane-use-article-number nil)' +because I don't read the groups directly from news.gmane.org, but +through my local news server (leafnode). I.e. the article numbers are +not the same as on news.gmane.org, thus @code{spam-report.el} has to check +the @code{X-Report-Spam} header to find the correct number. @node Blacklists and Whitelists @subsubsection $B%V%i%C%/%j%9%H$H%[%o%$%H%j%9%H(B @@ -22711,8 +22882,8 @@ Gnus $B$N%Q%i%a!<%?(B @code{gnus.el} $B$K$"$k%0%k!<%W%Q%i%a!<%?(B @code{spam-process} $B$K(B @example - (const :tag "Spam: Blackbox" (spam spam-use-blackbox)) - (const :tag "Ham: Blackbox" (ham spam-use-blackbox)) + (const :tag "Spam: Blackbox" (spam spam-use-blackbox)) + (const :tag "Ham: Blackbox" (ham spam-use-blackbox)) @end example $B$r2C$($F2<$5$$!#$=$l$r%Q%i%a!<%?$HJQ?t$N%+%9%?%^%$%:$NFs2s$K$D$$$F9T$J$&(B @@ -22721,7 +22892,7 @@ Gnus $B$N%Q%i%a!<%?(B @code{gnus.el} $B$N%0%k!<%W%Q%i%a!<%?(B @code{spam-autodetect-methods} $B$K(B @example - (variable-item spam-use-blackbox) + (variable-item spam-use-blackbox) @end example $B$r2C$($F2<$5$$!#(B diff --git a/texi/gnus.texi b/texi/gnus.texi index 73b272a..66ced09 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -22642,9 +22642,14 @@ ELisp Package Global Variables}) for further training or deletion. You have to load the @code{gnus-registry.el} package and enable the @code{spam-log-to-registry} variable if you want spam to be processed no more than once. Thus, spam is detected and processed everywhere, -which is what most people want. +which is what most people want. If the +@code{spam-process-destination} is nil, the spam is marked as +expired, which is usually the right thing to do. -If a ham mail is found in a ham group, as determineed by the +If spam can not be moved - because of a read-only backend such as 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 @code{spam-processor} when the group is exited. With the variables @code{spam-process-ham-in-spam-groups} and @@ -22656,6 +22661,9 @@ no more than once. Thus, ham is detected and processed only when 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 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 50 years in the future yet. Just trust us, it's not so bad. @@ -22865,6 +22873,9 @@ 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. +If ham can not be moved - because of a read-only backend such as 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 group and to a @emph{ham training} group. @@ -22901,6 +22912,9 @@ 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. +If spam can not be moved - because of a read-only backend such as 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 training} groups. @@ -22937,7 +22951,165 @@ spam. It is recommended that you leave it off. @cindex spam configuration examples @cindex spam -@emph{TODO}: add configuration examples with explanations of daily usage +@subsubheading Ted's setup + +From Ted Zlatanov . +@example + +;; for gnus-registry-split-fancy-with-parent and spam autodetection +;; see gnus-registry.el for more information +(gnus-registry-initialize) +(spam-initialize) + +;; I like control-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-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-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! + nnimap-split-fancy '(| + ;; trace references to parents and put in their group + (: gnus-registry-split-fancy-with-parent) + ;; 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" + (: spam-split) + ;; default mailbox + "mail")) + +;; my parameters, set with `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 + +((spam-process-destination . "nnimap+mail.lifelogs.com:train")) + +;; all NNTP groups +;; 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 + (spam-process-destination . "nnimap+mail.lifelogs.com:train")) + +;; only some NNTP groups, where I want to autodetect spam +((spam-autodetect . t)) + +;; my nnimap "nnimap+mail.lifelogs.com:spam" group + +;; 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 + + (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 + + (ham-process-destination "nnimap+mail.lifelogs.com:mail" + "nnimap+mail.lifelogs.com:trainham") + ;; in this group, only '!' 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 + (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. + +@end example + +@subsubheading Using @file{spam.el} on an IMAP server with a statistical filter on the server + +From Reiner Steib . + +My provider has set up bogofilter (in combination with @acronym{DCC}) on +the mail server (@acronym{IMAP}). Recognized spam goes to +@samp{spam.detected}, the rest goes through the normal filter rules, +i.e. to @samp{some.folder} or to @samp{INBOX}. Training on false +positives or negatives is done by copying or moving the article to +@samp{training.ham} or @samp{training.spam} respectively. A cron job on +the server feeds those to bogofilter with the suitable ham or spam +options and deletes them from the @samp{training.ham} and +@samp{training.spam} folders. + +With the following entries in @code{gnus-parameters}, @code{spam.el} +does most of the job for me: + +@lisp + ("nnimap:spam\\.detected" + (gnus-article-sort-functions '(gnus-article-sort-by-chars)) + (ham-process-destination "nnimap:INBOX" "nnimap:training.ham") + (spam-contents gnus-group-spam-classification-spam)) + ("nnimap:\\(INBOX\\|other-folders\\)" + (spam-process-destination . "nnimap:training.spam") + (spam-contents gnus-group-spam-classification-ham)) +@end lisp + +@itemize + +@item @b{The Spam folder:} + +In the folder @samp{spam.detected}, I have to check for false positives +(i.e. legitimate mails, that were wrongly judged as spam by +bogofilter or DCC). + +Because of the @code{gnus-group-spam-classification-spam} entry, all +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 +the article) and @samp{training.ham} (for training bogofilter) and +deleted from the @samp{spam.detected} folder. + +The @code{gnus-article-sort-by-chars} entry simplifies detection of +false positives for me. I receive lots of worms (sweN, @dots{}), that all +have a similar size. Grouping them by size (i.e. chars) makes finding +other false positives easier. (Of course worms aren't @i{spam} +(@acronym{UCE}, @acronym{UBE}) strictly speaking. Anyhow, bogofilter is +an excellent tool for filtering those unwanted mails for me.) + +@item @b{Ham folders:} + +In my ham folders, I just hit @kbd{S x} +(@code{gnus-summary-mark-as-spam}) whenever I see an unrecognized spam +mail (false negative). On group exit, those messages are moved to +@samp{training.ham}. +@end itemize + +@subsubheading Reporting spam articles in Gmane groups with @code{spam-report.el} + +From Reiner Steib . + +With following entry in @code{gnus-parameters}, @kbd{S x} +(@code{gnus-summary-mark-as-spam}) marks articles in @code{gmane.*} +groups as spam and reports the to Gmane at group exit: + +@lisp + ("^gmane\\." + (spam-process (gnus-group-spam-exit-processor-report-gmane))) +@end lisp + +Additionally, I use `(setq spam-report-gmane-use-article-number nil)' +because I don't read the groups directly from news.gmane.org, but +through my local news server (leafnode). I.e. the article numbers are +not the same as on news.gmane.org, thus @code{spam-report.el} has to check +the @code{X-Report-Spam} header to find the correct number. @node Blacklists and Whitelists @subsubsection Blacklists and Whitelists @@ -23551,9 +23723,9 @@ to @code{spam-list-of-processors}. Add @example (spam-use-blackbox spam-blackbox-register-routine - nil - spam-blackbox-unregister-routine - nil) + nil + spam-blackbox-unregister-routine + nil) @end example to @code{spam-registration-functions}. Write the register/unregister routines using the bogofilter register/unregister routines as a @@ -23606,8 +23778,8 @@ Gnus parameters Add @example - (const :tag "Spam: Blackbox" (spam spam-use-blackbox)) - (const :tag "Ham: Blackbox" (ham spam-use-blackbox)) + (const :tag "Spam: Blackbox" (spam spam-use-blackbox)) + (const :tag "Ham: Blackbox" (ham spam-use-blackbox)) @end example 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 @@ -23615,7 +23787,7 @@ variable customization. Add @example - (variable-item spam-use-blackbox) + (variable-item spam-use-blackbox) @end example to the @code{spam-autodetect-methods} group parameter in @code{gnus.el}.