Add auth-source.
[bpt/emacs.git] / doc / emacs / rmail.texi
CommitLineData
6bf7aab6 1@c This is part of the Emacs manual.
b65d8176 2@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2001, 2002,
6ed161e1 3@c 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
6bf7aab6
DL
4@c See file emacs.texi for copying conditions.
5@node Rmail, Dired, Sending Mail, Top
6@chapter Reading Mail with Rmail
7@cindex Rmail
8@cindex reading mail
9@findex rmail
10@findex rmail-mode
11@vindex rmail-mode-hook
12
9dd617a6 13 Rmail is an Emacs subsystem for reading and disposing of mail that
49b5c0e8 14you receive. Rmail stores mail messages in files called Rmail files.
9d5de6f8 15Reading the messages in an Rmail file is done in a special major mode,
49b5c0e8 16Rmail mode, which redefines most letters to run commands for managing mail.
6bf7aab6
DL
17@menu
18* Basic: Rmail Basics. Basic concepts of Rmail, and simple use.
19* Scroll: Rmail Scrolling. Scrolling through a message.
20* Motion: Rmail Motion. Moving to another message.
21* Deletion: Rmail Deletion. Deleting and expunging messages.
22* Inbox: Rmail Inbox. How mail gets into the Rmail file.
23* Files: Rmail Files. Using multiple Rmail files.
9d5de6f8 24* Output: Rmail Output. Copying messages out to files.
6bf7aab6
DL
25* Labels: Rmail Labels. Classifying messages by labeling them.
26* Attrs: Rmail Attributes. Certain standard labels, called attributes.
27* Reply: Rmail Reply. Sending replies to messages you are viewing.
28* Summary: Rmail Summary. Summaries show brief info on many messages.
29* Sort: Rmail Sorting. Sorting messages in Rmail.
30* Display: Rmail Display. How Rmail displays a message; customization.
358f71fd 31* Coding: Rmail Coding. How Rmail handles decoding character sets.
6bf7aab6
DL
32* Editing: Rmail Editing. Editing message text and headers in Rmail.
33* Digest: Rmail Digest. Extracting the messages from a digest message.
6bf7aab6 34* Rot13: Rmail Rot13. Reading messages encoded in the rot13 code.
ea20444b 35* Movemail:: More details of fetching new mail.
79fc530e
GM
36* Remote Mailboxes:: Retrieving mail from remote mailboxes.
37* Other Mailbox Formats:: Retrieving mail from local mailboxes in
38 various formats.
6bf7aab6
DL
39@end menu
40
41@node Rmail Basics
42@section Basic Concepts of Rmail
43
44@cindex primary Rmail file
45@vindex rmail-file-name
46 Using Rmail in the simplest fashion, you have one Rmail file
47@file{~/RMAIL} in which all of your mail is saved. It is called your
48@dfn{primary Rmail file}. The command @kbd{M-x rmail} reads your primary
49Rmail file, merges new mail in from your inboxes, displays the first
50message you haven't read yet, and lets you begin reading. The variable
51@code{rmail-file-name} specifies the name of the primary Rmail file.
52
5f50b807 53 Rmail displays only one message in the Rmail file at a time.
6bf7aab6
DL
54The message that is shown is called the @dfn{current message}. Rmail
55mode's special commands can do such things as delete the current
56message, copy it into another file, send a reply, or move to another
57message. You can also create multiple Rmail files and use Rmail to move
58messages between them.
59
60@cindex message number
61 Within the Rmail file, messages are normally arranged sequentially in
62order of receipt; you can specify other ways to sort them. Messages are
9dd617a6
RS
63identified by consecutive integers which are their @dfn{message numbers}.
64The number of the current message is displayed in Rmail's mode line,
65followed by the total number of messages in the file. You can move to
66a message by specifying its message number with the @kbd{j} key
6bf7aab6
DL
67(@pxref{Rmail Motion}).
68
69@kindex s @r{(Rmail)}
00aa62e5 70@findex rmail-expunge-and-save
6bf7aab6 71 Following the usual conventions of Emacs, changes in an Rmail file
9dd617a6 72become permanent only when you save the file. You can save it with
00aa62e5
RS
73@kbd{s} (@code{rmail-expunge-and-save}), which also expunges deleted
74messages from the file first (@pxref{Rmail Deletion}). To save the
75file without expunging, use @kbd{C-x C-s}. Rmail also saves the Rmail
76file after merging new mail from an inbox file (@pxref{Rmail Inbox}).
6bf7aab6
DL
77
78@kindex q @r{(Rmail)}
79@findex rmail-quit
80@kindex b @r{(Rmail)}
81@findex rmail-bury
32823124
LT
82 You can exit Rmail with @kbd{q} (@code{rmail-quit}); this expunges
83and saves the Rmail file, then buries the Rmail buffer as well as its
d190d8c8 84summary buffer, if present (@pxref{Rmail Summary}). But there is no
32823124 85need to ``exit'' formally. If you switch from Rmail to editing in
9dd617a6
RS
86other buffers, and never switch back, you have exited. Just make sure
87to save the Rmail file eventually (like any other file you have
88changed). @kbd{C-x s} is a suitable way to do this (@pxref{Save
89Commands}). The Rmail command @kbd{b}, @code{rmail-bury}, buries the
90Rmail buffer and its summary buffer without expunging and saving the
91Rmail file.
6bf7aab6
DL
92
93@node Rmail Scrolling
94@section Scrolling Within a Message
95
96 When Rmail displays a message that does not fit on the screen, you
177c0ea7 97must scroll through it to read the rest. You could do this with
6bf7aab6 98@kbd{C-v}, @kbd{M-v} and @kbd{M-<}, but in Rmail scrolling is so
9dd617a6 99frequent that it deserves to be easier.
6bf7aab6
DL
100
101@table @kbd
102@item @key{SPC}
103Scroll forward (@code{scroll-up}).
104@item @key{DEL}
105Scroll backward (@code{scroll-down}).
106@item .
107Scroll to start of message (@code{rmail-beginning-of-message}).
a941a443
CY
108@item /
109Scroll to end of message (@code{rmail-end-of-message}).
6bf7aab6
DL
110@end table
111
112@kindex SPC @r{(Rmail)}
113@kindex DEL @r{(Rmail)}
114 Since the most common thing to do while reading a message is to scroll
115through it by screenfuls, Rmail makes @key{SPC} and @key{DEL} synonyms of
116@kbd{C-v} (@code{scroll-up}) and @kbd{M-v} (@code{scroll-down})
117
118@kindex . @r{(Rmail)}
a941a443 119@kindex / @r{(Rmail)}
6bf7aab6 120@findex rmail-beginning-of-message
a941a443 121@findex rmail-end-of-message
6bf7aab6
DL
122 The command @kbd{.} (@code{rmail-beginning-of-message}) scrolls back to the
123beginning of the selected message. This is not quite the same as @kbd{M-<}:
124for one thing, it does not set the mark; for another, it resets the buffer
a941a443
CY
125boundaries to the current message if you have changed them. Similarly,
126the command @kbd{/} (@code{rmail-end-of-message}) scrolls forward to the end
127of the selected message.
9d5de6f8
GM
128@c The comment about buffer boundaries is still true in mbox Rmail, if
129@c less likely to be relevant.
6bf7aab6
DL
130
131@node Rmail Motion
132@section Moving Among Messages
133
134 The most basic thing to do with a message is to read it. The way to
135do this in Rmail is to make the message current. The usual practice is
136to move sequentially through the file, since this is the order of
137receipt of messages. When you enter Rmail, you are positioned at the
138first message that you have not yet made current (that is, the first one
139that has the @samp{unseen} attribute; @pxref{Rmail Attributes}). Move
b8f86df3 140forward to see the other new messages; move backward to re-examine old
6bf7aab6
DL
141messages.
142
143@table @kbd
144@item n
145Move to the next nondeleted message, skipping any intervening deleted
146messages (@code{rmail-next-undeleted-message}).
147@item p
148Move to the previous nondeleted message
149(@code{rmail-previous-undeleted-message}).
150@item M-n
151Move to the next message, including deleted messages
152(@code{rmail-next-message}).
153@item M-p
154Move to the previous message, including deleted messages
155(@code{rmail-previous-message}).
156@item j
157Move to the first message. With argument @var{n}, move to
158message number @var{n} (@code{rmail-show-message}).
159@item >
160Move to the last message (@code{rmail-last-message}).
161@item <
162Move to the first message (@code{rmail-first-message}).
163
164@item M-s @var{regexp} @key{RET}
165Move to the next message containing a match for @var{regexp}
166(@code{rmail-search}).
167
168@item - M-s @var{regexp} @key{RET}
169Move to the previous message containing a match for @var{regexp}.
170@end table
171
172@kindex n @r{(Rmail)}
173@kindex p @r{(Rmail)}
174@kindex M-n @r{(Rmail)}
175@kindex M-p @r{(Rmail)}
176@findex rmail-next-undeleted-message
177@findex rmail-previous-undeleted-message
178@findex rmail-next-message
179@findex rmail-previous-message
180 @kbd{n} and @kbd{p} are the usual way of moving among messages in
181Rmail. They move through the messages sequentially, but skip over
182deleted messages, which is usually what you want to do. Their command
183definitions are named @code{rmail-next-undeleted-message} and
184@code{rmail-previous-undeleted-message}. If you do not want to skip
185deleted messages---for example, if you want to move to a message to
186undelete it---use the variants @kbd{M-n} and @kbd{M-p}
187(@code{rmail-next-message} and @code{rmail-previous-message}). A
188numeric argument to any of these commands serves as a repeat
9dd617a6 189count.
6bf7aab6
DL
190
191 In Rmail, you can specify a numeric argument by typing just the
192digits. You don't need to type @kbd{C-u} first.
193
194@kindex M-s @r{(Rmail)}
195@findex rmail-search
196@cindex searching in Rmail
197 The @kbd{M-s} (@code{rmail-search}) command is Rmail's version of
198search. The usual incremental search command @kbd{C-s} works in Rmail,
199but it searches only within the current message. The purpose of
200@kbd{M-s} is to search for another message. It reads a regular
201expression (@pxref{Regexps}) nonincrementally, then searches starting at
202the beginning of the following message for a match. It then selects
203that message. If @var{regexp} is empty, @kbd{M-s} reuses the regexp
204used the previous time.
205
206 To search backward in the file for another message, give @kbd{M-s} a
9d5de6f8
GM
207negative argument. In Rmail you can do this with @kbd{- M-s}. This
208begins searching from the end of the previous message.
6bf7aab6
DL
209
210 It is also possible to search for a message based on labels.
211@xref{Rmail Labels}.
212
213@kindex j @r{(Rmail)}
214@kindex > @r{(Rmail)}
215@kindex < @r{(Rmail)}
216@findex rmail-show-message
217@findex rmail-last-message
218@findex rmail-first-message
219 To move to a message specified by absolute message number, use @kbd{j}
220(@code{rmail-show-message}) with the message number as argument. With
221no argument, @kbd{j} selects the first message. @kbd{<}
222(@code{rmail-first-message}) also selects the first message. @kbd{>}
223(@code{rmail-last-message}) selects the last message.
224
225@node Rmail Deletion
226@section Deleting Messages
227
228@cindex deletion (Rmail)
229 When you no longer need to keep a message, you can @dfn{delete} it. This
230flags it as ignorable, and some Rmail commands pretend it is no longer
231present; but it still has its place in the Rmail file, and still has its
232message number.
233
234@cindex expunging (Rmail)
235 @dfn{Expunging} the Rmail file actually removes the deleted messages.
236The remaining messages are renumbered consecutively. Expunging is the only
237action that changes the message number of any message, except for
238undigestifying (@pxref{Rmail Digest}).
239
240@table @kbd
241@item d
242Delete the current message, and move to the next nondeleted message
243(@code{rmail-delete-forward}).
244@item C-d
245Delete the current message, and move to the previous nondeleted
246message (@code{rmail-delete-backward}).
247@item u
9d5de6f8
GM
248Undelete the current message, or move back to the previous deleted
249message and undelete it (@code{rmail-undelete-previous-message}).
6bf7aab6
DL
250@item x
251Expunge the Rmail file (@code{rmail-expunge}).
252@end table
253
254@kindex d @r{(Rmail)}
255@kindex C-d @r{(Rmail)}
256@findex rmail-delete-forward
257@findex rmail-delete-backward
258 There are two Rmail commands for deleting messages. Both delete the
259current message and select another message. @kbd{d}
260(@code{rmail-delete-forward}) moves to the following message, skipping
261messages already deleted, while @kbd{C-d} (@code{rmail-delete-backward})
262moves to the previous nondeleted message. If there is no nondeleted
3d963b67
GM
263message to move to in the specified direction, the message that was just
264deleted remains current. @kbd{d} with a prefix argument is equivalent
265to @kbd{C-d}. Note that the Rmail summary versions of these commands
266behave slightly differently (@pxref{Rmail Summary Edit}).
6bf7aab6 267
9d5de6f8 268@c mention other hooks, eg show message hook?
6bf7aab6 269@vindex rmail-delete-message-hook
b8f86df3 270 Whenever Rmail deletes a message, it runs the hook
6bf7aab6
DL
271@code{rmail-delete-message-hook}. When the hook functions are invoked,
272the message has been marked deleted, but it is still the current message
273in the Rmail buffer.
274
275@cindex undeletion (Rmail)
276@kindex x @r{(Rmail)}
277@findex rmail-expunge
278@kindex u @r{(Rmail)}
279@findex rmail-undelete-previous-message
280 To make all the deleted messages finally vanish from the Rmail file,
281type @kbd{x} (@code{rmail-expunge}). Until you do this, you can still
282@dfn{undelete} the deleted messages. The undeletion command, @kbd{u}
283(@code{rmail-undelete-previous-message}), is designed to cancel the
284effect of a @kbd{d} command in most cases. It undeletes the current
285message if the current message is deleted. Otherwise it moves backward
286to previous messages until a deleted message is found, and undeletes
287that message.
288
289 You can usually undo a @kbd{d} with a @kbd{u} because the @kbd{u}
290moves back to and undeletes the message that the @kbd{d} deleted. But
291this does not work when the @kbd{d} skips a few already-deleted messages
292that follow the message being deleted; then the @kbd{u} command
293undeletes the last of the messages that were skipped. There is no clean
294way to avoid this problem. However, by repeating the @kbd{u} command,
295you can eventually get back to the message that you intend to
296undelete. You can also select a particular deleted message with
297the @kbd{M-p} command, then type @kbd{u} to undelete it.
298
299 A deleted message has the @samp{deleted} attribute, and as a result
300@samp{deleted} appears in the mode line when the current message is
301deleted. In fact, deleting or undeleting a message is nothing more than
302adding or removing this attribute. @xref{Rmail Attributes}.
303
304@node Rmail Inbox
305@section Rmail Files and Inboxes
306@cindex inbox file
307
1be48cfa
RS
308 When you receive mail locally, the operating system places incoming
309mail for you in a file that we call your @dfn{inbox}. When you start
310up Rmail, it runs a C program called @code{movemail} to copy the new
311messages from your local inbox into your primary Rmail file, which
312also contains other messages saved from previous Rmail sessions. It
313is in this file that you actually read the mail with Rmail. This
314operation is called @dfn{getting new mail}. You can get new mail at
315any time in Rmail by typing @kbd{g}.
6bf7aab6
DL
316
317@vindex rmail-primary-inbox-list
60a96371 318@cindex @env{MAIL} environment variable
6bf7aab6
DL
319 The variable @code{rmail-primary-inbox-list} contains a list of the
320files which are inboxes for your primary Rmail file. If you don't set
9d5de6f8
GM
321this variable explicitly, Rmail uses the @env{MAIL} environment
322variable, or, as a last resort, a default inbox based on
323@code{rmail-spool-directory}. The default inbox file depends on your
324operating system; often it is @file{/var/mail/@var{username}},
325@file{/var/spool/mail/@var{username}}, or
326@file{/usr/spool/mail/@var{username}}.
6bf7aab6 327
9d5de6f8
GM
328 You can specify the inbox file(s) for any Rmail file for the current
329session with the command @code{set-rmail-inbox-list}; see @ref{Rmail
330Files}.
6bf7aab6
DL
331
332 There are two reasons for having separate Rmail files and inboxes.
333
334@enumerate
335@item
336The inbox file format varies between operating systems and according to
337the other mail software in use. Only one part of Rmail needs to know
338about the alternatives, and it need only understand how to convert all
339of them to Rmail's own format.
340
341@item
342It is very cumbersome to access an inbox file without danger of losing
343mail, because it is necessary to interlock with mail delivery.
344Moreover, different operating systems use different interlocking
345techniques. The strategy of moving mail out of the inbox once and for
346all into a separate Rmail file avoids the need for interlocking in all
347the rest of Rmail, since only Rmail operates on the Rmail file.
348@end enumerate
349
9d5de6f8
GM
350 Rmail was originally written to use the Babyl format as its internal
351format. Since then, we have recognized that the usual inbox format
352(@samp{mbox}) on Unix and GNU systems is adequate for the job, and so
353since Emacs 23 Rmail uses that as its internal format. The Rmail file
354is still separate from the inbox file, even though their format is the
355same.
6bf7aab6 356
1be48cfa 357@vindex rmail-preserve-inbox
9dd617a6
RS
358 When getting new mail, Rmail first copies the new mail from the
359inbox file to the Rmail file; then it saves the Rmail file; then it
360clears out the inbox file. This way, a system crash may cause
361duplication of mail between the inbox and the Rmail file, but cannot
362lose mail. If @code{rmail-preserve-inbox} is non-@code{nil}, then
363Rmail does not clear out the inbox file when it gets new mail. You
364may wish to set this, for example, on a portable computer you use to
365check your mail via POP while traveling, so that your mail will remain
366on the server and you can save it later on your workstation.
1be48cfa
RS
367
368 In some cases, Rmail copies the new mail from the inbox file
369indirectly. First it runs the @code{movemail} program to move the mail
370from the inbox to an intermediate file called
9d5de6f8
GM
371@file{.newmail-@var{inboxname}}, in the same directory as the Rmail
372file. Then Rmail merges the new mail from that file, saves the Rmail
373file, and only then deletes the intermediate file. If there is a crash
374at the wrong time, this file continues to exist, and Rmail will use it
375again the next time it gets new mail from that inbox.
1be48cfa
RS
376
377 If Rmail is unable to convert the data in
9d5de6f8
GM
378@file{.newmail-@var{inboxname}} into mbox format, it renames the file to
379@file{RMAILOSE.@var{n}} (@var{n} is an integer chosen to make the name
380unique) so that Rmail will not have trouble with the data again. You
381should look at the file, find whatever message confuses Rmail (probably
382one that includes the control-underscore character, octal code 037), and
383delete it. Then you can use @kbd{1 g} to get new mail from the
384corrected file.
1be48cfa 385
6bf7aab6
DL
386@node Rmail Files
387@section Multiple Rmail Files
388
389 Rmail operates by default on your @dfn{primary Rmail file}, which is named
390@file{~/RMAIL} and receives your incoming mail from your system inbox file.
391But you can also have other Rmail files and edit them with Rmail. These
392files can receive mail through their own inboxes, or you can move messages
393into them with explicit Rmail commands (@pxref{Rmail Output}).
394
395@table @kbd
396@item i @var{file} @key{RET}
397Read @var{file} into Emacs and run Rmail on it (@code{rmail-input}).
398
399@item M-x set-rmail-inbox-list @key{RET} @var{files} @key{RET}
400Specify inbox file names for current Rmail file to get mail from.
401
402@item g
403Merge new mail from current Rmail file's inboxes
404(@code{rmail-get-new-mail}).
405
406@item C-u g @var{file} @key{RET}
407Merge new mail from inbox file @var{file}.
408@end table
409
410@kindex i @r{(Rmail)}
411@findex rmail-input
9dd617a6 412 To run Rmail on a file other than your primary Rmail file, you can use
6bf7aab6
DL
413the @kbd{i} (@code{rmail-input}) command in Rmail. This visits the file
414in Rmail mode. You can use @kbd{M-x rmail-input} even when not in
9dd617a6
RS
415Rmail, but it is easier to type @kbd{C-u M-x rmail}, which does the
416same thing.
6bf7aab6 417
5f50b807
RS
418 The file you read with @kbd{i} should normally be a valid mbox file.
419If it is not, Rmail tries to convert its text to mbox format, and
420visits the converted text in the buffer. If you save the buffer, that
421converts the file.
422
423 If you specify a file name that doesn't exist, @kbd{i} initializes a
424new buffer for creating a new Rmail file.
6bf7aab6
DL
425
426@vindex rmail-secondary-file-directory
427@vindex rmail-secondary-file-regexp
9dd617a6
RS
428 You can also select an Rmail file from a menu. In the Classify menu,
429choose the Input Rmail File item; then choose the Rmail file you want.
430The variables @code{rmail-secondary-file-directory} and
6bf7aab6
DL
431@code{rmail-secondary-file-regexp} specify which files to offer in the
432menu: the first variable says which directory to find them in; the
9d5de6f8
GM
433second says which files in that directory to offer (all those that match
434the regular expression). If no files match, you cannot select this menu
435item. These variables also apply to choosing a file for output
436(@pxref{Rmail Output}).
6bf7aab6 437
5f50b807 438@ignore
6bf7aab6
DL
439@findex set-rmail-inbox-list
440 Each Rmail file can contain a list of inbox file names; you can specify
441this list with @kbd{M-x set-rmail-inbox-list @key{RET} @var{files}
442@key{RET}}. The argument can contain any number of file names, separated
443by commas. It can also be empty, which specifies that this file should
9dd617a6
RS
444have no inboxes. Once you specify a list of inboxes in an Rmail file,
445the Rmail file remembers it permanently until you specify a different list.
5f50b807 446@end ignore
6bf7aab6 447
5f50b807
RS
448@vindex rmail-inbox-list
449 The inbox files to use are specified by the variable
450@code{rmail-inbox-list}, which is buffer-local in Rmail mode. As a
9d5de6f8
GM
451special exception, if you have specified no inbox files for your primary
452Rmail file, it uses the @env{MAIL} environment variable, or your
453standard system inbox.
6bf7aab6
DL
454
455@kindex g @r{(Rmail)}
456@findex rmail-get-new-mail
457 The @kbd{g} command (@code{rmail-get-new-mail}) merges mail into the
9dd617a6
RS
458current Rmail file from its inboxes. If the Rmail file has no
459inboxes, @kbd{g} does nothing. The command @kbd{M-x rmail} also
460merges new mail into your primary Rmail file.
6bf7aab6
DL
461
462 To merge mail from a file that is not the usual inbox, give the
463@kbd{g} key a numeric argument, as in @kbd{C-u g}. Then it reads a file
464name and merges mail from that file. The inbox file is not deleted or
465changed in any way when @kbd{g} with an argument is used. This is,
466therefore, a general way of merging one file of messages into another.
467
468@node Rmail Output
469@section Copying Messages Out to Files
470
471 These commands copy messages from an Rmail file into another file.
472
473@table @kbd
474@item o @var{file} @key{RET}
5f50b807
RS
475Append a full copy of the current message to the file @var{file}
476(@code{rmail-output}).
6bf7aab6
DL
477
478@item C-o @var{file} @key{RET}
5f50b807
RS
479Append a copy of the current message, as displayed, to the file
480@var{file} (@code{rmail-output-as-seen}).
6bf7aab6
DL
481
482@item w @var{file} @key{RET}
483Output just the message body to the file @var{file}, taking the default
484file name from the message @samp{Subject} header.
485@end table
486
487@kindex o @r{(Rmail)}
5f50b807 488@findex rmail-output-as-seen
6bf7aab6
DL
489@kindex C-o @r{(Rmail)}
490@findex rmail-output
491 The commands @kbd{o} and @kbd{C-o} copy the current message into a
5f50b807
RS
492specified file, adding it at the end. The two commands differ mainly
493in how much to copy: @kbd{o} copies the full message headers, even if
494they are not all visible, while @kbd{C-o} copies exactly the headers
495currently displayed and no more. @xref{Rmail Display}. In addition,
496@kbd{o} converts the message to Babyl format (used by Rmail in Emacs
497version 22 and before) if the file is in Babyl format; @kbd{C-o}
498cannot output to Babyl files at all.
499
500 If the output file is currently visited in an Emacs buffer, the
501output commands append the message to that buffer. It is up to you to
502save the buffer eventually in its file.
6bf7aab6
DL
503
504@kindex w @r{(Rmail)}
505@findex rmail-output-body-to-file
506 Sometimes you may receive a message whose body holds the contents of a
507file. You can save the body to a file (excluding the message header)
508with the @kbd{w} command (@code{rmail-output-body-to-file}). Often
509these messages contain the intended file name in the @samp{Subject}
510field, so the @kbd{w} command uses the @samp{Subject} field as the
511default for the output file name. However, the file name is read using
512the minibuffer, so you can specify a different name if you wish.
513
514 You can also output a message to an Rmail file chosen with a menu.
9dd617a6
RS
515In the Classify menu, choose the Output Rmail File menu item; then
516choose the Rmail file you want. This outputs the current message to
517that file, like the @kbd{o} command. The variables
518@code{rmail-secondary-file-directory} and
6bf7aab6
DL
519@code{rmail-secondary-file-regexp} specify which files to offer in the
520menu: the first variable says which directory to find them in; the
9dd617a6 521second says which files in that directory to offer (all those that
9d5de6f8
GM
522match the regular expression). If no files match, you cannot select
523this menu item.
6bf7aab6
DL
524
525@vindex rmail-delete-after-output
32823124
LT
526 Copying a message with @kbd{o} or @kbd{C-o} gives the original copy
527of the message the @samp{filed} attribute, so that @samp{filed}
5f50b807
RS
528appears in the mode line when such a message is current.
529
530 If you like to keep just a single copy of every mail message, set
531the variable @code{rmail-delete-after-output} to @code{t}; then the
532@kbd{o}, @kbd{C-o} and @kbd{w} commands delete the original message
533after copying it. (You can undelete it afterward if you wish.)
6bf7aab6
DL
534
535@vindex rmail-output-file-alist
536 The variable @code{rmail-output-file-alist} lets you specify
537intelligent defaults for the output file, based on the contents of the
538current message. The value should be a list whose elements have this
539form:
540
541@example
542(@var{regexp} . @var{name-exp})
543@end example
544
545@noindent
546If there's a match for @var{regexp} in the current message, then the
547default file name for output is @var{name-exp}. If multiple elements
548match the message, the first matching element decides the default file
549name. The subexpression @var{name-exp} may be a string constant giving
550the file name to use, or more generally it may be any Lisp expression
551that returns a file name as a string. @code{rmail-output-file-alist}
552applies to both @kbd{o} and @kbd{C-o}.
553
554@node Rmail Labels
555@section Labels
556@cindex label (Rmail)
557@cindex attribute (Rmail)
558
559 Each message can have various @dfn{labels} assigned to it as a means
560of classification. Each label has a name; different names are different
561labels. Any given label is either present or absent on a particular
562message. A few label names have standard meanings and are given to
563messages automatically by Rmail when appropriate; these special labels
564are called @dfn{attributes}.
4714476b 565@ifnottex
6bf7aab6 566(@xref{Rmail Attributes}.)
4714476b 567@end ifnottex
6bf7aab6
DL
568All other labels are assigned only by users.
569
570@table @kbd
571@item a @var{label} @key{RET}
572Assign the label @var{label} to the current message (@code{rmail-add-label}).
573@item k @var{label} @key{RET}
574Remove the label @var{label} from the current message (@code{rmail-kill-label}).
575@item C-M-n @var{labels} @key{RET}
576Move to the next message that has one of the labels @var{labels}
577(@code{rmail-next-labeled-message}).
578@item C-M-p @var{labels} @key{RET}
579Move to the previous message that has one of the labels @var{labels}
580(@code{rmail-previous-labeled-message}).
32823124
LT
581@item l @var{labels} @key{RET}
582@itemx C-M-l @var{labels} @key{RET}
6bf7aab6
DL
583Make a summary of all messages containing any of the labels @var{labels}
584(@code{rmail-summary-by-labels}).
585@end table
586
587@kindex a @r{(Rmail)}
588@kindex k @r{(Rmail)}
589@findex rmail-add-label
590@findex rmail-kill-label
591 The @kbd{a} (@code{rmail-add-label}) and @kbd{k}
592(@code{rmail-kill-label}) commands allow you to assign or remove any
593label on the current message. If the @var{label} argument is empty, it
594means to assign or remove the same label most recently assigned or
595removed.
596
597 Once you have given messages labels to classify them as you wish, there
598are two ways to use the labels: in moving and in summaries.
599
600@kindex C-M-n @r{(Rmail)}
601@kindex C-M-p @r{(Rmail)}
602@findex rmail-next-labeled-message
603@findex rmail-previous-labeled-message
604 The command @kbd{C-M-n @var{labels} @key{RET}}
605(@code{rmail-next-labeled-message}) moves to the next message that has
606one of the labels @var{labels}. The argument @var{labels} specifies one
607or more label names, separated by commas. @kbd{C-M-p}
608(@code{rmail-previous-labeled-message}) is similar, but moves backwards
609to previous messages. A numeric argument to either command serves as a
610repeat count.
611
612 The command @kbd{C-M-l @var{labels} @key{RET}}
613(@code{rmail-summary-by-labels}) displays a summary containing only the
614messages that have at least one of a specified set of labels. The
615argument @var{labels} is one or more label names, separated by commas.
9dd617a6 616@xref{Rmail Summary}, for information on summaries.
6bf7aab6
DL
617
618 If the @var{labels} argument to @kbd{C-M-n}, @kbd{C-M-p} or
619@kbd{C-M-l} is empty, it means to use the last set of labels specified
620for any of these commands.
621
622@node Rmail Attributes
623@section Rmail Attributes
624
625 Some labels such as @samp{deleted} and @samp{filed} have built-in
9dd617a6
RS
626meanings, and Rmail assigns them to messages automatically at
627appropriate times; these labels are called @dfn{attributes}. Here is
628a list of Rmail attributes:
6bf7aab6
DL
629
630@table @samp
631@item unseen
632Means the message has never been current. Assigned to messages when
633they come from an inbox file, and removed when a message is made
634current. When you start Rmail, it initially shows the first message
635that has this attribute.
636@item deleted
637Means the message is deleted. Assigned by deletion commands and
638removed by undeletion commands (@pxref{Rmail Deletion}).
639@item filed
640Means the message has been copied to some other file. Assigned by the
32823124 641@kbd{o} and @kbd{C-o} file output commands (@pxref{Rmail Output}).
6bf7aab6
DL
642@item answered
643Means you have mailed an answer to the message. Assigned by the @kbd{r}
644command (@code{rmail-reply}). @xref{Rmail Reply}.
645@item forwarded
646Means you have forwarded the message. Assigned by the @kbd{f} command
647(@code{rmail-forward}). @xref{Rmail Reply}.
648@item edited
649Means you have edited the text of the message within Rmail.
650@xref{Rmail Editing}.
651@item resent
652Means you have resent the message. Assigned by the command @kbd{M-x
653rmail-resend}. @xref{Rmail Reply}.
5f50b807
RS
654@item retried
655Means you have retried a failed outgoing message. Assigned by the
656command @kbd{M-x rmail-retry-failure}. @xref{Rmail Reply}.
6bf7aab6
DL
657@end table
658
9dd617a6 659 All other labels are assigned or removed only by users, and have no
6bf7aab6
DL
660standard meaning.
661
662@node Rmail Reply
663@section Sending Replies
664
665 Rmail has several commands that use Mail mode to send outgoing mail.
666@xref{Sending Mail}, for information on using Mail mode, including
667certain features meant to work with Rmail. What this section documents
668are the special commands of Rmail for entering Mail mode. Note that the
669usual keys for sending mail---@kbd{C-x m}, @kbd{C-x 4 m}, and @kbd{C-x 5
9dd617a6 670m}---also work normally in Rmail mode.
6bf7aab6
DL
671
672@table @kbd
673@item m
674Send a message (@code{rmail-mail}).
675@item c
676Continue editing the already started outgoing message (@code{rmail-continue}).
677@item r
678Send a reply to the current Rmail message (@code{rmail-reply}).
679@item f
680Forward the current message to other users (@code{rmail-forward}).
681@item C-u f
682Resend the current message to other users (@code{rmail-resend}).
683@item M-m
684Try sending a bounced message a second time (@code{rmail-retry-failure}).
685@end table
686
687@kindex r @r{(Rmail)}
688@findex rmail-reply
689@cindex reply to a message
9dd617a6
RS
690 The most common reason to send a message while in Rmail is to reply
691to the message you are reading. To do this, type @kbd{r}
692(@code{rmail-reply}). This displays the @samp{*mail*} buffer in
693another window, much like @kbd{C-x 4 m}, but preinitializes the
694@samp{Subject}, @samp{To}, @samp{CC}, @samp{In-reply-to} and
695@samp{References} header fields based on the message you are replying
696to. The @samp{To} field starts out as the address of the person who
697sent the message you received, and the @samp{CC} field starts out with
698all the other recipients of that message.
6bf7aab6
DL
699
700@vindex rmail-dont-reply-to-names
3d963b67
GM
701 You can exclude certain recipients from being included automatically
702in replies, using the variable @code{rmail-dont-reply-to-names}. Its
6bf7aab6
DL
703value should be a regular expression (as a string); any recipient that
704the regular expression matches, is excluded from the @samp{CC} field.
3d963b67
GM
705They are also excluded from the @samp{To} field, unless this would leave
706the field empty. If this variables is nil, then the first time you
707compose a reply it is initialized to a default value that matches your
708own address, and any name starting with @samp{info-}. (Those names are
709excluded because there is a convention of using them for large mailing
710lists to broadcast announcements.)
6bf7aab6
DL
711
712 To omit the @samp{CC} field completely for a particular reply, enter
713the reply command with a numeric argument: @kbd{C-u r} or @kbd{1 r}.
9dd617a6 714This means to reply only to the sender of the original message.
6bf7aab6
DL
715
716 Once the @samp{*mail*} buffer has been initialized, editing and
717sending the mail goes as usual (@pxref{Sending Mail}). You can edit the
9dd617a6 718presupplied header fields if they are not what you want. You can also
6bf7aab6
DL
719use the commands of Mail mode (@pxref{Mail Mode}), including @kbd{C-c
720C-y} which yanks in the message that you are replying to. You can
9dd617a6 721also switch to the Rmail buffer, select a different message there, switch
6bf7aab6
DL
722back, and yank the new current message.
723
724@kindex M-m @r{(Rmail)}
725@findex rmail-retry-failure
726@cindex retrying a failed message
727@vindex rmail-retry-ignored-headers
728 Sometimes a message does not reach its destination. Mailers usually
729send the failed message back to you, enclosed in a @dfn{failure
730message}. The Rmail command @kbd{M-m} (@code{rmail-retry-failure})
731prepares to send the same message a second time: it sets up a
732@samp{*mail*} buffer with the same text and header fields as before. If
733you type @kbd{C-c C-c} right away, you send the message again exactly
734the same as the first time. Alternatively, you can edit the text or
735headers and then send it. The variable
736@code{rmail-retry-ignored-headers}, in the same format as
737@code{rmail-ignored-headers} (@pxref{Rmail Display}), controls which
00aa62e5 738headers are stripped from the failed message when retrying it.
6bf7aab6
DL
739
740@kindex f @r{(Rmail)}
741@findex rmail-forward
742@cindex forwarding a message
743 Another frequent reason to send mail in Rmail is to @dfn{forward} the
744current message to other users. @kbd{f} (@code{rmail-forward}) makes
745this easy by preinitializing the @samp{*mail*} buffer with the current
746message as the text, and a subject designating a forwarded message. All
747you have to do is fill in the recipients and send. When you forward a
748message, recipients get a message which is ``from'' you, and which has
749the original message in its contents.
750
751@findex unforward-rmail-message
752 Forwarding a message encloses it between two delimiter lines. It also
753modifies every line that starts with a dash, by inserting @w{@samp{- }}
754at the start of the line. When you receive a forwarded message, if it
755contains something besides ordinary text---for example, program source
756code---you might find it useful to undo that transformation. You can do
757this by selecting the forwarded message and typing @kbd{M-x
758unforward-rmail-message}. This command extracts the original forwarded
759message, deleting the inserted @w{@samp{- }} strings, and inserts it
760into the Rmail file as a separate message immediately following the
761current one.
762
763@findex rmail-resend
764 @dfn{Resending} is an alternative similar to forwarding; the
765difference is that resending sends a message that is ``from'' the
766original sender, just as it reached you---with a few added header fields
00aa62e5 767@samp{Resent-From} and @samp{Resent-To} to indicate that it came via
6bf7aab6 768you. To resend a message in Rmail, use @kbd{C-u f}. (@kbd{f} runs
3d963b67
GM
769@code{rmail-forward}, which invokes @code{rmail-resend} if you provide a
770numeric argument.)
6bf7aab6
DL
771
772@kindex m @r{(Rmail)}
773@findex rmail-mail
5f50b807 774 Use the @kbd{m} (@code{rmail-mail}) command to start editing an
6bf7aab6
DL
775outgoing message that is not a reply. It leaves the header fields empty.
776Its only difference from @kbd{C-x 4 m} is that it makes the Rmail buffer
777accessible for @kbd{C-c C-y}, just as @kbd{r} does. Thus, @kbd{m} can be
778used to reply to or forward a message; it can do anything @kbd{r} or @kbd{f}
9dd617a6 779can do.
6bf7aab6
DL
780
781@kindex c @r{(Rmail)}
782@findex rmail-continue
783 The @kbd{c} (@code{rmail-continue}) command resumes editing the
784@samp{*mail*} buffer, to finish editing an outgoing message you were
9dd617a6 785already composing, or to alter a message you have sent.
6bf7aab6
DL
786
787@vindex rmail-mail-new-frame
788 If you set the variable @code{rmail-mail-new-frame} to a
789non-@code{nil} value, then all the Rmail commands to start sending a
790message create a new frame to edit it in. This frame is deleted when
00aa62e5 791you send the message, or when you use the @samp{Cancel} item in the
6bf7aab6
DL
792@samp{Mail} menu.
793
794 All the Rmail commands to send a message use the mail-composition
795method that you have chosen (@pxref{Mail Methods}).
796
797@node Rmail Summary
798@section Summaries
799@cindex summary (Rmail)
800
801 A @dfn{summary} is a buffer containing one line per message to give
802you an overview of the mail in an Rmail file. Each line shows the
00aa62e5
RS
803message number and date, the sender, the line count, the labels, and
804the subject. Moving point in the summary buffer selects messages as
805you move to their summary lines. Almost all Rmail commands are valid
806in the summary buffer also; when used there, they apply to the message
807described by the current line of the summary.
6bf7aab6
DL
808
809 A summary buffer applies to a single Rmail file only; if you are
810editing multiple Rmail files, each one can have its own summary buffer.
811The summary buffer name is made by appending @samp{-summary} to the
812Rmail buffer's name. Normally only one summary buffer is displayed at a
813time.
814
815@menu
816* Rmail Make Summary:: Making various sorts of summaries.
817* Rmail Summary Edit:: Manipulating messages from the summary.
818@end menu
819
820@node Rmail Make Summary
821@subsection Making Summaries
822
3d963b67
GM
823 Here are the commands to create a summary for the current Rmail
824buffer. Once the Rmail buffer has a summary, changes in the Rmail
825buffer (such as deleting or expunging messages, and getting new mail)
6bf7aab6
DL
826automatically update the summary.
827
828@table @kbd
829@item h
830@itemx C-M-h
831Summarize all messages (@code{rmail-summary}).
832@item l @var{labels} @key{RET}
833@itemx C-M-l @var{labels} @key{RET}
834Summarize messages that have one or more of the specified labels
835(@code{rmail-summary-by-labels}).
836@item C-M-r @var{rcpts} @key{RET}
837Summarize messages that have one or more of the specified recipients
838(@code{rmail-summary-by-recipients}).
839@item C-M-t @var{topic} @key{RET}
840Summarize messages that have a match for the specified regexp
841@var{topic} in their subjects (@code{rmail-summary-by-topic}).
a99d2d64 842@item C-M-s @var{regexp}
3d963b67
GM
843Summarize messages whose headers match the specified regular expression
844@var{regexp} (@code{rmail-summary-by-regexp}).
6bf7aab6
DL
845@end table
846
847@kindex h @r{(Rmail)}
848@findex rmail-summary
849 The @kbd{h} or @kbd{C-M-h} (@code{rmail-summary}) command fills the summary buffer
3d963b67 850for the current Rmail buffer with a summary of all the messages in the buffer.
6bf7aab6
DL
851It then displays and selects the summary buffer in another window.
852
853@kindex l @r{(Rmail)}
854@kindex C-M-l @r{(Rmail)}
855@findex rmail-summary-by-labels
856 @kbd{C-M-l @var{labels} @key{RET}} (@code{rmail-summary-by-labels}) makes
857a partial summary mentioning only the messages that have one or more of the
858labels @var{labels}. @var{labels} should contain label names separated by
9dd617a6 859commas.
6bf7aab6
DL
860
861@kindex C-M-r @r{(Rmail)}
862@findex rmail-summary-by-recipients
863 @kbd{C-M-r @var{rcpts} @key{RET}} (@code{rmail-summary-by-recipients})
3d963b67
GM
864makes a partial summary mentioning only the messages that have one or
865more recipients matching the regular expression @var{rcpts}. Commas can
866be used to separate multiple regular expressions. These are matched
867against the @samp{To}, @samp{From}, and @samp{CC} headers (with a prefix
868argument, this header is not included).
6bf7aab6
DL
869
870@kindex C-M-t @r{(Rmail)}
871@findex rmail-summary-by-topic
872 @kbd{C-M-t @var{topic} @key{RET}} (@code{rmail-summary-by-topic})
873makes a partial summary mentioning only the messages whose subjects have
3d963b67
GM
874a match for the regular expression @var{topic}. Commas can be used to
875separate multiple regular expressions. With a prefix argument, the
876match is against the whole message, not just the subject.
6bf7aab6 877
a99d2d64
EZ
878@kindex C-M-s @r{(Rmail)}
879@findex rmail-summary-by-regexp
b8f86df3 880 @kbd{C-M-s @var{regexp} @key{RET}} (@code{rmail-summary-by-regexp})
3d963b67 881makes a partial summary that mentions only the messages whose headers
a99d2d64
EZ
882(including the date and the subject lines) match the regular
883expression @var{regexp}.
884
3d963b67 885 Note that there is only one summary buffer for any Rmail buffer;
9dd617a6 886making any kind of summary discards any previous summary.
6bf7aab6
DL
887
888@vindex rmail-summary-window-size
889@vindex rmail-summary-line-count-flag
890 The variable @code{rmail-summary-window-size} says how many lines to
891use for the summary window. The variable
892@code{rmail-summary-line-count-flag} controls whether the summary line
3d963b67
GM
893for a message should include the line count of the message. Setting
894this option to nil might speed up the generation of summaries.
6bf7aab6
DL
895
896@node Rmail Summary Edit
897@subsection Editing in Summaries
898
899 You can use the Rmail summary buffer to do almost anything you can do
900in the Rmail buffer itself. In fact, once you have a summary buffer,
901there's no need to switch back to the Rmail buffer.
902
903 You can select and display various messages in the Rmail buffer, from
904the summary buffer, just by moving point in the summary buffer to
905different lines. It doesn't matter what Emacs command you use to move
906point; whichever line point is on at the end of the command, that
907message is selected in the Rmail buffer.
908
909 Almost all Rmail commands work in the summary buffer as well as in the
910Rmail buffer. Thus, @kbd{d} in the summary buffer deletes the current
36e2ae50
LT
911message, @kbd{u} undeletes, and @kbd{x} expunges. (However, in the
912summary buffer, a numeric argument to @kbd{d}, @kbd{C-d} and @kbd{u}
913serves as a repeat count. A negative argument reverses the meaning of
3d963b67
GM
914@kbd{d} and @kbd{C-d}. Also, if there are no more undeleted messages in
915the relevant direction, the delete commands go to the first or last
916message, rather than staying on the current message.) @kbd{o} and
917@kbd{C-o} output the current message to a FILE; @kbd{r} starts a reply
918to it. You can scroll the current message while remaining in the
919summary buffer using @key{SPC} and @key{DEL}.
6bf7aab6
DL
920
921 The Rmail commands to move between messages also work in the summary
922buffer, but with a twist: they move through the set of messages included
923in the summary. They also ensure the Rmail buffer appears on the screen
924(unlike cursor motion commands, which update the contents of the Rmail
925buffer but don't display it in a window unless it already appears).
926Here is a list of these commands:
927
928@table @kbd
929@item n
930Move to next line, skipping lines saying `deleted', and select its
931message.
932@item p
933Move to previous line, skipping lines saying `deleted', and select
934its message.
935@item M-n
936Move to next line and select its message.
937@item M-p
938Move to previous line and select its message.
939@item >
940Move to the last line, and select its message.
941@item <
942Move to the first line, and select its message.
32823124
LT
943@item j
944@itemx @key{RET}
945Select the message on the current line (ensuring that the RMAIL buffer
946appears on the screen). With argument @var{n}, select message number
947@var{n} and move to its line in the summary buffer; this signals an
948error if the message is not listed in the summary buffer.
6bf7aab6
DL
949@item M-s @var{pattern} @key{RET}
950Search through messages for @var{pattern} starting with the current
951message; select the message found, and move point in the summary buffer
952to that message's line.
953@end table
954
955@vindex rmail-redisplay-summary
956 Deletion, undeletion, and getting new mail, and even selection of a
957different message all update the summary buffer when you do them in the
958Rmail buffer. If the variable @code{rmail-redisplay-summary} is
959non-@code{nil}, these actions also bring the summary buffer back onto
960the screen.
961
962@kindex Q @r{(Rmail summary)}
963@findex rmail-summary-wipe
964@kindex q @r{(Rmail summary)}
965@findex rmail-summary-quit
3d963b67
GM
966@kindex b @r{(Rmail summary)}
967@findex rmail-summary-bury
6bf7aab6
DL
968 When you are finished using the summary, type @kbd{Q}
969(@code{rmail-summary-wipe}) to delete the summary buffer's window. You
970can also exit Rmail while in the summary: @kbd{q}
971(@code{rmail-summary-quit}) deletes the summary window, then exits from
972Rmail by saving the Rmail file and switching to another buffer.
3d963b67
GM
973Alternatively, @kbd{b} (@code{rmail-summary-bury}) simply buries the
974Rmail summary and buffer.
6bf7aab6
DL
975
976@node Rmail Sorting
977@section Sorting the Rmail File
c1209b97
EZ
978@cindex sorting Rmail file
979@cindex Rmail file sorting
6bf7aab6
DL
980
981@table @kbd
c1209b97 982@findex rmail-sort-by-date
6bf7aab6
DL
983@item M-x rmail-sort-by-date
984Sort messages of current Rmail file by date.
985
c1209b97 986@findex rmail-sort-by-subject
6bf7aab6
DL
987@item M-x rmail-sort-by-subject
988Sort messages of current Rmail file by subject.
989
c1209b97 990@findex rmail-sort-by-author
6bf7aab6
DL
991@item M-x rmail-sort-by-author
992Sort messages of current Rmail file by author's name.
993
c1209b97 994@findex rmail-sort-by-recipient
6bf7aab6
DL
995@item M-x rmail-sort-by-recipient
996Sort messages of current Rmail file by recipient's names.
997
c1209b97 998@findex rmail-sort-by-correspondent
6bf7aab6
DL
999@item M-x rmail-sort-by-correspondent
1000Sort messages of current Rmail file by the name of the other
1001correspondent.
1002
c1209b97 1003@findex rmail-sort-by-lines
6bf7aab6
DL
1004@item M-x rmail-sort-by-lines
1005Sort messages of current Rmail file by size (number of lines).
1006
c1209b97 1007@findex rmail-sort-by-keywords
6bf7aab6
DL
1008@item M-x rmail-sort-by-keywords @key{RET} @var{labels} @key{RET}
1009Sort messages of current Rmail file by labels. The argument
1010@var{labels} should be a comma-separated list of labels. The order of
1011these labels specifies the order of messages; messages with the first
1012label come first, messages with the second label come second, and so on.
1013Messages which have none of these labels come last.
1014@end table
1015
1016 The Rmail sort commands perform a @emph{stable sort}: if there is no
1017reason to prefer either one of two messages, their order remains
1018unchanged. You can use this to sort by more than one criterion. For
1019example, if you use @code{rmail-sort-by-date} and then
1020@code{rmail-sort-by-author}, messages from the same author appear in
1021order by date.
1022
1023 With a numeric argument, all these commands reverse the order of
1024comparison. This means they sort messages from newest to oldest, from
1025biggest to smallest, or in reverse alphabetical order.
1026
1027@node Rmail Display
1028@section Display of Messages
1029
1030 Rmail reformats the header of each message before displaying it for
1031the first time. Reformatting hides uninteresting header fields to
1032reduce clutter. You can use the @kbd{t} command to show the entire
1033header or to repeat the header reformatting operation.
1034
1035@table @kbd
1036@item t
1037Toggle display of complete header (@code{rmail-toggle-header}).
1038@end table
1039
1040@vindex rmail-ignored-headers
9dd617a6 1041@vindex rmail-nonignored-headers
6bf7aab6
DL
1042 Reformatting the header involves deleting most header fields, on the
1043grounds that they are not interesting. The variable
1044@code{rmail-ignored-headers} holds a regular expression that specifies
9dd617a6
RS
1045which header fields to hide in this way---if it matches the beginning
1046of a header field, that whole field is hidden. However, the variable
1047@code{rmail-nonignored-headers} provides a further override: a header
1048matching that regular expression is shown even if it matches
1049@code{rmail-ignored-headers} too.
6bf7aab6 1050
3d963b67
GM
1051@vindex rmail-displayed-headers
1052 As an alternative to the previous two variables, you can set
1053@code{rmail-displayed-headers} instead. If non-@code{nil}, this should
1054be a regular expression specifying which headers to display.
1055
6bf7aab6
DL
1056@kindex t @r{(Rmail)}
1057@findex rmail-toggle-header
1058 Rmail saves the complete original header before reformatting; to see
1059it, use the @kbd{t} command (@code{rmail-toggle-header}). This
9dd617a6
RS
1060discards the reformatted headers of the current message and displays
1061it with the original header. Repeating @kbd{t} reformats the message
1062again, which shows only the interesting headers according to the
3d963b67 1063current values of the above variables. Selecting the message again also
9dd617a6 1064reformats it if necessary.
6bf7aab6 1065
6bf7aab6
DL
1066 When the @kbd{t} command has a prefix argument, a positive argument
1067means to show the reformatted header, and a zero or negative argument
1068means to show the full header.
1069
1070@vindex rmail-highlighted-headers
3d963b67
GM
1071 Rmail highlights certain header fields that are especially
1072interesting---by default, the @samp{From} and @samp{Subject} fields.
1073The variable @code{rmail-highlighted-headers} holds a regular expression
1074that specifies the header fields to highlight; if it matches the
1075beginning of a header field, that whole field is highlighted. To turn
1076off this feature, set @code{rmail-highlighted-headers} to @code{nil}.
1077Customize the face @code{rmail-highlight} to adjust the style of the
1078highlighting.
6bf7aab6 1079
358f71fd 1080 You can highlight and activate URLs in incoming messages by adding
f4afec8a 1081the function @code{goto-address-mode} to the hook
358f71fd 1082@code{rmail-show-message-hook}. Then you can browse these URLs by
1be48cfa 1083clicking on them with @kbd{Mouse-2} (or @kbd{Mouse-1} quickly) or by
f4afec8a
CY
1084moving to one and typing @kbd{C-c @key{RET}}. @xref{Goto Address
1085mode, Activating URLs, Activating URLs}.
358f71fd
RS
1086
1087@node Rmail Coding
1088@section Rmail and Coding Systems
6c21cdc0 1089
eed0ee77 1090@cindex decoding mail messages (Rmail)
76dd3692 1091 Rmail automatically decodes messages which contain non-@acronym{ASCII}
b8f86df3
EZ
1092characters, just as Emacs does with files you visit and with subprocess
1093output. Rmail uses the standard @samp{charset=@var{charset}} header in
1094the message, if any, to determine how the message was encoded by the
1095sender. It maps @var{charset} into the corresponding Emacs coding
1096system (@pxref{Coding Systems}), and uses that coding system to decode
95009a13
RS
1097message text. If the message header doesn't have the @samp{charset}
1098specification, or if @var{charset} is not recognized,
b8f86df3
EZ
1099Rmail chooses the coding system with the usual Emacs heuristics and
1100defaults (@pxref{Recognize Coding}).
eed0ee77 1101
eed0ee77 1102@cindex fixing incorrectly decoded mail messages
358f71fd
RS
1103 Occasionally, a message is decoded incorrectly, either because Emacs
1104guessed the wrong coding system in the absence of the @samp{charset}
1105specification, or because the specification was inaccurate. For
1106example, a misconfigured mailer could send a message with a
1107@samp{charset=iso-8859-1} header when the message is actually encoded
1108in @code{koi8-r}. When you see the message text garbled, or some of
1109its characters displayed as empty boxes, this may have happened.
eed0ee77 1110
358f71fd
RS
1111@findex rmail-redecode-body
1112 You can correct the problem by decoding the message again using the
1113right coding system, if you can figure out or guess which one is
1114right. To do this, invoke the @kbd{M-x rmail-redecode-body} command.
763e01c4
EZ
1115It reads the name of a coding system, and then redecodes the message
1116using the coding system you specified. If you specified the right
358f71fd
RS
1117coding system, the result should be readable.
1118
6bf7aab6
DL
1119@node Rmail Editing
1120@section Editing Within a Message
1121
1122 Most of the usual Emacs commands are available in Rmail mode, though a
1123few, such as @kbd{C-M-n} and @kbd{C-M-h}, are redefined by Rmail for
1124other purposes. However, the Rmail buffer is normally read only, and
1125most of the letters are redefined as Rmail commands. If you want to
1126edit the text of a message, you must use the Rmail command @kbd{e}.
1127
1128@table @kbd
1129@item e
1130Edit the current message as ordinary text.
1131@end table
1132
1133@kindex e @r{(Rmail)}
1134@findex rmail-edit-current-message
1135 The @kbd{e} command (@code{rmail-edit-current-message}) switches from
1136Rmail mode into Rmail Edit mode, another major mode which is nearly the
1137same as Text mode. The mode line indicates this change.
1138
1139 In Rmail Edit mode, letters insert themselves as usual and the Rmail
5f50b807
RS
1140commands are not available. You can edit message body and header
1141fields. When you are finished editing the message, type @kbd{C-c C-c}
1142to switch back to Rmail mode. Alternatively, you can return to Rmail
1143mode but cancel all the editing that you have done, by typing @kbd{C-c
1144C-]}.
6bf7aab6
DL
1145
1146@vindex rmail-edit-mode-hook
5f50b807
RS
1147 Entering Rmail Edit mode runs the hook @code{text-mode-hook}; then
1148it runs the hook @code{rmail-edit-mode-hook} (@pxref{Hooks}).
1149Returning to ordinary Rmail mode adds the attribute @samp{edited} to
1150the message, if you have made any changes in it.
6bf7aab6
DL
1151
1152@node Rmail Digest
1153@section Digest Messages
1154@cindex digest message
1155@cindex undigestify
1156
1157 A @dfn{digest message} is a message which exists to contain and carry
1158several other messages. Digests are used on some moderated mailing
1159lists; all the messages that arrive for the list during a period of time
1160such as one day are put inside a single digest which is then sent to the
1161subscribers. Transmitting the single digest uses much less computer
1162time than transmitting the individual messages even though the total
1163size is the same, because the per-message overhead in network mail
1164transmission is considerable.
1165
1166@findex undigestify-rmail-message
1167 When you receive a digest message, the most convenient way to read it is
1168to @dfn{undigestify} it: to turn it back into many individual messages.
1169Then you can read and delete the individual messages as it suits you.
eca274b1 1170To do this, select the digest message and type the command @kbd{M-x
6bf7aab6
DL
1171undigestify-rmail-message}. This extracts the submessages as separate
1172Rmail messages, and inserts them following the digest. The digest
1173message itself is flagged as deleted.
1174
6bf7aab6
DL
1175@node Rmail Rot13
1176@section Reading Rot13 Messages
1177@cindex rot13 code
1178
1179 Mailing list messages that might offend some readers are sometimes
1180encoded in a simple code called @dfn{rot13}---so named because it
1181rotates the alphabet by 13 letters. This code is not for secrecy, as it
1182provides none; rather, it enables those who might be offended to avoid
444246ca 1183seeing the real text of the message.
6bf7aab6
DL
1184
1185@findex rot13-other-window
444246ca 1186 To view a buffer which uses the rot13 code, use the command @kbd{M-x
6bf7aab6
DL
1187rot13-other-window}. This displays the current buffer in another window
1188which applies the code when displaying the text.
1189
1190@node Movemail
ea20444b 1191@section @code{movemail} program
6bf7aab6
DL
1192@cindex @code{movemail} program
1193
1be48cfa
RS
1194 When invoked for the first time, Rmail attempts to locate the
1195@code{movemail} program and determine its version. There are two
1196versions of @code{movemail} program: the native one, shipped with GNU
1197Emacs (the ``emacs version'') and the one included in GNU mailutils
ec9bd344 1198(the ``mailutils version,'' @pxref{movemail,,,mailutils,GNU
1be48cfa 1199mailutils}). They support the same command line syntax and the same
444246ca 1200basic subset of options. However, the Mailutils version offers
1be48cfa 1201additional features.
ea20444b 1202
1be48cfa
RS
1203 The Emacs version of @code{movemail} is able to retrieve mail from
1204usual UNIX mailbox formats and from remote mailboxes using the POP3
1205protocol.
1206
1207 The Mailutils version is able to handle a wide set of mailbox
1208formats, such as plain UNIX mailboxes, @code{maildir} and @code{MH}
1209mailboxes, etc. It is able to retrieve remote mail using POP3 or
1210IMAP4 protocol, and can retrieve mail from them using a TLS encrypted
1211channel. It also accepts mailbox argument in the @acronym{URL} form.
1212The detailed description of mailbox @acronym{URL}s can be found in
1213@ref{URL,,,mailutils,Mailbox URL Formats}. In short, a @acronym{URL}
1214is:
ea20444b
EZ
1215
1216@smallexample
1217@var{proto}://[@var{user}[:@var{password}]@@]@var{host-or-file-name}
1218@end smallexample
1219
1220@noindent
1221where square brackets denote optional elements.
1222
1223@table @var
1224@item proto
1225Specifies the @dfn{mailbox protocol}, or @dfn{format} to
1226use. The exact semantics of the rest of @acronym{URL} elements depends
d1019816 1227on the actual value of @var{proto} (see below).
ea20444b
EZ
1228
1229@item user
1230User name to access the remote mailbox.
1231
1232@item password
1233User password to access the remote mailbox.
1234
1235@item host-or-file-name
1236Hostname of the remote server for remote mailboxes or file name of a
1237local mailbox.
1238@end table
1239
d1019816 1240@noindent
ea20444b
EZ
1241@var{Proto} can be one of:
1242
d1019816 1243@table @code
ea20444b
EZ
1244@item mbox
1245Usual UNIX mailbox format. In this case, neither @var{user} nor
1246@var{pass} are used, and @var{host-or-file-name} denotes the file name of
1247the mailbox file, e.g., @code{mbox://var/spool/mail/smith}.
1248
1249@item mh
1250A local mailbox in the @acronym{MH} format. @var{User} and
1251@var{pass} are not used. @var{Host-or-file-name} denotes the name of
1252@acronym{MH} folder, e.g., @code{mh://Mail/inbox}.
1253
1254@item maildir
1255A local mailbox in the @acronym{maildir} format. @var{User} and
1256@var{pass} are not used, and @var{host-or-file-name} denotes the name of
1257@code{maildir} mailbox, e.g., @code{maildir://mail/inbox}.
1258
1259@item file
1260Any local mailbox format. Its actual format is detected automatically
1261by @code{movemail}.
1262
1263@item pop
1264A remote mailbox to be accessed via POP3 protocol. @var{User}
1265specifies the remote user name to use, @var{pass} may be used to
1266specify the user password, @var{host-or-file-name} is the name or IP
1267address of the remote mail server to connect to; e.g.,
1268@code{pop://smith:guessme@@remote.server.net}.
32823124 1269
ea20444b
EZ
1270@item imap
1271A remote mailbox to be accessed via IMAP4 protocol. @var{User}
1272specifies the remote user name to use, @var{pass} may be used to
1273specify the user password, @var{host-or-file-name} is the name or IP
1274address of the remote mail server to connect to;
1275e.g., @code{imap://smith:guessme@@remote.server.net}.
1276@end table
1277
1be48cfa
RS
1278 Alternatively, you can specify the file name of the mailbox to use.
1279This is equivalent to specifying the @samp{file} protocol:
ea20444b
EZ
1280
1281@smallexample
1be48cfa 1282/var/spool/mail/@var{user} @equiv{} file://var/spool/mail/@var{user}
ea20444b
EZ
1283@end smallexample
1284
1285@vindex rmail-movemail-program
1286@vindex rmail-movemail-search-path
1be48cfa
RS
1287 The variable @code{rmail-movemail-program} controls which version of
1288@code{movemail} to use. If that is a string, it specifies the
1289absolute file name of the @code{movemail} executable. If it is
1290@code{nil}, Rmail searches for @code{movemail} in the directories
1291listed in @code{rmail-movemail-search-path} and @code{exec-path}, then
1292in @code{exec-directory}.
32823124 1293
ea20444b
EZ
1294@node Remote Mailboxes
1295@section Retrieving Mail from Remote Mailboxes
1296@pindex movemail
1297
6bf7aab6 1298 Some sites use a method called POP for accessing users' inbox data
ea20444b
EZ
1299instead of storing the data in inbox files. The @code{Emacs
1300movemail} can work with POP if you compile it with the macro
1301@code{MAIL_USE_POP} defined. (You can achieve that by specifying
1302@samp{--with-pop} when you run @code{configure} during the
1303installation of Emacs.)
1304
444246ca
KB
1305The Mailutils @code{movemail} by default supports POP, unless it was
1306configured with @samp{--disable-pop} option.
ea20444b
EZ
1307
1308Both versions of @code{movemail} only work with POP3, not with older
6bf7aab6
DL
1309versions of POP.
1310
60a96371 1311@cindex @env{MAILHOST} environment variable
ea20444b
EZ
1312@cindex POP mailboxes
1313 No matter which flavor of @code{movemail} you use, you can specify
1314POP inbox by using POP @dfn{URL} (@pxref{Movemail}). A POP
1315@acronym{URL} is a ``file name'' of the form
1316@samp{pop://@var{username}@@@var{hostname}}, where
1317@var{hostname} is the host name or IP address of the remote mail
1318server and @var{username} is the user name on that server.
1319Additionally, you may specify the password in the mailbox @acronym{URL}:
1320@samp{pop://@var{username}:@var{password}@@@var{hostname}}. In this
1321case, @var{password} takes preference over the one set by
1322@code{rmail-remote-password}. This is especially useful if you have
32823124 1323several remote mailboxes with different passwords.
ea20444b 1324
444246ca
KB
1325 For backward compatibility, Rmail also supports two alternative ways
1326of specifying remote POP mailboxes. First, specifying an inbox name
1327in the form @samp{po:@var{username}:@var{hostname}} is equivalent to
1328@samp{pop://@var{username}@@@var{hostname}}. Alternatively, you may
1329set a ``file name'' of @samp{po:@var{username}} in the inbox list of
1330an Rmail file. @code{movemail} will handle such a name by opening a
1331connection to the POP server. In this case, the @env{MAILHOST}
1332environment variable specifies the machine on which to look for the
1333POP server.
ea20444b
EZ
1334
1335@cindex IMAP mailboxes
1336 Another method for accessing remote mailboxes is IMAP. This method is
b2c09a2e 1337supported only by the Mailutils @code{movemail}. To specify an IMAP
ea20444b
EZ
1338mailbox in the inbox list, use the following mailbox @acronym{URL}:
1339@samp{imap://@var{username}[:@var{password}]@@@var{hostname}}. The
32823124 1340@var{password} part is optional, as described above.
ea20444b
EZ
1341
1342@vindex rmail-remote-password
1343@vindex rmail-remote-password-required
6bf7aab6
DL
1344@vindex rmail-pop-password
1345@vindex rmail-pop-password-required
ea20444b
EZ
1346 Accessing a remote mailbox may require a password. Rmail uses the
1347following algorithm to retrieve it:
1348
1349@enumerate
32823124 1350@item
38be61d5
EZ
1351If the @var{password} is present in mailbox URL (see above), it is
1352used.
32823124 1353@item
38be61d5
EZ
1354If the variable @code{rmail-remote-password} is non-@code{nil}, its
1355value is used.
1356@item
1357Otherwise, if @code{rmail-remote-password-required} is non-@code{nil},
1358then Rmail will ask you for the password to use.
1359@item
1360Otherwise, Rmail assumes no password is required.
ea20444b
EZ
1361@end enumerate
1362
df7593dd
KB
1363 For compatibility with previous versions, the variables
1364@code{rmail-pop-password} and @code{rmail-pop-password-required} may
1365be used instead of @code{rmail-remote-password} and
1366@code{rmail-remote-password-required}.
6bf7aab6
DL
1367
1368@vindex rmail-movemail-flags
1369 If you need to pass additional command-line flags to @code{movemail},
1370set the variable @code{rmail-movemail-flags} a list of the flags you
1371wish to use. Do not use this variable to pass the @samp{-p} flag to
1372preserve your inbox contents; use @code{rmail-preserve-inbox} instead.
1373
1374@cindex Kerberos POP authentication
1375 The @code{movemail} program installed at your site may support
1376Kerberos authentication. If it is
1377supported, it is used by default whenever you attempt to retrieve
1378POP mail when @code{rmail-pop-password} and
1379@code{rmail-pop-password-required} are unset.
1380
4946337d 1381@cindex reverse order in POP inboxes
6bf7aab6
DL
1382 Some POP servers store messages in reverse order. If your server does
1383this, and you would rather read your mail in the order in which it was
1384received, you can tell @code{movemail} to reverse the order of
1385downloaded messages by adding the @samp{-r} flag to
1386@code{rmail-movemail-flags}.
ab5796a9 1387
ea20444b 1388@cindex TLS encryption (Rmail)
b2c09a2e 1389 Mailutils @code{movemail} supports TLS encryption. If you wish to
ea20444b
EZ
1390use it, add the @samp{--tls} flag to @code{rmail-movemail-flags}.
1391
1392@node Other Mailbox Formats
1393@section Retrieving Mail from Local Mailboxes in Various Formats
1394
1395 If your incoming mail is stored on a local machine in a format other
444246ca
KB
1396than UNIX mailbox, you will need the Mailutils @code{movemail} to
1397retrieve it. @xref{Movemail}, for the detailed description of
1398@code{movemail} versions. For example, to access mail from a inbox in
1399@code{maildir} format located in @file{/var/spool/mail/in}, you would
1400include the following in the Rmail inbox list:
ea20444b
EZ
1401
1402@smallexample
1403maildir://var/spool/mail/in
1404@end smallexample
1405
ab5796a9
MB
1406@ignore
1407 arch-tag: 034965f6-38df-47a2-a9f1-b8bc8ab37e23
1408@end ignore