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