Go to the previous, next chapter.
To send a message in Emacs, you start by typing a command (C-x m) to select and initialize the *mail* buffer.
Then you edit the text and headers of the message in this buffer,
and type another command (C-c C-s or C-c
C-c) to send the message.
- C-x m Begin composing a message to send (
mail). C-x 4 m Likewise, but display
the message in another window
C-x 5 m Likewise, but make a new frame (
C-c C-s In Mail mode, send the message (
C-c C-c Send the message and bury the mail buffer (
The command C-x m (
mail) selects a buffer named *mail*
and initializes it with the skeleton of an outgoing message.
C-x 4 m (
mail-other-window) selects the *mail* buffer in
a different window, leaving the previous current buffer visible. C-x 5 m (
creates a new frame to select the *mail* buffer.
Because the mail composition buffer is an ordinary Emacs buffer,
you can switch to other buffers while in the middle of composing mail, and switch back later (or never). If you use the C-x
m command again when you have been composing
another message but have not sent it, you are asked to
confirm before the old message is erased. If you answer
n, the *mail* buffer is left selected with its old contents, so you can
finish the old message and send it. C-u C-x m
is another way to do this. Sending the message marks
the *mail* buffer
``unmodified'', which avoids the need for confirmation when C-x m is next used.
If you are composing a message in the *mail* buffer and
want to send another message before finishing the
first, rename the *mail* buffer using M-x rename-uniquely (see section Miscellaneous Buffer Operations). Then you can use C-x
m or its variants described above to make a new *mail* buffer.
Once you've done that, you can work with each mail buffer independently.
- Format: Format of the mail being composed.
- Headers: Details of permitted mail header fields.
- Aliases: Abbreviating and grouping mail addresses.
- Mode: Special commands for editing mail being
- Spook: How to distract the NSA's attention.
In addition to the text or body,
a message has header fields which say who
sent it, when, to whom, why, and so on. Some header fields such as the date and sender are
created automatically after the message is sent.
Others, such as the recipient names, must be specified by you in order to send the message properly.
Mail mode provides a few commands to help you edit
some header fields, and some are preinitialized in the buffer
automatically at times. You can insert and edit header fields using ordinary editing
The line in the buffer that says
--text follows this line--
is a special delimiter that separates the headers you have specified from the text. Whatever follows this line is the text of the message;
the headers precede it. The delimiter line itself does not appear in the message actually sent. The text
used for the delimiter line is controlled by the variable
Here is an example of what the headers and text in
the mail buffer
might look like.
Subject: The Emacs Manual
--Text follows this line--
Please ignore this message.
A header field in the mail buffer starts with a field name at the beginning of a
line, terminated by a colon. Upper and lower case are equivalent in field names (and in
mailing addresses also). After the colon and optional whitespace
comes the contents of the field.
You can use any name you like for a header field, but normally people use only standard
field names with accepted meanings. Here is a table of fields commonly used in outgoing
- To This field contains the mailing addresses to which the message is addressed.
- Subject The contents of the Subject field should be a piece of text that says what the message
is about. The reason Subject fields are useful is that most mail-reading programs can provide a summary of messages,
listing the subject of each message but not its text.
CC This field contains additional mailing
addresses to send the message to, but whose readers
should not regard the message as addressed to them.
BCC This field contains additional mailing addresses to send the message to, which should not appear in the header of the message actually sent. Copies sent this way are called blind
To send a blind carbon copy of every outgoing message
to yourself, set the variable
FCC This field contains the name of one file and directs Emacs to append a copy
of the message to that file when you send the message. If the file is in Rmail format, Emacs writes the message to Rmail format; otherwise, Emacs writes the message in system mail
To put a fixed file name as in FCC field each time you start editing an
outgoing message, set the variable
to that file name. Unless you remove the FCC field before sending, the message will be written into that file when it is sent.
From Use the From field to say who you are, when the account you
are using to send the mail is not your own. The
contents of the From field should be a valid mailing address, since replies
will normally go there.
Reply-to Use this field to direct replies to a different address. Most mail-reading programs (including Rmail) automatically send
replies to the Reply-to address in preference to the From
address. By adding a Reply-to field to your header, you can work around any
problems your From address may cause for replies.
To put a fixed Reply-to address into every outgoing message, set the variable
mail-default-reply-to to that address (as
a string). Then
initializes the message with a Reply-to
field as specified. You can delete or alter that header field before you send the message, if you wish. When Emacs starts up, if the
REPLYTO is set,
mail-default-reply-to is initialized from that
In-reply-to This field contains a piece of text
describing a message you are replying to. Some mail systems can use this information to correlate related
pieces of mail. Normally this field is filled in by
Rmail when you reply to a message in Rmail, and you
never need to think about it (see section Reading Mail with
The To, CC, BCC and FCC fields can
appear any number of times, to specify many places to send the message. The To, CC, and BCC
fields can have continuation lines. All the lines starting with whitespace, following the line on which the field starts,
are considered part of the field. For example,
To: , ,
When you send the message, if you didn't write a From
field yourself, Emacs puts in one for you. The variable
mail-from-style controls the format:
- nil Just the email address, as in . parens
Both email address and full name, as in (Elvis Parsley). angles
Both email address and full name, as in Elvis Parsley .
You can define mail aliases in a file
named ~/.mailrc. These are short mnemonic names which stand for mail addresses or groups of mail
addresses. Like many other mail programs, Emacs expands
aliases when they occur in the To, From, CC, BCC,
and Reply-to fields, plus their Resent- variants.
To define an alias in ~/.mailrc, write a line in the following format:
alias shortaddress fulladdresses
Here fulladdresses stands for one or more mail
addresses for shortaddress to expand into. Separate multiple addresses with
spaces; if an address contains a space, quote the whole address with a pair of
For instance, to make
maingnu stand for
plus a local address of your own, put in this line:
alias maingnu local-gnu
Emacs also recognizes include commands in .mailrc files. They look like
The file ~/.mailrc is used primarily by other mail-reading
programs; it can contain various other commands. Emacs ignores everything in it except for
alias definitions and include commands.
Another way to define a mail alias, within Emacs
alone, is with the
define-mail-alias command. It prompts for the alias and then the full
address. You can use it to define aliases in your .emacs file, like this:
(define-mail-alias "maingnu" "")
define-mail-alias records aliases by
adding them to a variable named
mail-aliases. If you are comfortable with
manipulating Lisp lists, you can set
directly. The initial value of
t, which means that Emacs should read .mailrc to get the proper
You can specify a different file name to use instead of ~/.mailrc by setting
Normally, Emacs expands aliases when you send the message.
If you like, you can have mail aliases expand as
abbrevs, as soon as you type them in (see section Abbrevs).
To enable this feature, execute the following:
(add-hook 'mail-setup-hook 'mail-abbrevs-setup)
This can go in your .emacs file. See section Hooks.
If you use this feature, you must use
define-mail-abbrev instead of
define-mail-alias; the latter does not work with this
package. Note that the mail abbreviation package uses
mail-aliases, and that all
alias names are converted to lower case.
The mail abbreviation package also provides the C-c
mail-interactive-insert-alias) command, which reads an alias name (with completion) and inserts its definition at point. This is useful when editing the message text itself or
a header field such as Subject in which Emacs does not normally expand
Note that abbrevs expand only if you insert a word-separator character afterward. However, you can rebind C-n
and M-> to cause expansion as well. Here's how to do that:
(define-key mail-mode-map "\C-n" 'mail-abbrev-next-line)
(define-key mail-mode-map "\M->" 'mail-abbrev-end-of-buffer)
The major mode used in the mail buffer is Mail mode,
which is much like Text mode except that various
special commands are provided on the C-c prefix. These commands all have to do
specifically with editing or sending the message.
- C-c C-s Send the message, and leave the mail buffer selected (
mail-send). C-c C-c Send the message, and select some other buffer (
C-c C-f C-t Move to the To header field, creating one if there is none
mail-to). C-c C-f C-s Move to the Subject
header field, creating one if there is none (
C-c C-f C-c Move to the CC header field, creating one if there is none
mail-cc). C-c C-f C-b Move to the BCC
header field, creating one if there is none (
C-c C-f C-f Move to the FCC header field, creating one if there is
mail-fcc). C-c C-t Move to
the beginning of the message body text (
mail-text). C-c C-w Insert the file ~/.signature
at the end of the message text (
C-c C-y Yank the selected message from Rmail (
mail-yank-original). This command does nothing unless your command to start sending a message
was issued with Rmail. C-c C-q Fill all paragraphs of yanked old messages, each
mail-fill-yanked-message). M-x ispell-message Do spelling correction on the message text, but not
on citations from other messages.
There are two ways to send the message. C-c C-s
mail-send) sends the message and marks the mail
buffer unmodified, but leaves that buffer selected so that you can modify the message (perhaps with new recipients) and send it again. C-c
mail-send-and-exit) sends and
then deletes the window or switches to another buffer. It puts the mail
buffer at the lowest priority for reselection by
default, since you are finished with using it. This is the usual way to send the message.
Mail mode provides special commands for editing the
headers and text of the message
before you send it. There are five commands defined to move point to particular header fields, all based on the
prefix C-c C-f (C-f is for ``field''). They are C-c C-f C-t
mail-to) to move to the To
field, C-c C-f C-s (
for the Subject field, C-c C-f C-c (
mail-cc) for the CC field, C-c
C-f C-b (
mail-bcc) for the BCC
field, and C-c C-f C-f (
for the FCC field. If the field in question does not exist, these commands
create one. We provide special motion commands for these particular fields because they
are the fields users most often want to edit.
C-c C-t (
mail-text) moves point
to just after the header separator line---that is, to the beginning of the message body text.
C-c C-w (
adds a standard piece text at the end of the message to say more about who you are. The text comes from the file .signature in your home
directory. To insert your signature automatically, set
nil; then starting a mail message automatically inserts the contents of your .signature
file. If you want to omit your signature from a particular message,
delete it from the buffer before you send the message.
When mail sending is invoked from the Rmail mail reader using an Rmail command,
C-c C-y can be used inside the mail buffer to insert the text
of the message you are replying to. Normally it indents
each line of that message four spaces and eliminates
most header fields. A numeric argument specifies the number of spaces to indent. An
argument of just C-u says not to indent at all and not to eliminate anything. C-c
C-y always uses the current message from the
Rmail buffer, so you can insert several old messages by
selecting one in Rmail, switching to *mail* and yanking
it, then switching back to Rmail to select another.
You can specify the text for C-c C-y to
insert at the beginning of each line: set
to the desired string. (A value of
means to use indentation; this is the default.)
However, C-u C-c C-y never adds anything at the beginning of the inserted
lines, regardless of the value of
After using C-c C-y, you can use the command
C-c C-q (
mail-fill-yanked-message) to fill the paragraphs of the yanked old message or messages. One use of C-c C-q fills
all such paragraphs, each one individually. See section Filling
You can do spelling correction on the message text you have written with the command M-x ispell-message.
If you have yanked an incoming message into the
outgoing draft, this command skips what was yanked, but
it checks the text that you yourself inserted. (It
looks for indentation or
mail-yank-prefix to distinguish the cited lines
from your input.) See section Checking and Correcting
Mail mode defines the character
% as a word separator; this is helpful for using the word commands to edit mail addresses.
Mail mode is normally used in buffers set up
automatically by the
mail command and related commands. However, you can also switch
to Mail mode in a file-visiting
buffer. That is a useful thing to do if you have saved
draft message text
in a file. In a file-visiting buffer, C-c C-c does not clear the modified
flag, because only saving the file should do that. As
a result, you don't get a warning about trying to send the same message twice.
Turning on Mail mode (which C-x m does
automatically) runs the normal hooks
mail-mode-hook. Initializing a new
outgoing message runs the normal hook
mail-setup-hook; if you want to add special fields
to your mail header or make other changes to the
appearance of the mail buffer,
use that hook. See section Hooks.
The main difference between these hooks is just when they are invoked. Whenever you
type M-x mail,
mail-mode-hook runs as soon as the *mail* buffer is
created. Then the
mail-setup function puts
in the default contents of the buffer. After these
default contents are inserted,
M-x spook adds a line of randomly chosen keywords to an outgoing mail message. The
keywords are chosen from a list of words that suggest
you are discussing something subversive.
The idea behind this feature is that the suspicion that the NSA snoops on all
electronic mail messages that contain keywords
suggesting they might be interested. (The NSA says they don't, but that's what they would
say.) The idea is that if lots of people add suspicious words to their messages, the NSA
will get so busy with spurious input that they will have to give up reading it all.
Here's how to insert spook keywords automatically whenever you start entering an
(add-hook 'mail-setup-hook 'spook)
Whether or not this confuses the NSA, it at least amuses people.