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