\makeindex
\begin{document}
-\newcommand{\gnusversionname}{Gnus v5.10.4}
+\newcommand{\gnusversionname}{Gnus v5.10.6}
\newcommand{\gnuschaptername}{}
\newcommand{\gnussectionname}{}
\thispagestyle{empty}
Copyright \copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003
+2002, 2003, 2004
Free Software Foundation, Inc.
This file documents Gnus, the GNU Emacs newsreader.
-Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
@vskip 0pt plus 1filll
Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003
+2002, 2003, 2004
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
spool or your mbox file. All at the same time, if you want to push your
luck.
-This manual corresponds to Gnus v5.10.4.
+This manual corresponds to Gnus v5.10.6.
@end ifinfo
* Emacs-MIME:(emacs-mime). Composing messages; @acronym{MIME}-specific parts.
* Sieve:(sieve). Managing Sieve scripts in Emacs.
* PGG:(pgg). @acronym{PGP/MIME} with Gnus.
+* SASL:(sasl). @acronym{SASL} authentication in Emacs.
@detailmenu
--- The Detailed Node Listing ---
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
* Oort Gnus:: It's big. It's far out. Gnus 5.10.
+* No Gnus:: Lars, FIXME!
Customization
This command understands the process/prefix convention
(@pxref{Process/Prefix}).
+@item S D e
+@kindex S D e (Summary)
+@findex gnus-summary-resend-message-edit
+
+Like the previous command, but will allow you to edit the message as
+if it were a new message before resending.
+
@item S O m
@kindex S O m (Summary)
@findex gnus-uu-digest-mail-forward
(@code{gnus-summary-limit-to-display-predicate}). @xref{Group
Parameters}, for more on this predicate.
+@item / r
+@kindex / r (Summary)
+@findex gnus-summary-limit-to-replied
+Limit the summary buffer to replied articles
+(@code{gnus-summary-limit-to-replied}). If given a prefix, exclude
+replied articles.
+
@item / E
@itemx M S
@kindex M S (Summary)
common encoding employed when sending Chinese articles. It typically
makes strings look like @samp{~@{<:Ky2;S@{#,NpJ)l6HK!#~@}}.
+@item W A
+@kindex W A (Summary)
+@findex gnus-article-treat-ansi-sequences
+Translate ANSI SGR control sequences into overlays or extents
+(@code{gnus-article-treat-ansi-sequences}). ANSI sequences are used in
+some Chinese hierarchies for highlighting.
+
@item W u
@kindex W u (Summary)
@findex gnus-article-unsplit-urls
@code{save-excursion} and @code{save-restriction} in the example
above. Also note that with the nnimap backend, message bodies will
not be downloaded by default. You need to set
-@code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
-IMAP}).
+@code{nnimap-split-download-body} to @code{t} to do that
+(@pxref{Splitting in IMAP}).
@item (! @var{func} @var{split})
If the split is a list, and the first element is @code{!}, then
@item gnus-agent-cat-length-when-long
an integer that overrides the value of @code{gnus-agent-long-article}.
-@item gnus-agent-cat-disable-undownloaded-faces
-a symbol indicating whether the summary buffer should @emph{not} display
+@c @item gnus-agent-cat-disable-undownloaded-faces
+@c a symbol indicating whether the summary buffer should @emph{not} display
+@c undownloaded articles using the gnus-summary-*-undownloaded-face
+@c faces. The symbol nil will enable the use of undownloaded faces while
+@c all other symbols disable them.
+
+@item gnus-agent-cat-enable-undownloaded-faces
+a symbol indicating whether the summary buffer should display
undownloaded articles using the gnus-summary-*-undownloaded-face
-faces. The symbol nil will enable the use of undownloaded faces while
-all other symbols disable them.
+faces. The symbol nil will disable the use of undownloaded faces while
+all other symbols enable them.
@end table
The name of a category can not be changed once the category has been
@table @kbd
+@item W e
+@kindex W e (Group)
+@findex gnus-score-edit-all-score
+Edit the apply-to-all-groups all.SCORE file. You will be popped into
+a @code{gnus-score-mode} buffer (@pxref{Score File Editing}).
+
@item W f
@kindex W f (Group)
@findex gnus-score-flush-cache
@include sieve.texi
@chapter PGG
@include pgg.texi
+@chapter SASL
+@include sasl.texi
@end iflatex
@end iftex
messages per day from @samp{random-address@@vmadmin.com}, you block
@samp{vmadmin.com}. If you get 200 messages about @samp{VIAGRA}, you
discard all messages with @samp{VIAGRA} in the message. If you get
-lots of spam from China, for example, you try to filter all mail from
-Chinese IPs.
+lots of spam from Elbonia, for example, you try to filter all mail
+from Elbonian IPs.
This, unfortunately, is a great way to discard legitimate e-mail. For
instance, the very informative and useful RISKS digest has been
Note that with the nnimap backend, message bodies will not be
downloaded by default. You need to set
-@code{nnimap-split-download-body} to t to do that (@pxref{Splitting in
-IMAP}).
+@code{nnimap-split-download-body} to @code{t} to do that
+(@pxref{Splitting in IMAP}).
That is about it. As some spam is likely to get through anyway, you
might want to have a nifty function to call when you happen to read
@code{ham-process-destination} or the @code{spam-process-destination}
depending on the article's classification. If the
@code{ham-process-destination} or the @code{spam-process-destination},
-whichever is appropriate, are nil, the article is left in the current
-group.
+whichever is appropriate, are @code{nil}, the article is left in the
+current group.
If a spam is found in any group (this can be changed to only non-spam
groups with @code{spam-move-spam-nonspam-groups-only}), it is
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 @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 a ham mail is found in a ham group, as determineed by the
+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.
@vindex spam-mark-only-unseen-as-spam
Set this variable if you want only unseen articles in spam groups to
-be marked as spam. By default, it is set. If you set it to nil,
-unread articles will also be marked as spam.
+be marked as spam. By default, it is set. If you set it to
+@code{nil}, unread articles will also be marked as 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
@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 @code{(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 this symbol to a group's @code{spam-process} parameter by
customizing the group parameter or the
@code{gnus-spam-process-newsgroups} variable. When this symbol is added
-to a grup's @code{spam-process} parameter, the ham-marked articles in
+to a group's @code{spam-process} parameter, the ham-marked articles in
@emph{ham} groups will be sent to the SpamOracle as samples of ham
messages. Note that this ham processor has no effect in @emph{spam} or
@emph{unclassified} groups.
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}.
@itemize @bullet
@item
-Emacs 20.7 and up.
+Emacs 21.1 and up.
@item
-XEmacs 21.1 and up.
+XEmacs 21.4 and up.
@end itemize
* Quassia Gnus:: Two times two is four, or Gnus 5.6/5.7.
* Pterodactyl Gnus:: Pentad also starts with P, AKA Gnus 5.8/5.9.
* Oort Gnus:: It's big. It's far out. Gnus 5.10.
+* No Gnus:: Lars, FIXME!
@end menu
These lists are, of course, just @emph{short} overviews of the
invalidate the digital signature.
@end itemize
+@node No Gnus
+@subsubsection No Gnus
+@cindex No Gnus
+
+New features in No Gnus:
+@c FIXME: Gnus 5.12?
+
+@include gnus-news.texi
+
@iftex
@page
@item
Try doing an @kbd{M-x gnus-version}. If you get something that looks
-like @samp{Gnus v5.10.4} you have the right files loaded. Otherwise
+like @samp{Gnus v5.10.6} you have the right files loaded. Otherwise
you have some old @file{.el} files lying around. Delete these.
@item