* Hard Picons:: The way you should do it. You'll learn something.
* Picon Useless Configuration:: Other variables you can trash/tweak/munge/play with.
+Thwarting Email Spam
+
+* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
+* SpamAssassin:: How to use external anti-spam tools.
+* Hashcash:: Reduce spam by burning CPU time.
+
Appendices
* XEmacs:: Requirements for installing under XEmacs.
(cond (window-system
(setq custom-background-mode 'light)
(defface my-group-face-1
- '((t (:foreground "Red" :bold t))) "First group face")
+ '((t (:foreground "Red" :bold t))) "First group face")
(defface my-group-face-2
- '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
+ '((t (:foreground "DarkSeaGreen4" :bold t))) "Second group face")
(defface my-group-face-3
- '((t (:foreground "Green4" :bold t))) "Third group face")
+ '((t (:foreground "Green4" :bold t))) "Third group face")
(defface my-group-face-4
- '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
+ '((t (:foreground "SteelBlue" :bold t))) "Fourth group face")
(defface my-group-face-5
- '((t (:foreground "Blue" :bold t))) "Fifth group face")))
+ '((t (:foreground "Blue" :bold t))) "Fifth group face")))
(setq gnus-group-highlight
'(((> unread 200) . my-group-face-1)
@item G w
@kindex G w (Group)
@findex gnus-group-make-web-group
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
+@cindex Google
@cindex nnweb
+@cindex gmane
Make an ephemeral group based on a web search
(@code{gnus-group-make-web-group}). If you give a prefix to this
command, make a solid group instead. You will be prompted for the
search engine type and the search string. Valid search engine types
-include @code{dejanews}, @code{altavista} and @code{reference}.
+include @code{google}, @code{dejanews}, and @code{gmane}.
@xref{Web Searches}.
-If you use the @code{dejanews} search engine, you can limit the search
+If you use the @code{google} search engine, you can limit the search
to a particular group by using a match string like
-@samp{~g alt.sysadmin.recovery shaving}.
+@samp{shaving group:alt.sysadmin.recovery}.
@item G DEL
@kindex G DEL (Group)
@cindex subscribed
If this parameter is set to @code{t}, Gnus will consider the
to-address and to-list parameters for this group as addresses of
-mailing lists you are subscribed to. Giving Gnus this information
-will help it to generate correct Mail-Followup-To headers for your
-posts to these lists.
+mailing lists you are subscribed to. Giving Gnus this information is
+(only) a first step in getting it to generate correct Mail-Followup-To
+headers for your posts to these lists. Look here @pxref{(message)Mailing
+Lists} for a complete treatment of available MFT support.
See also @code{gnus-find-subscribed-addresses}, the function that
directly uses this group parameter.
Sort the groups alphabetically by back end name
(@code{gnus-group-sort-selected-groups-by-method}).
+@item G P s
+@kindex G P s (Group)
+@findex gnus-group-sort-selected-groups
+Sort the groups according to @code{gnus-group-sort-function}.
+
@end table
And finally, note that you can use @kbd{C-k} and @kbd{C-y} to manually
Sort the current topic alphabetically by server name
(@code{gnus-topic-sort-groups-by-server}).
+@item T S s
+@kindex T S s
+@findex gnus-topic-sort-groups
+Sort the current topic according to the function(s) given by the
+@code{gnus-group-sort-function} variable
+(@code{gnus-topic-sort-groups}).
+
@end table
-@xref{Sorting Groups}, for more information about group sorting.
+When given a prefix argument, all these commands will sort in reverse
+order. @xref{Sorting Groups}, for more information about group
+sorting.
@node Topic Topology
@example
if address "sender" "owner-ding@@hpc.uh.edu" @{
- fileinto "INBOX.ding";
- stop;
+ fileinto "INBOX.ding";
+ stop;
@}
@end example
@code{gnus-goto-colon} which does whatever you like with the cursor.)
@xref{Positioning Point}.
-The default string is @samp{%U%R%z%I%(%[%4L: %-23,23n%]%) %s\n}.
+The default string is @samp{%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n}.
The following format specification characters and extended format
specification(s) are understood:
@item n
The name (from the @code{From} header).
@item f
-The name, code @code{To} header or the @code{Newsgroups} header
-(@pxref{To From Newsgroups}).
+The name, @code{To} header or the @code{Newsgroups} header (@pxref{To
+From Newsgroups}).
@item a
The name (from the @code{From} header). This differs from the @code{n}
spec in that it uses the function designated by the
A related variable is @code{nnmail-extra-headers}, which controls when
to include extra headers when generating overview (@sc{nov}) files. If
you have old overview files, you should regenerate them after changing
-this variable.
+this variable, by entering the server buffer using `^', and then `g' on
+the appropriate mail server (e.g. nnml) to cause regeneration.
@vindex gnus-summary-line-format
You also have to instruct Gnus to display the data by changing the
(The values listed above are the default values in Gnus. Alter them
to fit your needs.)
-Now, this is mostly useful for mail groups, where you have control over
+A note for news server administrators, or for users who wish to try to
+convince their news server administrator to provide some additional
+support:
+
+The above is mostly useful for mail groups, where you have control over
the @sc{nov} files that are created. However, if you can persuade your
-nntp admin to add:
+nntp admin to add (in the usual implementation, notably INN):
@example
Newsgroups:full
goes out to all people listed in the @code{To}, @code{From} (or
@code{Reply-to}) and @code{Cc} headers.
-@item S V
-@kindex S V (Summary)
+@item S W
+@kindex S W (Summary)
@findex gnus-summary-wide-reply-with-original
Mail a wide reply to the current article and include the original
message (@code{gnus-summary-wide-reply-with-original}). This command uses
@code{Reply-to}) and @code{Cc} headers in all the process/prefixed
articles. This command uses the process/prefix convention.
+@item S V
+@kindex S V (Summary)
+@findex gnus-summary-very-wide-reply-with-original
+Mail a very wide reply to the author of the current article and include the
+original message (@code{gnus-summary-very-wide-reply-with-original}). This
+command uses the process/prefix convention.
+
@item S o m
@itemx C-c C-f
@kindex S o m (Summary)
@item / p
@kindex / p (Summary)
-@findex gnus-summary-limit-to-display-parameter
+@findex gnus-summary-limit-to-display-predicate
Limit the summary buffer to articles that satisfy the @code{display}
group parameter predicate
-(@code{gnus-summary-limit-to-display-parameter}). See @pxref{Group
+(@code{gnus-summary-limit-to-display-predicate}). See @pxref{Group
Parameters} for more on this predicate.
@item / E
@item gnus-simplify-whitespace
@findex gnus-simplify-whitespace
Remove excessive whitespace.
+
+@item gnus-simplify-all-whitespace
+@findex gnus-simplify-all-whitespace
+Remove all whitespace.
@end table
You may also write your own functions, of course.
@item T n
@kindex T n (Summary)
-@itemx C-M-n
+@itemx C-M-f
@kindex C-M-n (Summary)
@itemx M-down
@kindex M-down (Summary)
@item T p
@kindex T p (Summary)
-@itemx C-M-p
+@itemx C-M-b
@kindex C-M-p (Summary)
@itemx M-up
@kindex M-up (Summary)
approach (uudecoding, unsharing) you should use @code{gnus-uu}
(@pxref{Decoding Articles}).
+For the commands listed here, the target is a file. If you want to
+save to a group, see the @kbd{B c} (@code{gnus-summary-copy-article})
+command (@pxref{Mail Group Commands}).
+
@vindex gnus-save-all-headers
If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
unwanted headers before saving the article.
@item W v
@kindex W v (Summary)
-@findex gnus-summary-verbose-header
+@findex gnus-summary-verbose-headers
Toggle whether to display all headers in the article buffer permanently
-(@code{gnus-summary-verbose-header}).
+(@code{gnus-summary-verbose-headers}).
@item W o
@kindex W o (Summary)
like @code{\222} or @code{\264} where you're expecting some kind of
apostrophe or quotation mark, then try this wash.
+@item W k
+@kindex W k (Summary)
+@findex gnus-article-outlook-deuglify-article
+@cindex Outlook Express
+Deuglify broken Outlook (Express) articles and redisplay
+(@code{gnus-article-outlook-deuglify-article}).
+
@item W w
@kindex W w (Summary)
@findex gnus-article-fill-cited-article
Quoted-Printable is one common @sc{mime} encoding employed when sending
non-ASCII (i. e., 8-bit) articles. It typically makes strings like
@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me. Note that the this is usually done automatically by
+readable to me. Note that this is usually done automatically by
Gnus if the message in question has a @code{Content-Transfer-Encoding}
header that says that this encoding has been done.
If a prefix is given, a charset will be asked for.
@findex gnus-article-de-base64-unreadable
Treat base64 (@code{gnus-article-de-base64-unreadable}).
Base64 is one common @sc{mime} encoding employed when sending non-ASCII
-(i. e., 8-bit) articles. Note that the this is usually done
+(i. e., 8-bit) articles. Note that this is usually done
automatically by Gnus if the message in question has a
@code{Content-Transfer-Encoding} header that says that this encoding has
been done.
@item W h
@kindex W h (Summary)
@findex gnus-article-wash-html
-Treat @sc{html} (@code{gnus-article-wash-html}). Note that the this is
+Treat @sc{html} (@code{gnus-article-wash-html}). Note that this is
usually done automatically by Gnus if the message in question has a
@code{Content-Type} header that says that the message is @sc{html}.
If a prefix is given, a charset will be asked for.
@vindex gnus-article-wash-function
-The default is to use w3 to convert the @sc{html}, but this is
-controlled by the @code{gnus-article-wash-function} variable.
-Pre-defined functions you can use include:
+The default is to use the function specified by
+@code{mm-inline-text-html-renderer} (@pxref{Customization, , , emacs-mime})
+to convert the @sc{html}, but this is controlled by the
+@code{gnus-article-wash-function} variable. Pre-defined functions you
+can use include:
@table @code
-@item gnus-article-wash-html-with-w3
-@findex gnus-article-wash-html-with-w3
-Use w3 (this is the default).
+@item w3
+Use Emacs/w3.
-@item gnus-article-wash-html-with-w3m
-@findex gnus-article-wash-html-with-w3m
+@item w3m
Use emacs-w3m (see @uref{http://emacs-w3m.namazu.org/} for more
information).
+
+@item links
+Use Links (see @uref{http://artax.karlin.mff.cuni.cz/~mikulas/links/}).
+
+@item lynx
+Use Lynx (see @uref{http://lynx.browser.org/}).
+
+@item html2text
+Use html2text -- a simple @sc{html} converter included with Gnus.
+
@end table
@item W b
Verify a signed (PGP, @sc{pgp/mime} or @sc{s/mime}) message
(@code{gnus-summary-force-verify-and-decrypt}). @xref{Security}.
-@item W W H
-@kindex W W H (Summary)
-@findex gnus-article-strip-headers-from-body
+@item W a
+@kindex W a (Summary)
+@findex gnus-article-strip-headers-in-body
Strip headers like the @code{X-No-Archive} header from the beginning of
-article bodies (@code{gnus-article-strip-headers-from-body}).
+article bodies (@code{gnus-article-strip-headers-in-body}).
@item W E l
@kindex W E l (Summary)
Fold all the message headers
(@code{gnus-article-treat-fold-headers}).
+@item W E w
+@kindex W E w
+@findex gnus-article-remove-leading-whitespace
+Remove excessive whitespace from all headers
+(@code{gnus-article-remove-leading-whitespace}).
+
@end table
@item regexp
All text that match this regular expression will be considered an
external reference. Here's a typical regexp that matches embedded URLs:
-@samp{<URL:\\([^\n\r>]*\\)>}.
+@samp{<URL:\\([^\n\r>]*\\)>}. This can also be a variable containing a
+regexp, useful variables to use include @code{gnus-button-url-regexp}.
@item button-par
Gnus has to know which parts of the matches is to be highlighted. This
@item W D s
@kindex W D s (Summary)
-@findex gnus-smiley-smiley
+@findex gnus-treat-smiley
Display smileys (@code{gnus-treat-smiley}).
@item W D f
@kindex W D n (Summary)
@findex gnus-treat-newsgroups-picon
Piconify all news headers (i. e., @code{Newsgroups} and
-@code{Followup-To}) (@code{gnus-treat-from-picon}).
+@code{Followup-To}) (@code{gnus-treat-newsgroups-picon}).
@item W D D
@kindex W D D (Summary)
@node MIME Commands
-@section @sc{mime} Commands
+@section MIME Commands
@cindex MIME decoding
@cindex attachments
@cindex viewing attachments
match.
Here's an example setting that will first try the current method, and
-then ask Deja if that fails:
+then ask Google if that fails:
@lisp
(setq gnus-refer-article-method
'(current
- (nnweb "refer" (nnweb-type dejanews))))
+ (nnweb "refer" (nnweb-type google))))
@end lisp
Most of the mail back ends support fetching by @code{Message-ID}, but
@vindex gnus-preserve-marks
Move the article from one mail group to another
(@code{gnus-summary-move-article}). Marks will be preserved if
-@var{gnus-preserve-marks} is non-@code{nil} (which is the default).
+@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
@item B c
@kindex B c (Summary)
@c @icon{gnus-summary-mail-copy}
Copy the article from one group (mail group or not) to a mail group
(@code{gnus-summary-copy-article}). Marks will be preserved if
-@var{gnus-preserve-marks} is non-@code{nil} (which is the default).
+@code{gnus-preserve-marks} is non-@code{nil} (which is the default).
@item B B
@kindex B B (Summary)
(@code{gnus-summary-import-article}). You will be prompted for a file
name, a @code{From} header and a @code{Subject} header.
+@item B I
+@kindex B I (Summary)
+@findex gnus-summary-create-article
+Create an empty article in the current mail newsgroups
+(@code{gnus-summary-create-article}). You will be prompted for a
+@code{From} header and a @code{Subject} header.
+
@item B r
@kindex B r (Summary)
@findex gnus-summary-respool-article
@code{gnus-summary-respool-default-method} will be used as the default
select method when respooling. This variable is @code{nil} by default,
which means that the current group select method will be used instead.
-Marks will be preserved if @var{gnus-preserve-marks} is non-@code{nil}
+Marks will be preserved if @code{gnus-preserve-marks} is non-@code{nil}
(which is the default).
@item B w
@kindex e (Summary)
@findex gnus-summary-edit-article
@kindex C-c C-c (Article)
+@findex gnus-summary-edit-article-done
Edit the current article (@code{gnus-summary-edit-article}). To finish
editing and make the changes permanent, type @kbd{C-c C-c}
-(@kbd{gnus-summary-edit-article-done}). If you give a prefix to the
+(@code{gnus-summary-edit-article-done}). If you give a prefix to the
@kbd{C-c C-c} command, Gnus won't re-highlight the article.
@item B q
propagation is much faster than news propagation, and the news copy may
just not have arrived yet.
+@item K E
+@kindex K E (Summary)
+@findex gnus-article-encrypt-body
+@vindex gnus-article-encrypt-protocol
+Encrypt the body of an article (@code{gnus-article-encrypt-body}).
+The body is encrypted with the encryption protocol specified by the
+variable @code{gnus-article-encrypt-protocol}.
+
@end table
@vindex gnus-move-split-methods
(setq gnus-newsgroup-variables
'(message-use-followup-to
(gnus-visible-headers .
- "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
+ "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^To:")))
@end lisp
@end table
@node Mailing List
@section Mailing List
+@kindex A M (summary)
+@findex gnus-mailing-list-insinuate
Gnus understands some mailing list fields of RFC 2369. To enable it,
either add a `to-list' group parameter (@pxref{Group Parameters}),
-possibly using @kbd{A M} in the summary buffer, or say:
+possibly using @kbd{A M} (@code{gnus-mailing-list-insinuate}) in the
+summary buffer, or say:
@lisp
(add-hook 'gnus-summary-mode-hook 'turn-on-gnus-mailing-list-mode)
@item gnus-treat-unfold-headers (head)
@item gnus-treat-fold-headers (head)
@item gnus-treat-fold-newsgroups (head)
+@item gnus-treat-leading-whitespace (head)
+@xref{Article Header}.
@end table
If non-@code{nil}, add a @code{to-list} group parameter to mail groups
that have none when you do a @kbd{a}.
+@item gnus-confirm-mail-reply-to-news
+@vindex gnus-confirm-mail-reply-to-news
+If non-@code{nil}, Gnus requests confirmation when replying to news.
+If you find yourself never wanting to reply to mail, but occasionally
+press R anyway, this variable might be for you.
+
@end table
@code{gnus-message-archive-group} variable should be @code{nil}, which
is the default.
+For archiving interesting messages in a group you read, see the
+@kbd{B c} (@code{gnus-summary-copy-article}) command (@pxref{Mail
+Group Commands}).
+
@vindex gnus-message-archive-method
@code{gnus-message-archive-method} says what virtual server Gnus is to
use to store sent messages. The default is:
(window-system ;; A value symbol
("X-Window-System" (format "%s" window-system)))
;; If I'm replying to Larsi, set the Organization header.
- ((header "to" "larsi.*org")
+ ((header "from" "larsi.*org")
(Organization "Somewhere, Inc."))
((posting-from-work-p) ;; A user defined function
(signature-file "~/.work-signature")
@sc{Mailcrypt}, you need to install at least one of them. The
@sc{s/mime} support in Gnus requires the external program OpenSSL.
+Often, you would like to sign replies to people who send you signed
+messages. Even more often, you might want to encrypt messages which
+are in reply to encrypted messages. Gnus offers
+@code{gnus-message-replysign} to enable the former, and
+@code{gnus-message-replyencrypt} for the latter. In addition, setting
+@code{gnus-message-replysignencrypted} (on by default) will sign
+automatically encrypted messages.
+
Instructing MML to perform security operations on a @sc{mime} part is
done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c
C-m c} key map for encryption, as follows.
@item C-c C-m s s
@kindex C-c C-m s s
-@findex mml-secure-sign-smime
+@findex mml-secure-message-sign-smime
-Digitally sign current @sc{mime} part using @sc{s/mime}.
+Digitally sign current message using @sc{s/mime}.
@item C-c C-m s o
@kindex C-c C-m s o
-@findex mml-secure-sign-pgp
+@findex mml-secure-message-sign-pgp
-Digitally sign current @sc{mime} part using PGP.
+Digitally sign current message using PGP.
@item C-c C-m s p
@kindex C-c C-m s p
-@findex mml-secure-sign-pgp
+@findex mml-secure-message-sign-pgp
-Digitally sign current @sc{mime} part using @sc{pgp/mime}.
+Digitally sign current message using @sc{pgp/mime}.
@item C-c C-m c s
@kindex C-c C-m c s
-@findex mml-secure-encrypt-smime
+@findex mml-secure-message-encrypt-smime
-Digitally encrypt current @sc{mime} part using @sc{s/mime}.
+Digitally encrypt current message using @sc{s/mime}.
@item C-c C-m c o
@kindex C-c C-m c o
-@findex mml-secure-encrypt-pgp
+@findex mml-secure-message-encrypt-pgp
-Digitally encrypt current @sc{mime} part using PGP.
+Digitally encrypt current message using PGP.
@item C-c C-m c p
@kindex C-c C-m c p
-@findex mml-secure-encrypt-pgpmime
+@findex mml-secure-message-encrypt-pgpmime
+
+Digitally encrypt current message using @sc{pgp/mime}.
-Digitally encrypt current @sc{mime} part using @sc{pgp/mime}.
+@item C-c C-m C-n
+@kindex C-c C-m C-n
+@findex mml-unsecure-message
+Remove security related MML tags from message.
@end table
(nntp-via-rlogin-command "ssh")
@end lisp
+See also @code{nntp-via-rlogin-command-switches}.
+
If you're behind a firewall, but have direct access to the outside world
through a wrapper command like "runsocks", you could open a socksified
telnet connection to the news server as follows:
Remove all marks to whether Gnus was denied connection from any servers
(@code{gnus-server-remove-denials}).
+@item L
+@kindex L (Server)
+@findex gnus-server-offline-server
+Set server status to offline (@code{gnus-server-offline-server}).
+
@end table
@node NNTP
-@subsection @sc{nntp}
+@subsection NNTP
@cindex nntp
Subscribing to a foreign group from an @sc{nntp} server is rather easy.
@vindex nntp-via-rlogin-command
Command used to log in on the intermediate host. The default is
@samp{rsh}, but @samp{ssh} is a popular alternative.
+
+@item nntp-via-rlogin-command-switches
+@vindex nntp-via-rlogin-command-switches
+List of strings to be used as the switches to
+@code{nntp-via-rlogin-command}. The default is @code{nil}. If you use
+@samp{ssh} for `nntp-via-rlogin-command', you may set this to
+@samp{("-C")} in order to compress all data connections, otherwise set
+this to @samp{("-t")} or @samp{("-C" "-t")} if the telnet command
+requires a pseudo-tty allocation on an intermediate host.
@end table
@item nntp-open-via-telnet-and-telnet
@code{nnmail-split-header-length-limit} are excluded from the split
function.
+@vindex nnmail-mail-splitting-charset
+@vindex nnmail-mail-splitting-decodes
+By default the splitting codes MIME decodes headers so you can match
+on non-ASCII strings. The @code{nnmail-mail-splitting-charset}
+variable specifies the default charset for decoding. The behaviour
+can be turned off completely by binding
+@code{nnmail-mail-splitting-decodes} to nil, which is useful if you
+want to match articles based on the raw header data.
+
Gnus gives you all the opportunity you could possibly want for shooting
yourself in the foot. Let's say you create a group that will contain
all the mail you get from your boss. And then you accidentally
@item webmail
Get mail from a webmail server, such as @uref{www.hotmail.com},
@uref{webmail.netscape.com}, @uref{www.netaddress.com},
-@uref{www.my-deja.com}.
-
-NOTE: Now @uref{mail.yahoo.com} provides POP3 service, so @sc{pop} mail source
-is suggested.
+@uref{mail.yahoo..com}.
NOTE: Webmail largely depends cookies. A "one-line-cookie" patch is
required for url "4.0pre.46".
-WARNING: Mails may lost. NO WARRANTY.
+WARNING: Mails may be lost. NO WARRANTY.
Keywords:
the back end (via @code{Gcc}, for instance) into the mail duplication
discovery cache. The default is @code{nil}.
+@item nnmail-cache-ignore-groups
+@vindex nnmail-cache-ignore-groups
+This can be a regular expression or a list of regular expressions.
+Group names that match any of the regular expressions will never be
+recorded in the @code{Message-ID} cache.
+
+This can be useful, for example, when using Fancy Splitting
+(@pxref{Fancy Mail Splitting}) together with the function
+@code{nnmail-split-fancy-with-parent}.
+
@end table
you can include @code{nnmail-split-fancy-with-parent} using the colon
feature, like so:
@lisp
-(setq nnmail-split-fancy
+(setq nnmail-treat-duplicates 'warn ; or 'delete
+ nnmail-cache-accepted-message-ids t
+ nnmail-split-fancy
'(| (: nnmail-split-fancy-with-parent)
;; other splits go here
))
also records the message ids of moved articles, so that the followup
messages goes into the new group.
+Also see the variable @code{nnmail-cache-ignore-groups} if you don't
+want certain groups to be recorded in the cache. For example, if all
+outgoing messages are written to an `outgoing' group, you could set
+@code{nnmail-cache-ignore-groups} to match that group name.
+Otherwise, answers to all your messages would end up in the
+`outgoing' group.
+
@node Group Mail Splitting
@subsection Group Mail Splitting
splits like this:
@lisp
-(: gnus-mlsplt-fancy GROUPS NO-CROSSPOST CATCH-ALL)
+(: gnus-group-split-fancy GROUPS NO-CROSSPOST CATCH-ALL)
@end lisp
@var{groups} may be a regular expression or a list of group names whose
(setq nnmail-expiry-target 'nnmail-fancy-expiry-target
nnmail-fancy-expiry-targets
'((to-from "boss" "nnfolder:Work")
- ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
+ ("subject" "IMPORTANT" "nnfolder:IMPORTANT.%Y.%b")
("from" ".*" "nnfolder:Archive-%Y")))
@end lisp
Clear leading white space that ``helpful'' listservs have added to the
headers to make them look nice. Aaah.
+(Note that this function works on both the header on the body of all
+messages, so it is a potentially dangerous function to use (if a body
+of a message contains something that looks like a header line). So
+rather than fix the bug, it is of course the right solution to make it
+into a feature by documenting it.)
+
@item nnmail-remove-list-identifiers
@findex nnmail-remove-list-identifiers
Some list servers add an identifier---for example, @samp{(idm)}---to the
fastest back end when it comes to reading mail.
@cindex self contained nnml servers
+@cindex marks
When the marks file is used (which it is by default), @code{nnml}
servers have the property that you may backup them using @code{tar} or
similar, and later be able to restore them into Gnus (by adding the
dates.
@cindex self contained nnfolder servers
+@cindex marks
When the marks file is used (which it is by default), @code{nnfolder}
servers have the property that you may backup them using @code{tar} or
similar, and later be able to restore them into Gnus (by adding the
@node Web Searches
@subsection Web Searches
@cindex nnweb
-@cindex DejaNews
-@cindex Alta Vista
-@cindex InReference
+@cindex Google
+@cindex dejanews
+@cindex gmane
@cindex Usenet searches
@cindex searching the Usenet
manner. Not even using duplicate suppression (@pxref{Duplicate
Suppression}) will help, since @code{nnweb} doesn't even know the
@code{Message-ID} of the articles before reading them using some search
-engines (DejaNews, for instance). The only possible way to keep track
+engines (Google, for instance). The only possible way to keep track
of which articles you've read is by scoring on the @code{Date}
header---mark all articles posted before the last date you read the
group as read.
@item nnweb-type
@vindex nnweb-type
What search engine type is being used. The currently supported types
-are @code{dejanews}, @code{dejanewsold}, @code{altavista} and
-@code{reference}.
+are @code{google}, @code{dejanews}, and @code{gmane}. Note that
+@code{dejanews} is an alias to @code{google}.
@item nnweb-search
@vindex nnweb-search
@item nnweb-max-hits
@vindex nnweb-max-hits
Advisory maximum number of hits per search to display. The default is
-100.
+999.
@item nnweb-type-definition
@vindex nnweb-type-definition
(defun gnus-user-format-function-X (header)
(let ((descr
- (assq nnrss-description-field (mail-header-extra header))))
+ (assq nnrss-description-field (mail-header-extra header))))
(if descr (concat "\n\t" (cdr descr)) "")))
@end lisp
@node IMAP
-@section @sc{imap}
+@section IMAP
@cindex nnimap
@cindex @sc{imap}
@dfn{kerberos4:} Connect with Kerberos 4. Requires the @samp{imtest} program.
@item
@dfn{starttls:} Connect via the STARTTLS extension (similar to
-SSL)@. Requires the external library @samp{starttls.el} and program
+SSL). Requires the external library @samp{starttls.el} and program
@samp{starttls}.
@item
-@dfn{ssl:} Connect through SSL@. Requires OpenSSL (the program
+@dfn{ssl:} Connect through SSL. Requires OpenSSL (the program
@samp{openssl}) or SSLeay (@samp{s_client}) as well as the external
library @samp{ssl.el}.
@item
doesn't exist actually does exist. More specifically, @sc{imap} has
this concept of marking articles @code{Deleted} which doesn't actually
delete them, and this (marking them @code{Deleted}, that is) is what
-nnimap does when you delete a article in Gnus (with @kbd{G DEL} or
+nnimap does when you delete a article in Gnus (with @kbd{B DEL} or
similar).
Since the articles aren't really removed when we mark them with the
@item nnimap-importantize-dormant
@vindex nnimap-importantize-dormant
-If non-nil, marks dormant articles as ticked (as well), for other
-@sc{imap} clients. Within Gnus, dormant articles will naturally still
-(only) be marked as ticked. This is to make dormant articles stand
-out, just like ticked articles, in other @sc{imap} clients. (In other
-words, Gnus has two ``Tick'' marks and @sc{imap} has only one.)
+If non-nil (the default), marks dormant articles as ticked (as well),
+for other @sc{imap} clients. Within Gnus, dormant articles will
+naturally still (only) be marked as dormant. This is to make dormant
+articles stand out, just like ticked articles, in other @sc{imap}
+clients. (In other words, Gnus has two ``Tick'' marks and @sc{imap}
+has only one.)
Probably the only reason for frobing this would be if you're trying
enable per-user persistant dormant flags, using something like:
@node Splitting in IMAP
-@subsection Splitting in @sc{imap}
+@subsection Splitting in IMAP
@cindex splitting imap mail
Splitting is something Gnus users has loved and used for years, and now
@end table
@node Editing IMAP ACLs
-@subsection Editing @sc{imap} ACLs
+@subsection Editing IMAP ACLs
@cindex editing imap acls
@cindex Access Control Lists
@cindex Editing @sc{imap} ACLs
@node SOUP Groups
-@subsubsection @sc{soup} Groups
+@subsubsection SOUP Groups
@cindex nnsoup
@code{nnsoup} is the back end for reading @sc{soup} packets. It will
Newsgroups: alt.religion.emacs
@end example
-will get this @code{From} header inserted:
+will get this @code{To} header inserted:
@example
To: alt-religion-emacs@@GATEWAY
(require 'gnus-agent)
(setq gnus-category-predicate-alist
(append gnus-category-predicate-alist
- '((old . my-article-old-p))))
+ '((old . my-article-old-p))))
@end lisp
and simply specify your predicate as:
Display all score rules that have been used on the current article
(@code{gnus-score-find-trace}).
+@item V w
+@kindex V w (Summary)
+@findex gnus-score-find-favourite-words
+List words used in scoring (@code{gnus-score-find-favourite-words}).
+
@item V R
@kindex V R (Summary)
@findex gnus-summary-rescore
This is annoying.
-The way to deal with this is having Gnus split out all spam into a
+@menu
+* Anti-Spam Basics:: Simple steps to reduce the amount of spam.
+* SpamAssassin:: How to use external anti-spam tools.
+* Hashcash:: Reduce spam by burning CPU time.
+@end menu
+
+@node Anti-Spam Basics
+@subsection Anti-Spam Basics
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+One way of dealing with spam is having Gnus split out all spam into a
@samp{spam} mail group (@pxref{Splitting Mail}).
First, pick one (1) valid mail address that you can be reached at, and
to non-existent domains is yucky, in my opinion.
+
+@node SpamAssassin
+@subsection SpamAssassin, Vipul's Razor, DCC, etc
+@cindex SpamAssassin
+@cindex Vipul's Razor
+@cindex DCC
+
+The days where the hints in the previous section was sufficient in
+avoiding spam is coming to an end. There are many tools out there
+that claim to reduce the amount of spam you get. This section could
+easily become outdated fast, as new products replace old, but
+fortunately most of these tools seem to have similar interfaces. Even
+though this section will use SpamAssassin as an example, it should be
+easy to adapt it to most other tools.
+
+If the tool you are using is not installed on the mail server, you
+need to invoke it yourself. Ideas on how to use the
+@code{:postscript} mail source parameter (@pxref{Mail Source
+Specifiers}) follows.
+
+@lisp
+(setq mail-sources
+ '((file :prescript "formail -bs spamassassin < /var/mail/%u")
+ (pop :user "jrl"
+ :server "pophost"
+ :postscript "mv %t /tmp/foo; formail -bs spamc < /tmp/foo > %t")))
+@end lisp
+
+Once you managed to process your incoming spool somehow, thus making
+the mail contain e.g. a header indicating it is spam, you are ready to
+filter it out. Using normal split methods (@pxref{Splitting Mail}):
+
+@lisp
+(setq nnmail-split-methods '(("spam" "^X-Spam-Flag: YES")
+ ...))
+@end lisp
+
+Or using fancy split methods (@pxref{Fancy Mail Splitting}):
+
+@lisp
+(setq nnmail-split-methods 'nnmail-split-fancy
+ nnmail-split-fancy '(| ("X-Spam-Flag" "YES" "spam")
+ ...))
+@end lisp
+
+Some people might not like the idea of piping the mail through various
+programs using a @code{:prescript} (if some program is buggy, you
+might lose all mail). If you are one of them, another solution is to
+call the external tools during splitting. Example fancy split method:
+
+@lisp
+(setq nnmail-split-fancy '(| (: kevin-spamassassin)
+ ...))
+(defun kevin-spamassassin ()
+ (save-excursion
+ (let ((buf (or (get-buffer " *nnmail incoming*")
+ (get-buffer " *nnml move*"))))
+ (if (not buf)
+ (progn (message "Oops, cannot find message buffer") nil)
+ (set-buffer buf)
+ (if (eq 1 (call-process-region (point-min) (point-max)
+ "spamc" nil nil nil "-c"))
+ "spam")))))
+@end lisp
+
+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
+spam. And here is the nifty function:
+
+@lisp
+ (defun my-gnus-raze-spam ()
+ "Submit SPAM to Vipul's Razor, then mark it as expirable."
+ (interactive)
+ (gnus-summary-show-raw-article)
+ (gnus-summary-save-in-pipe "razor-report -f -d")
+ (gnus-summary-mark-as-expirable 1))
+@end lisp
+
+@node Hashcash
+@subsection Hashcash
+@cindex hashcash
+
+A novel technique to fight spam is to require senders to do something
+costly for each message they send. This has the obvious drawback that
+you cannot rely on that everyone in the world uses this technique,
+since it is not part of the internet standards, but it may be useful
+in smaller communities.
+
+While the tools in the previous section work well in practice, they
+work only because the tools are constantly maintained and updated as
+new form of spam appears. This means that a small percentage of spam
+will always get through. It also means that somewhere, someone needs
+to read lots of spam to update these tools. Hashcash avoids that, but
+instead requires that everyone you communicate with supports the
+scheme. You can view the two approaches as pragmatic vs dogmatic.
+The approaches have their own advantages and disadvantages, but as
+often in the real world, a combination of them is stronger than either
+one of them separately.
+
+@cindex X-Hashcash
+The ``something costly'' is to burn CPU time, more specifically to
+compute a hash collision up to a certain number of bits. The
+resulting hashcash cookie is inserted in a @samp{X-Hashcash:}
+header. For more details, and for the external application
+@code{hashcash} you need to install to use this feature, see
+@uref{http://www.cypherspace.org/~adam/hashcash/}. Even more
+information can be found at @uref{http://www.camram.org/}.
+
+If you wish to call hashcash for each message you send, say something
+like:
+
+@lisp
+(require 'hashcash)
+(add-hook 'message-send-hook 'mail-add-payment)
+@end lisp
+
+The @code{hashcash.el} library can be found at
+@uref{http://users.actrix.gen.nz/mycroft/hashcash.el}, or in the Gnus
+development contrib directory.
+
+You will need to set up some additional variables as well:
+
+@table @code
+
+@item hashcash-default-payment
+@vindex hashcash-default-payment
+This variable indicates the default number of bits the hash collision
+should consist of. By default this is 0, meaning nothing will be
+done. Suggested useful values include 17 to 29.
+
+@item hashcash-payment-alist
+@vindex hashcash-payment-alist
+Some receivers may require you to spend burn more CPU time than the
+default. This variable contains a list of @samp{(ADDR AMOUNT)} cells,
+where ADDR is the receiver (email address or newsgroup) and AMOUNT is
+the number of bits in the collision that is needed. It can also
+contain @samp{(ADDR STRING AMOUNT)} cells, where the STRING is the
+string to use (normally the email address or newsgroup name is used).
+
+@item hashcash
+@vindex hashcash
+Where the @code{hashcash} binary is installed.
+
+@end table
+
+Currently there is no built in functionality in Gnus to verify
+hashcash cookies, it is expected that this is performed by your hand
+customized mail filtering scripts. Improvements in this area would be
+a useful contribution, however.
+
@node Various Various
@section Various Various
@cindex mode lines
@lisp
(setq mail-sources
'((directory :path "~/mail/incoming/"
- :suffix ".in")))
+ :suffix ".in")))
@end lisp
More information is available in the info doc at Select Methods ->
@node Slow/Expensive Connection
-@subsection Slow/Expensive @sc{nntp} Connection
+@subsection Slow/Expensive NNTP Connection
If you run Emacs on a machine locally, and get your news from a machine
over some very thin strings, you want to cut down on the amount of data