2004-01-04 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus-vers.el: T-gnus 6.16.6 revision 00.
+
+2004-01-04 Katsumi Yamaoka <yamaoka@jpl.org>
+
* lisp/gnus-vers.el: T-gnus 6.16.5 revision 00.
2004-01-04 Katsumi Yamaoka <yamaoka@jpl.org>
* 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.
2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+ * gnus.el: Gnus v5.10.6 is released.
+
+2004-01-04 Kai Grossjohann <kai@emptydomain.de>
+
+ * gnus-sum.el (gnus-summary-print-article): Doc fix.
+
+2004-01-04 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnus.el (gnus-version-number): Bump.
+
+2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+
* gnus.el: Gnus v5.10.5 is released.
2004-01-03 Lars Magne Ingebrigtsen <larsi@gnus.org>
"[()]" "\\\\\\&"))
(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
;; 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)
+2004-01-04 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * gnus.texi (Spam ELisp Package Configuration Examples): Markup fixes.
+
+2004-01-03 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * 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 <Reiner.Steib@gmx.de>
* emacs-mime.texi (Display Customization): Add mm-enable-external.
\e$B$rK>$^$J$$$J$i$P!"\e(B@file{gnus-registry.el} \e$B%Q%C%1!<%8$rFI$_9~$_!"\e(B
@code{spam-log-to-registry} \e$BJQ?t$rM-8z$K$7$J$1$l$P$J$j$^$;$s!#$3$N$h$&\e(B
\e$B$K\e(B spam \e$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\e(B
-\e$B$9!#\e(B
+\e$B$9!#\e(B@code{spam-process-destination} \e$B$,\e(B nil \e$B$@$C$?>l9g!"\e(Bspam \e$B$K$O4|8B@Z$l\e(B
+\e$B>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
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$b$N$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
+
\e$B$3$l$i$9$Y$F$,$o$1$,$o$+$i$J$/$F$b!"?4G[$OL5MQ$G$9\e(B (\e$BLuCm\e(B: \e$B$G$bLuJ8$,@53N\e(B
\e$B$G$O$J$$$+$b$7$l$J$$$N$G!"JQ$@$H;W$C$?$i86J8$r;2>H$N$3$H\e(B :-p)\e$B!#$9$0$K$=\e(B
\e$B$l$O?@7P%$%s%?!<%U%'!<%9>e$K\e(B Lisp \e$B<0$r%?%$%W$9$k$h$&$K<+A3$J$3$H$K$J$j$^\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
+
\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%k!<%W$KAw$k$3$H$,$G$-$^$9!#\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%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
\e$B$H\e(B @emph{spam \e$B%H%l!<%K%s%0\e(B} \e$B%0%k!<%W$KAw$k$3$H$,$G$-$^$9!#\e(B
@cindex spam configuration examples
@cindex spam
-@emph{TODO}: \e$BF|:";H$&$?$a$N@bL@IU$-$G@_DjNc$r2C$($k!#\e(B
+@subsubheading Ted's setup
+
+From Ted Zlatanov <tzz@@lifelogs.com>.
+@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 <reiner.steib@@gmx.de>.
+
+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 <reiner.steib@@gmx.de>.
+
+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 \e$B%V%i%C%/%j%9%H$H%[%o%$%H%j%9%H\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))
+ (const :tag "Spam: Blackbox" (spam spam-use-blackbox))
+ (const :tag "Ham: Blackbox" (ham spam-use-blackbox))
@end example
\e$B$r2C$($F2<$5$$!#$=$l$r%Q%i%a!<%?$HJQ?t$N%+%9%?%^%$%:$NFs2s$K$D$$$F9T$J$&\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)
+ (variable-item spam-use-blackbox)
@end example
\e$B$r2C$($F2<$5$$!#\e(B
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
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.
@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.
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.
@cindex spam configuration examples
@cindex spam
-@emph{TODO}: add configuration examples with explanations of daily usage
+@subsubheading Ted's setup
+
+From Ted Zlatanov <tzz@@lifelogs.com>.
+@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 <reiner.steib@@gmx.de>.
+
+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 <reiner.steib@@gmx.de>.
+
+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
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
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
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}.