Bump to version 22.1.92
[bpt/emacs.git] / man / message.texi
CommitLineData
6bf7aab6
DL
1\input texinfo @c -*-texinfo-*-
2
a1720df0 3@setfilename ../info/message
23f87bed 4@settitle Message Manual
6bf7aab6
DL
5@synindex fn cp
6@synindex vr cp
7@synindex pg cp
18f952d5 8@copying
6bf7aab6
DL
9This file documents Message, the Emacs message composition mode.
10
b223e22d 11Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3f548a7c 122004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
6bf7aab6 13
18f952d5 14@quotation
9d3d5390 15Permission is granted to copy, distribute and/or modify this document
678e7c71 16under the terms of the GNU Free Documentation License, Version 1.2 or
8ac08dea
DL
17any later version published by the Free Software Foundation; with no
18Invariant Sections, with the Front-Cover texts being ``A GNU
9d3d5390
DL
19Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
20license is included in the section entitled ``GNU Free Documentation
a03e63d9 21License'' in the Emacs manual.
6bf7aab6 22
9d3d5390
DL
23(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
24this GNU Manual, like GNU software. Copies published by the Free
25Software Foundation raise funds for GNU development.''
a03e63d9
DL
26
27This document is part of a collection distributed under the GNU Free
28Documentation License. If you want to distribute this document
29separately from the collection, you can do so by adding a copy of the
30license to the document, as described in section 6 of the license.
18f952d5
KB
31@end quotation
32@end copying
33
34@dircategory Emacs
35@direntry
36* Message: (message). Mail and news composition mode that goes with Gnus.
37@end direntry
38@iftex
39@finalout
40@end iftex
41@setchapternewpage odd
6bf7aab6 42
6bf7aab6 43@titlepage
23f87bed 44@title Message Manual
6bf7aab6
DL
45
46@author by Lars Magne Ingebrigtsen
47@page
23f87bed 48
6bf7aab6 49@vskip 0pt plus 1filll
18f952d5 50@insertcopying
6bf7aab6
DL
51@end titlepage
52@page
53
6bf7aab6
DL
54@node Top
55@top Message
56
57All message composition from Gnus (both mail and news) takes place in
58Message mode buffers.
59
60@menu
61* Interface:: Setting up message buffers.
62* Commands:: Commands you can execute in message mode buffers.
63* Variables:: Customizing the message buffers.
64* Compatibility:: Making Message backwards compatible.
65* Appendices:: More technical things.
84247bb5 66* GNU Free Documentation License:: The license for this documentation.
6bf7aab6
DL
67* Index:: Variable, function and concept index.
68* Key Index:: List of Message mode keys.
69@end menu
70
afc74995
MB
71@c Adjust ../Makefile.in if you change the following lines:
72Message is distributed with Gnus. The Gnus distribution
73@c
dc5d7d59 74corresponding to this manual is Gnus v5.11.
6bf7aab6
DL
75
76
77@node Interface
78@chapter Interface
79
80When a program (or a person) wants to respond to a message -- reply,
81follow up, forward, cancel -- the program (or person) should just put
82point in the buffer where the message is and call the required command.
83@code{Message} will then pop up a new @code{message} mode buffer with
84appropriate headers filled out, and the user can edit the message before
85sending it.
86
87@menu
88* New Mail Message:: Editing a brand new mail message.
89* New News Message:: Editing a brand new news message.
90* Reply:: Replying via mail.
91* Wide Reply:: Responding to all people via mail.
92* Followup:: Following up via news.
93* Canceling News:: Canceling a news article.
94* Superseding:: Superseding a message.
95* Forwarding:: Forwarding a message via news or mail.
96* Resending:: Resending a mail message.
97* Bouncing:: Bouncing a mail message.
23f87bed 98* Mailing Lists:: Send mail to mailing lists.
6bf7aab6
DL
99@end menu
100
715488f1
MB
101You can customize the Message Mode tool bar, see @kbd{M-x
102customize-apropos RET message-tool-bar}. This feature is only available
103in Emacs.
6bf7aab6
DL
104
105@node New Mail Message
106@section New Mail Message
107
108@findex message-mail
9d3d5390 109The @code{message-mail} command pops up a new message buffer.
6bf7aab6
DL
110
111Two optional parameters are accepted: The first will be used as the
112@code{To} header and the second as the @code{Subject} header. If these
113are @code{nil}, those two headers will be empty.
114
115
116@node New News Message
117@section New News Message
118
119@findex message-news
9d3d5390 120The @code{message-news} command pops up a new message buffer.
6bf7aab6
DL
121
122This function accepts two optional parameters. The first will be used
123as the @code{Newsgroups} header and the second as the @code{Subject}
124header. If these are @code{nil}, those two headers will be empty.
125
126
127@node Reply
128@section Reply
129
130@findex message-reply
131The @code{message-reply} function pops up a message buffer that's a
132reply to the message in the current buffer.
133
134@vindex message-reply-to-function
135Message uses the normal methods to determine where replies are to go
136(@pxref{Responses}), but you can change the behavior to suit your needs
137by fiddling with the @code{message-reply-to-function} variable.
138
139If you want the replies to go to the @code{Sender} instead of the
140@code{From}, you could do something like this:
141
142@lisp
143(setq message-reply-to-function
144 (lambda ()
145 (cond ((equal (mail-fetch-field "from") "somebody")
9d3d5390
DL
146 (list (cons 'To (mail-fetch-field "sender"))))
147 (t
6bf7aab6
DL
148 nil))))
149@end lisp
150
151This function will be called narrowed to the head of the article that is
152being replied to.
153
112d84ef
MB
154As you can see, this function should return a list. In this case, it
155returns @code{((To . "Whom"))} if it has an opinion as to what the To
156header should be. If it does not, it should just return @code{nil}, and
157the normal methods for determining the To header will be used.
158
159Each list element should be a cons, where the @sc{car} should be the
160name of a header (e.g. @code{Cc}) and the @sc{cdr} should be the header
161value (e.g. @samp{larsi@@ifi.uio.no}). All these headers will be
162inserted into the head of the outgoing mail.
6bf7aab6
DL
163
164
165@node Wide Reply
166@section Wide Reply
167
168@findex message-wide-reply
169The @code{message-wide-reply} pops up a message buffer that's a wide
170reply to the message in the current buffer. A @dfn{wide reply} is a
171reply that goes out to all people listed in the @code{To}, @code{From}
172(or @code{Reply-to}) and @code{Cc} headers.
173
174@vindex message-wide-reply-to-function
175Message uses the normal methods to determine where wide replies are to go,
176but you can change the behavior to suit your needs by fiddling with the
177@code{message-wide-reply-to-function}. It is used in the same way as
9d3d5390 178@code{message-reply-to-function} (@pxref{Reply}).
6bf7aab6 179
23f87bed 180@vindex message-dont-reply-to-names
9d3d5390 181Addresses that match the @code{message-dont-reply-to-names} regular
6bf7aab6
DL
182expression will be removed from the @code{Cc} header.
183
23f87bed
MB
184@vindex message-wide-reply-confirm-recipients
185If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
186will be asked to confirm that you want to reply to multiple
187recipients. The default is @code{nil}.
6bf7aab6
DL
188
189@node Followup
190@section Followup
191
192@findex message-followup
193The @code{message-followup} command pops up a message buffer that's a
194followup to the message in the current buffer.
195
196@vindex message-followup-to-function
197Message uses the normal methods to determine where followups are to go,
198but you can change the behavior to suit your needs by fiddling with the
199@code{message-followup-to-function}. It is used in the same way as
200@code{message-reply-to-function} (@pxref{Reply}).
201
202@vindex message-use-followup-to
203The @code{message-use-followup-to} variable says what to do about
204@code{Followup-To} headers. If it is @code{use}, always use the value.
205If it is @code{ask} (which is the default), ask whether to use the
206value. If it is @code{t}, use the value unless it is @samp{poster}. If
207it is @code{nil}, don't use the value.
208
209
210@node Canceling News
211@section Canceling News
212
213@findex message-cancel-news
214The @code{message-cancel-news} command cancels the article in the
215current buffer.
216
23f87bed
MB
217@vindex message-cancel-message
218The value of @code{message-cancel-message} is inserted in the body of
219the cancel message. The default is @samp{I am canceling my own
220article.}.
221
222@cindex Cancel Locks
223@vindex message-insert-canlock
224@cindex canlock
225When Message posts news messages, it inserts @code{Cancel-Lock}
226headers by default. This is a cryptographic header that ensures that
227only you can cancel your own messages, which is nice. The downside
228is that if you lose your @file{.emacs} file (which is where Gnus
229stores the secret cancel lock password (which is generated
230automatically the first time you use this feature)), you won't be
531e5812 231able to cancel your message. If you want to manage a password yourself,
8903a9c8
MB
232you can put something like the following in your @file{~/.gnus.el} file:
233
234@lisp
531e5812 235(setq canlock-password "geheimnis"
8903a9c8
MB
236 canlock-password-for-verify canlock-password)
237@end lisp
23f87bed
MB
238
239Whether to insert the header or not is controlled by the
240@code{message-insert-canlock} variable.
241
242Not many news servers respect the @code{Cancel-Lock} header yet, but
243this is expected to change in the future.
244
6bf7aab6
DL
245
246@node Superseding
247@section Superseding
248
249@findex message-supersede
250The @code{message-supersede} command pops up a message buffer that will
251supersede the message in the current buffer.
252
253@vindex message-ignored-supersedes-headers
254Headers matching the @code{message-ignored-supersedes-headers} are
255removed before popping up the new message buffer. The default is@*
256@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
58090a8d
MB
257^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
258Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
259^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
260^X-Payment:}.
6bf7aab6
DL
261
262
263
264@node Forwarding
265@section Forwarding
266
267@findex message-forward
268The @code{message-forward} command pops up a message buffer to forward
269the message in the current buffer. If given a prefix, forward using
270news.
271
272@table @code
9d3d5390
DL
273@item message-forward-ignored-headers
274@vindex message-forward-ignored-headers
275All headers that match this regexp will be deleted when forwarding a message.
6bf7aab6
DL
276
277@item message-make-forward-subject-function
278@vindex message-make-forward-subject-function
279A list of functions that are called to generate a subject header for
280forwarded messages. The subject generated by the previous function is
281passed into each successive function.
282
283The provided functions are:
284
285@table @code
286@item message-forward-subject-author-subject
287@findex message-forward-subject-author-subject
288Source of article (author or newsgroup), in brackets followed by the
289subject.
290
291@item message-forward-subject-fwd
292Subject of article with @samp{Fwd:} prepended to it.
293@end table
294
295@item message-wash-forwarded-subjects
296@vindex message-wash-forwarded-subjects
297If this variable is @code{t}, the subjects of forwarded messages have
9d3d5390 298the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
6bf7aab6
DL
299@samp{(fwd)}) removed before the new subject is
300constructed. The default value is @code{nil}.
301
9d3d5390
DL
302@item message-forward-as-mime
303@vindex message-forward-as-mime
304If this variable is @code{t} (the default), forwarded messages are
23f87bed 305included as inline @acronym{MIME} RFC822 parts. If it's @code{nil}, forwarded
9d3d5390 306messages will just be copied inline to the new message, like previous,
23f87bed
MB
307non @acronym{MIME}-savvy versions of Gnus would do.
308
309@item message-forward-before-signature
310@vindex message-forward-before-signature
311If non-@code{nil}, put forwarded message before signature, else after.
312
6bf7aab6
DL
313@end table
314
315
316@node Resending
317@section Resending
318
319@findex message-resend
320The @code{message-resend} command will prompt the user for an address
321and resend the message in the current buffer to that address.
322
323@vindex message-ignored-resent-headers
324Headers that match the @code{message-ignored-resent-headers} regexp will
8903a9c8 325be removed before sending the message.
6bf7aab6
DL
326
327
328@node Bouncing
329@section Bouncing
330
331@findex message-bounce
332The @code{message-bounce} command will, if the current buffer contains a
333bounced mail message, pop up a message buffer stripped of the bounce
334information. A @dfn{bounced message} is typically a mail you've sent
335out that has been returned by some @code{mailer-daemon} as
9d3d5390 336undeliverable.
6bf7aab6
DL
337
338@vindex message-ignored-bounced-headers
339Headers that match the @code{message-ignored-bounced-headers} regexp
340will be removed before popping up the buffer. The default is
58090a8d 341@samp{^\\(Received\\|Return-Path\\|Delivered-To\\):}.
6bf7aab6
DL
342
343
23f87bed
MB
344@node Mailing Lists
345@section Mailing Lists
346
347@cindex Mail-Followup-To
348Sometimes while posting to mailing lists, the poster needs to direct
349followups to the post to specific places. The Mail-Followup-To (MFT)
58090a8d 350was created to enable just this. Three example scenarios where this is
23f87bed
MB
351useful:
352
353@itemize @bullet
354@item
355A mailing list poster can use MFT to express that responses should be
356sent to just the list, and not the poster as well. This will happen
357if the poster is already subscribed to the list.
358
359@item
360A mailing list poster can use MFT to express that responses should be
361sent to the list and the poster as well. This will happen if the poster
362is not subscribed to the list.
363
364@item
365If a message is posted to several mailing lists, MFT may also be used
366to direct the following discussion to one list only, because
367discussions that are spread over several lists tend to be fragmented
368and very difficult to follow.
369
370@end itemize
371
372Gnus honors the MFT header in other's messages (i.e. while following
373up to someone else's post) and also provides support for generating
374sensible MFT headers for outgoing messages as well.
375
376@c @menu
377@c * Honoring an MFT post:: What to do when one already exists
378@c * Composing with a MFT header:: Creating one from scratch.
379@c @end menu
380
381@c @node Composing with a MFT header
382@subsection Composing a correct MFT header automagically
383
384The first step in getting Gnus to automagically generate a MFT header
385in posts you make is to give Gnus a list of the mailing lists
386addresses you are subscribed to. You can do this in more than one
387way. The following variables would come in handy.
388
389@table @code
390
391@vindex message-subscribed-addresses
392@item message-subscribed-addresses
393This should be a list of addresses the user is subscribed to. Its
394default value is @code{nil}. Example:
395@lisp
396(setq message-subscribed-addresses
397 '("ding@@gnus.org" "bing@@noose.org"))
398@end lisp
399
400@vindex message-subscribed-regexps
401@item message-subscribed-regexps
402This should be a list of regexps denoting the addresses of mailing
403lists subscribed to. Default value is @code{nil}. Example: If you
404want to achieve the same result as above:
405@lisp
406(setq message-subscribed-regexps
407 '("\\(ding@@gnus\\)\\|\\(bing@@noose\\)\\.org")
408@end lisp
409
410@vindex message-subscribed-address-functions
411@item message-subscribed-address-functions
412This can be a list of functions to be called (one at a time!!) to
413determine the value of MFT headers. It is advisable that these
414functions not take any arguments. Default value is @code{nil}.
415
416There is a pre-defined function in Gnus that is a good candidate for
417this variable. @code{gnus-find-subscribed-addresses} is a function
418that returns a list of addresses corresponding to the groups that have
419the @code{subscribed} (@pxref{Group Parameters, ,Group Parameters,
420gnus, The Gnus Manual}) group parameter set to a non-@code{nil} value.
421This is how you would do it.
422
423@lisp
424(setq message-subscribed-address-functions
425 '(gnus-find-subscribed-addresses))
426@end lisp
427
428@vindex message-subscribed-address-file
429@item message-subscribed-address-file
f0cdbdfa 430You might be one organized human freak and have a list of addresses of
23f87bed
MB
431all subscribed mailing lists in a separate file! Then you can just
432set this variable to the name of the file and life would be good.
433
434@end table
435
436You can use one or more of the above variables. All their values are
437``added'' in some way that works :-)
438
439Now you are all set. Just start composing a message as you normally do.
440And just send it; as always. Just before the message is sent out, Gnus'
441MFT generation thingy kicks in and checks if the message already has a
442MFT field. If there is one, it is left alone. (Except if it's empty -
443in that case, the field is removed and is not replaced with an
444automatically generated one. This lets you disable MFT generation on a
445per-message basis.) If there is none, then the list of recipient
446addresses (in the To: and Cc: headers) is checked to see if one of them
447is a list address you are subscribed to. If none of them is a list
448address, then no MFT is generated; otherwise, a MFT is added to the
449other headers and set to the value of all addresses in To: and Cc:
450
451@kindex C-c C-f C-a
452@findex message-generate-unsubscribed-mail-followup-to
453@kindex C-c C-f C-m
454@findex message-goto-mail-followup-to
455Hm. ``So'', you ask, ``what if I send an email to a list I am not
456subscribed to? I want my MFT to say that I want an extra copy.'' (This
457is supposed to be interpreted by others the same way as if there were no
458MFT, but you can use an explicit MFT to override someone else's
459to-address group parameter.) The function
460@code{message-generate-unsubscribed-mail-followup-to} might come in
461handy. It is bound to @kbd{C-c C-f C-a} by default. In any case, you
462can insert a MFT of your own choice; @kbd{C-c C-f C-m}
463(@code{message-goto-mail-followup-to}) will help you get started.
464
465@c @node Honoring an MFT post
466@subsection Honoring an MFT post
467
468@vindex message-use-mail-followup-to
469When you followup to a post on a mailing list, and the post has a MFT
470header, Gnus' action will depend on the value of the variable
471@code{message-use-mail-followup-to}. This variable can be one of:
472
473@table @code
474@item use
475 Always honor MFTs. The To: and Cc: headers in your followup will be
476 derived from the MFT header of the original post. This is the default.
477
478@item nil
479 Always dishonor MFTs (just ignore the darned thing)
480
481@item ask
482Gnus will prompt you for an action.
483
484@end table
485
486It is considered good netiquette to honor MFT, as it is assumed the
487fellow who posted a message knows where the followups need to go
488better than you do.
489
6bf7aab6
DL
490@node Commands
491@chapter Commands
492
493@menu
dda5808a 494* Buffer Entry:: Commands after entering a Message buffer.
23f87bed 495* Header Commands:: Commands for moving headers or changing headers.
6bf7aab6
DL
496* Movement:: Moving around in message buffers.
497* Insertion:: Inserting things into message buffers.
23f87bed
MB
498* MIME:: @acronym{MIME} considerations.
499* IDNA:: Non-@acronym{ASCII} domain name considerations.
500* Security:: Signing and encrypting messages.
6bf7aab6
DL
501* Various Commands:: Various things.
502* Sending:: Actually sending the message.
503* Mail Aliases:: How to use mail aliases.
dda5808a 504* Spelling:: Having Emacs check your spelling.
6bf7aab6
DL
505@end menu
506
507
dda5808a
DL
508@node Buffer Entry
509@section Buffer Entry
510@cindex undo
511@kindex C-_
512
513You most often end up in a Message buffer when responding to some other
514message of some sort. Message does lots of handling of quoted text, and
515may remove signatures, reformat the text, or the like---depending on
516which used settings you're using. Message usually gets things right,
517but sometimes it stumbles. To help the user unwind these stumblings,
518Message sets the undo boundary before each major automatic action it
519takes. If you press the undo key (usually located at @kbd{C-_}) a few
520times, you will get back the un-edited message you're responding to.
521
522
6bf7aab6
DL
523@node Header Commands
524@section Header Commands
525
23f87bed
MB
526@subsection Commands for moving to headers
527
528These following commands move to the header in question. If it doesn't
529exist, it will be inserted.
6bf7aab6
DL
530
531@table @kbd
532
533@item C-c ?
534@kindex C-c ?
23f87bed 535@findex describe-mode
6bf7aab6
DL
536Describe the message mode.
537
538@item C-c C-f C-t
9d3d5390 539@kindex C-c C-f C-t
6bf7aab6
DL
540@findex message-goto-to
541Go to the @code{To} header (@code{message-goto-to}).
542
23f87bed
MB
543@item C-c C-f C-o
544@kindex C-c C-f C-o
545@findex message-goto-from
546Go to the @code{From} header (@code{message-goto-from}). (The ``o''
547in the key binding is for Originator.)
548
6bf7aab6 549@item C-c C-f C-b
9d3d5390 550@kindex C-c C-f C-b
6bf7aab6
DL
551@findex message-goto-bcc
552Go to the @code{Bcc} header (@code{message-goto-bcc}).
553
23f87bed
MB
554@item C-c C-f C-f
555@kindex C-c C-f C-f
6bf7aab6
DL
556@findex message-goto-fcc
557Go to the @code{Fcc} header (@code{message-goto-fcc}).
558
559@item C-c C-f C-c
9d3d5390 560@kindex C-c C-f C-c
6bf7aab6
DL
561@findex message-goto-cc
562Go to the @code{Cc} header (@code{message-goto-cc}).
563
564@item C-c C-f C-s
9d3d5390 565@kindex C-c C-f C-s
6bf7aab6
DL
566@findex message-goto-subject
567Go to the @code{Subject} header (@code{message-goto-subject}).
568
569@item C-c C-f C-r
9d3d5390 570@kindex C-c C-f C-r
6bf7aab6
DL
571@findex message-goto-reply-to
572Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
573
574@item C-c C-f C-n
9d3d5390 575@kindex C-c C-f C-n
6bf7aab6
DL
576@findex message-goto-newsgroups
577Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
578
579@item C-c C-f C-d
9d3d5390 580@kindex C-c C-f C-d
6bf7aab6
DL
581@findex message-goto-distribution
582Go to the @code{Distribution} header (@code{message-goto-distribution}).
583
23f87bed
MB
584@item C-c C-f C-o
585@kindex C-c C-f C-o
6bf7aab6
DL
586@findex message-goto-followup-to
587Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
588
589@item C-c C-f C-k
9d3d5390 590@kindex C-c C-f C-k
6bf7aab6
DL
591@findex message-goto-keywords
592Go to the @code{Keywords} header (@code{message-goto-keywords}).
593
594@item C-c C-f C-u
9d3d5390 595@kindex C-c C-f C-u
6bf7aab6
DL
596@findex message-goto-summary
597Go to the @code{Summary} header (@code{message-goto-summary}).
598
23f87bed
MB
599@item C-c C-f C-i
600@kindex C-c C-f C-i
601@findex message-insert-or-toggle-importance
602This inserts the @samp{Importance:} header with a value of
603@samp{high}. This header is used to signal the importance of the
604message to the receiver. If the header is already present in the
605buffer, it cycles between the three valid values according to RFC
6061376: @samp{low}, @samp{normal} and @samp{high}.
607
608@item C-c C-f C-a
609@kindex C-c C-f C-a
610@findex message-generate-unsubscribed-mail-followup-to
611Insert a reasonable @samp{Mail-Followup-To:} header
612(@pxref{Mailing Lists}) in a post to an
613unsubscribed list. When making original posts to a mailing list you are
614not subscribed to, you have to type in a @samp{Mail-Followup-To:} header
615by hand. The contents, usually, are the addresses of the list and your
616own address. This function inserts such a header automatically. It
617fetches the contents of the @samp{To:} header in the current mail
618buffer, and appends the current @code{user-mail-address}.
619
620If the optional argument @code{include-cc} is non-@code{nil}, the
621addresses in the @samp{Cc:} header are also put into the
622@samp{Mail-Followup-To:} header.
623
624@end table
625
626@subsection Commands to change headers
627
628@table @kbd
629
630@item C-c C-o
631@kindex C-c C-o
632@findex message-sort-headers
633@vindex message-header-format-alist
634Sort headers according to @code{message-header-format-alist}
635(@code{message-sort-headers}).
636
637@item C-c C-t
638@kindex C-c C-t
639@findex message-insert-to
640Insert a @code{To} header that contains the @code{Reply-To} or
641@code{From} header of the message you're following up
642(@code{message-insert-to}).
643
644@item C-c C-n
645@kindex C-c C-n
646@findex message-insert-newsgroups
647Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
648or @code{Newsgroups} header of the article you're replying to
649(@code{message-insert-newsgroups}).
650
651@item C-c C-l
652@kindex C-c C-l
653@findex message-to-list-only
654Send a message to the list only. Remove all addresses but the list
655address from @code{To:} and @code{Cc:} headers.
656
657@item C-c M-n
658@kindex C-c M-n
659@findex message-insert-disposition-notification-to
660Insert a request for a disposition
661notification. (@code{message-insert-disposition-notification-to}).
662This means that if the recipient support RFC 2298 she might send you a
663notification that she received the message.
664
665@item M-x message-insert-importance-high
666@kindex M-x message-insert-importance-high
667@findex message-insert-importance-high
668@cindex Importance
669Insert an @samp{Importance} header with a value of @samp{high},
670deleting headers if necessary.
671
672@item M-x message-insert-importance-low
673@kindex M-x message-insert-importance-low
674@findex message-insert-importance-low
675@cindex Importance
676Insert an @samp{Importance} header with a value of @samp{low}, deleting
677headers if necessary.
678
679@item C-c C-f s
680@kindex C-c C-f s
681@findex message-change-subject
682@cindex Subject
683Change the current @samp{Subject} header. Ask for new @samp{Subject}
684header and append @samp{(was: <Old Subject>)}. The old subject can be
685stripped on replying, see @code{message-subject-trailing-was-query}
686(@pxref{Message Headers}).
687
688@item C-c C-f x
689@kindex C-c C-f x
690@findex message-cross-post-followup-to
691@vindex message-cross-post-default
58090a8d 692@vindex message-cross-post-note-function
23f87bed
MB
693@cindex X-Post
694@cindex cross-post
58090a8d
MB
695Set up the @samp{FollowUp-To} header with a target newsgroup for a
696cross-post, add that target newsgroup to the @samp{Newsgroups} header if
697it is not a member of @samp{Newsgroups}, and insert a note in the body.
698If @code{message-cross-post-default} is @code{nil} or if this command is
699called with a prefix-argument, only the @samp{FollowUp-To} header will
40b6cb79 700be set but the target newsgroup will not be added to the
58090a8d
MB
701@samp{Newsgroups} header. The function to insert a note is controlled
702by the @code{message-cross-post-note-function} variable.
23f87bed
MB
703
704@item C-c C-f t
705@kindex C-c C-f t
706@findex message-reduce-to-to-cc
707Replace contents of @samp{To} header with contents of @samp{Cc} or
58090a8d
MB
708@samp{Bcc} header. (Iff @samp{Cc} header is not present, @samp{Bcc}
709header will be used instead.)
23f87bed
MB
710
711@item C-c C-f w
712@kindex C-c C-f w
713@findex message-insert-wide-reply
714Insert @samp{To} and @samp{Cc} headers as if you were doing a wide
58090a8d 715reply even if the message was not made for a wide reply first.
23f87bed
MB
716
717@item C-c C-f a
718@kindex C-c C-f a
719@findex message-add-archive-header
720@vindex message-archive-header
721@vindex message-archive-note
722@cindex X-No-Archive
723Insert @samp{X-No-Archive: Yes} in the header and a note in the body.
724The header and the note can be customized using
725@code{message-archive-header} and @code{message-archive-note}. When
726called with a prefix argument, ask for a text to insert. If you don't
727want the note in the body, set @code{message-archive-note} to
728@code{nil}.
729
6bf7aab6
DL
730@end table
731
732
733@node Movement
734@section Movement
735
736@table @kbd
737@item C-c C-b
9d3d5390 738@kindex C-c C-b
6bf7aab6
DL
739@findex message-goto-body
740Move to the beginning of the body of the message
9d3d5390 741(@code{message-goto-body}).
6bf7aab6
DL
742
743@item C-c C-i
9d3d5390 744@kindex C-c C-i
6bf7aab6
DL
745@findex message-goto-signature
746Move to the signature of the message (@code{message-goto-signature}).
747
23f87bed
MB
748@item C-a
749@kindex C-a
750@findex message-beginning-of-line
751@vindex message-beginning-of-line
752If at beginning of header value, go to beginning of line, else go to
753beginning of header value. (The header value comes after the header
3d80e1a2 754name and the colon.) This behavior can be disabled by toggling
23f87bed
MB
755the variable @code{message-beginning-of-line}.
756
6bf7aab6
DL
757@end table
758
759
760@node Insertion
761@section Insertion
762
763@table @kbd
764
765@item C-c C-y
9d3d5390 766@kindex C-c C-y
6bf7aab6
DL
767@findex message-yank-original
768Yank the message that's being replied to into the message buffer
9d3d5390
DL
769(@code{message-yank-original}).
770
718fb8a1
EZ
771@item C-c C-M-y
772@kindex C-c C-M-y
9d3d5390
DL
773@findex message-yank-buffer
774Prompt for a buffer name and yank the contents of that buffer into the
775message buffer (@code{message-yank-buffer}).
6bf7aab6
DL
776
777@item C-c C-q
9d3d5390 778@kindex C-c C-q
6bf7aab6
DL
779@findex message-fill-yanked-message
780Fill the yanked message (@code{message-fill-yanked-message}). Warning:
781Can severely mess up the yanked text if its quoting conventions are
782strange. You'll quickly get a feel for when it's safe, though. Anyway,
783just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
784all right.
785
6bf7aab6 786@item C-c C-w
9d3d5390 787@kindex C-c C-w
6bf7aab6
DL
788@findex message-insert-signature
789Insert a signature at the end of the buffer
9d3d5390
DL
790(@code{message-insert-signature}).
791
792@item C-c M-h
793@kindex C-c M-h
794@findex message-insert-headers
795Insert the message headers (@code{message-insert-headers}).
6bf7aab6 796
23f87bed
MB
797@item C-c M-m
798@kindex C-c M-m
799@findex message-mark-inserted-region
800Mark some region in the current article with enclosing tags.
801See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
6bf7aab6 802
23f87bed
MB
803@item C-c M-f
804@kindex C-c M-f
805@findex message-mark-insert-file
806Insert a file in the current article with enclosing tags.
807See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
6bf7aab6
DL
808
809@end table
810
6bf7aab6 811
9d3d5390
DL
812@node MIME
813@section MIME
814@cindex MML
815@cindex MIME
816@cindex multipart
817@cindex attachment
818
23f87bed
MB
819Message is a @acronym{MIME}-compliant posting agent. The user generally
820doesn't have to do anything to make the @acronym{MIME} happen---Message will
9d3d5390
DL
821automatically add the @code{Content-Type} and
822@code{Content-Transfer-Encoding} headers.
823
9b8801ec 824@findex mml-attach-file
715488f1 825@kindex C-c C-a
9d3d5390 826The most typical thing users want to use the multipart things in
715488f1 827@acronym{MIME} for is to add ``attachments'' to mail they send out.
9b8801ec 828This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach-file}),
715488f1
MB
829which will prompt for a file name and a @acronym{MIME} type.
830
831@vindex mml-dnd-protocol-alist
832@vindex mml-dnd-attach-options
833If your Emacs supports drag and drop, you can also drop the file in the
834Message buffer. The variable @code{mml-dnd-protocol-alist} specifies
835what kind of action is done when you drop a file into the Message
836buffer. The variable @code{mml-dnd-attach-options} controls which
837@acronym{MIME} options you want to specify when dropping a file. If it
838is a list, valid members are @code{type}, @code{description} and
839@code{disposition}. @code{disposition} implies @code{type}. If it is
840@code{nil}, don't ask for options. If it is @code{t}, ask the user
841whether or not to specify options.
9d3d5390 842
23f87bed 843You can also create arbitrarily complex multiparts using the @acronym{MML}
9d3d5390
DL
844language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
845Manual}).
846
23f87bed
MB
847@node IDNA
848@section IDNA
849@cindex IDNA
850@cindex internationalized domain names
851@cindex non-ascii domain names
852
853Message is a @acronym{IDNA}-compliant posting agent. The user
854generally doesn't have to do anything to make the @acronym{IDNA}
855happen---Message will encode non-@acronym{ASCII} domain names in @code{From},
856@code{To}, and @code{Cc} headers automatically.
857
858Until @acronym{IDNA} becomes more well known, Message queries you
859whether @acronym{IDNA} encoding of the domain name really should
860occur. Some users might not be aware that domain names can contain
861non-@acronym{ASCII} now, so this gives them a safety net if they accidently
862typed a non-@acronym{ASCII} domain name.
863
864@vindex message-use-idna
865The @code{message-use-idna} variable control whether @acronym{IDNA} is
866used. If the variable is @code{nil} no @acronym{IDNA} encoding will
867ever happen, if it is set to the symbol @code{ask} the user will be
58090a8d
MB
868queried, and if set to @code{t} (which is the default if @acronym{IDNA}
869is fully available) @acronym{IDNA} encoding happens automatically.
23f87bed
MB
870
871@findex message-idna-to-ascii-rhs
872If you want to experiment with the @acronym{IDNA} encoding, you can
873invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer
a33704bb
MB
874to have the non-@acronym{ASCII} domain names encoded while you edit
875the message.
23f87bed
MB
876
877Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
878Libidn} installed in order to use this functionality.
879
880@node Security
881@section Security
882@cindex Security
883@cindex S/MIME
884@cindex PGP
885@cindex PGP/MIME
886@cindex sign
887@cindex encrypt
888@cindex secure
889
890Using the @acronym{MML} language, Message is able to create digitally
891signed and digitally encrypted messages. Message (or rather
892@acronym{MML}) currently support @acronym{PGP} (RFC 1991),
10ad749b 893@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.
23f87bed 894
10ad749b
RS
895@menu
896* Signing and encryption:: Signing and encrypting commands.
897* Using S/MIME:: Using S/MIME
898* Using PGP/MIME:: Using PGP/MIME
899* PGP Compatibility:: Compatibility with older implementations
900@end menu
901
902@node Signing and encryption
903@subsection Signing and encrypting commands
904
905Instructing @acronym{MML} to perform security operations on a
906@acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
907signing and the @kbd{C-c C-m c} key map for encryption, as follows.
23f87bed
MB
908@table @kbd
909
910@item C-c C-m s s
911@kindex C-c C-m s s
912@findex mml-secure-message-sign-smime
913
914Digitally sign current message using @acronym{S/MIME}.
915
916@item C-c C-m s o
917@kindex C-c C-m s o
918@findex mml-secure-message-sign-pgp
919
920Digitally sign current message using @acronym{PGP}.
921
922@item C-c C-m s p
923@kindex C-c C-m s p
924@findex mml-secure-message-sign-pgpmime
925
926Digitally sign current message using @acronym{PGP/MIME}.
927
928@item C-c C-m c s
929@kindex C-c C-m c s
930@findex mml-secure-message-encrypt-smime
931
932Digitally encrypt current message using @acronym{S/MIME}.
933
934@item C-c C-m c o
935@kindex C-c C-m c o
936@findex mml-secure-message-encrypt-pgp
937
938Digitally encrypt current message using @acronym{PGP}.
939
940@item C-c C-m c p
941@kindex C-c C-m c p
942@findex mml-secure-message-encrypt-pgpmime
943
944Digitally encrypt current message using @acronym{PGP/MIME}.
945
946@item C-c C-m C-n
947@kindex C-c C-m C-n
948@findex mml-unsecure-message
949Remove security related @acronym{MML} tags from message.
950
951@end table
952
953These commands do not immediately sign or encrypt the message, they
954merely insert the proper @acronym{MML} secure tag to instruct the
955@acronym{MML} engine to perform that operation when the message is
956actually sent. They may perform other operations too, such as locating
957and retrieving a @acronym{S/MIME} certificate of the person you wish to
958send encrypted mail to. When the mml parsing engine converts your
959@acronym{MML} into a properly encoded @acronym{MIME} message, the secure
960tag will be replaced with either a part or a multipart tag. If your
961message contains other mml parts, a multipart tag will be used; if no
962other parts are present in your message a single part tag will be used.
963This way, message mode will do the Right Thing (TM) with
964signed/encrypted multipart messages.
965
966Since signing and especially encryption often is used when sensitive
967information is sent, you may want to have some way to ensure that your
968mail is actually signed or encrypted. After invoking the above
969sign/encrypt commands, it is possible to preview the raw article by
970using @kbd{C-u C-c RET P} (@code{mml-preview}). Then you can
971verify that your long rant about what your ex-significant other or
972whomever actually did with that funny looking person at that strange
973party the other night, actually will be sent encrypted.
974
975@emph{Note!} Neither @acronym{PGP/MIME} nor @acronym{S/MIME} encrypt/signs
976RFC822 headers. They only operate on the @acronym{MIME} object. Keep this
977in mind before sending mail with a sensitive Subject line.
978
979By default, when encrypting a message, Gnus will use the
980``signencrypt'' mode, which means the message is both signed and
981encrypted. If you would like to disable this for a particular
982message, give the @code{mml-secure-message-encrypt-*} command a prefix
983argument, e.g., @kbd{C-u C-c C-m c p}.
984
985Actually using the security commands above is not very difficult. At
986least not compared with making sure all involved programs talk with each
987other properly. Thus, we now describe what external libraries or
988programs are required to make things work, and some small general hints.
989
10ad749b 990@node Using S/MIME
23f87bed
MB
991@subsection Using S/MIME
992
993@emph{Note!} This section assume you have a basic familiarity with
994modern cryptography, @acronym{S/MIME}, various PKCS standards, OpenSSL and
995so on.
996
997The @acronym{S/MIME} support in Message (and @acronym{MML}) require
998OpenSSL. OpenSSL performs the actual @acronym{S/MIME} sign/encrypt
999operations. OpenSSL can be found at @uref{http://www.openssl.org/}.
1000OpenSSL 0.9.6 and later should work. Version 0.9.5a cannot extract mail
1001addresses from certificates, and it insert a spurious CR character into
1002@acronym{MIME} separators so you may wish to avoid it if you would like
1003to avoid being regarded as someone who send strange mail. (Although by
1004sending @acronym{S/MIME} messages you've probably already lost that
1005contest.)
1006
1007To be able to send encrypted mail, a personal certificate is not
1008required. Message (@acronym{MML}) need a certificate for the person to whom you
1009wish to communicate with though. You're asked for this when you type
1010@kbd{C-c C-m c s}. Currently there are two ways to retrieve this
1011certificate, from a local file or from DNS. If you chose a local
1012file, it need to contain a X.509 certificate in @acronym{PEM} format.
1013If you chose DNS, you're asked for the domain name where the
1014certificate is stored, the default is a good guess. To my belief,
1015Message (@acronym{MML}) is the first mail agent in the world to support
1016retrieving @acronym{S/MIME} certificates from DNS, so you're not
1017likely to find very many certificates out there. At least there
1018should be one, stored at the domain @code{simon.josefsson.org}. LDAP
1019is a more popular method of distributing certificates, support for it
1020is planned. (Meanwhile, you can use @code{ldapsearch} from the
1021command line to retrieve a certificate into a file and use it.)
1022
1023As for signing messages, OpenSSL can't perform signing operations
1024without some kind of configuration. Especially, you need to tell it
1025where your private key and your certificate is stored. @acronym{MML}
1026uses an Emacs interface to OpenSSL, aptly named @code{smime.el}, and it
1027contain a @code{custom} group used for this configuration. So, try
1028@kbd{M-x customize-group RET smime RET} and look around.
1029
1030Currently there is no support for talking to a CA (or RA) to create
1031your own certificate. None is planned either. You need to do this
1032manually with OpenSSL or using some other program. I used Netscape
1033and got a free @acronym{S/MIME} certificate from one of the big CA's on the
1034net. Netscape is able to export your private key and certificate in
1035PKCS #12 format. Use OpenSSL to convert this into a plain X.509
1036certificate in PEM format as follows.
1037
1038@example
1039$ openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
1040@end example
1041
1042The @file{key+cert.pem} file should be pointed to from the
1043@code{smime-keys} variable. You should now be able to send signed mail.
1044
1045@emph{Note!} Your private key is now stored unencrypted in the file,
1046so take care in handling it. Storing encrypted keys on the disk are
1047supported, and Gnus will ask you for a passphrase before invoking
1048OpenSSL. Read the OpenSSL documentation for how to achieve this. If
1049you use unencrypted keys (e.g., if they are on a secure storage, or if
1050you are on a secure single user machine) simply press @code{RET} at
1051the passphrase prompt.
1052
10ad749b 1053@node Using PGP/MIME
23f87bed
MB
1054@subsection Using PGP/MIME
1055
1056@acronym{PGP/MIME} requires an external OpenPGP implementation, such
1057as @uref{http://www.gnupg.org/, GNU Privacy Guard}. Pre-OpenPGP
1058implementations such as PGP 2.x and PGP 5.x are also supported. One
1059Emacs interface to the PGP implementations, PGG (@pxref{Top, ,PGG,
1060pgg, PGG Manual}), is included, but Mailcrypt and Florian Weimer's
10ad749b
RS
1061@code{gpg.el} are also supported. @xref{PGP Compatibility}.
1062
1063@cindex gpg-agent
1064Message internally calls GnuPG (the @command{gpg} command) to perform
1065data encryption, and in certain cases (decrypting or signing for
1066example), @command{gpg} requires user's passphrase. Currently the
1067recommended way to supply your passphrase to @command{gpg} is to use the
1068@command{gpg-agent} program.
1069
1070To use @command{gpg-agent} in Emacs, you need to run the following
1071command from the shell before starting Emacs.
1072
1073@example
1074eval `gpg-agent --daemon`
1075@end example
1076
1077This will invoke @command{gpg-agent} and set the environment variable
1078@code{GPG_AGENT_INFO} to allow @command{gpg} to communicate with it.
1079It might be good idea to put this command in your @file{.xsession} or
1080@file{.bash_profile}. @xref{Invoking GPG-AGENT, , , gnupg, Using the
1081GNU Privacy Guard}.
1082
1083Once your @command{gpg-agent} is set up, it will ask you for a
1084passphrase as needed for @command{gpg}. Under the X Window System,
1085you will see a new passphrase input dialog appear. The dialog is
1086provided by PIN Entry (the @command{pinentry} command), and as of
1087version 0.7.2, @command{pinentry} cannot cooperate with Emacs on a
1088single tty. So, if you are using a text console, you may need to put
1089a passphrase into gpg-agent's cache beforehand. The following command
1090does the trick.
1091
1092@example
1093gpg --use-agent --sign < /dev/null > /dev/null
1094@end example
1095
1096The Lisp variable @code{pgg-gpg-use-agent} controls whether to use
1097@command{gpg-agent}. See also @xref{Caching passphrase, , , pgg, The
1098PGG Manual}.
1099
1100
1101@node PGP Compatibility
1102@subsection Compatibility with older implementations
23f87bed
MB
1103
1104@vindex gpg-temp-directory
1105Note, if you are using the @code{gpg.el} you must make sure that the
1106directory specified by @code{gpg-temp-directory} have permissions
11070700.
1108
1109Creating your own key is described in detail in the documentation of
1110your PGP implementation, so we refer to it.
1111
1112If you have imported your old PGP 2.x key into GnuPG, and want to send
1113signed and encrypted messages to your fellow PGP 2.x users, you'll
1114discover that the receiver cannot understand what you send. One
1115solution is to use PGP 2.x instead (i.e., if you use @code{pgg}, set
1116@code{pgg-default-scheme} to @code{pgp}). If you do want to use
1117GnuPG, you can use a compatibility script called @code{gpg-2comp}
1118available from
1119@uref{http://muppet.faveve.uni-stuttgart.de/~gero/gpg-2comp/}. You
1120could also convince your fellow PGP 2.x users to convert to GnuPG.
1121@vindex mml-signencrypt-style-alist
1122As a final workaround, you can make the sign and encryption work in
1123two steps; separately sign, then encrypt a message. If you would like
1124to change this behavior you can customize the
1125@code{mml-signencrypt-style-alist} variable. For example:
1126
1127@lisp
1128(setq mml-signencrypt-style-alist '(("smime" separate)
1129 ("pgp" separate)
1130 ("pgpauto" separate)
1131 ("pgpmime" separate)))
1132@end lisp
1133
1134This causes to sign and encrypt in two passes, thus generating a
1135message that can be understood by PGP version 2.
1136
1137(Refer to @uref{http://www.gnupg.org/gph/en/pgp2x.html} for more
1138information about the problem.)
6bf7aab6
DL
1139
1140@node Various Commands
1141@section Various Commands
1142
1143@table @kbd
1144
1145@item C-c C-r
9d3d5390 1146@kindex C-c C-r
6bf7aab6
DL
1147@findex message-caesar-buffer-body
1148Caesar rotate (aka. rot13) the current message
1149(@code{message-caesar-buffer-body}). If narrowing is in effect, just
1150rotate the visible portion of the buffer. A numerical prefix says how
1151many places to rotate the text. The default is 13.
1152
1153@item C-c C-e
1154@kindex C-c C-e
1155@findex message-elide-region
23f87bed 1156@vindex message-elide-ellipsis
6bf7aab6 1157Elide the text between point and mark (@code{message-elide-region}).
9d3d5390 1158The text is killed and replaced with the contents of the variable
23f87bed 1159@code{message-elide-ellipsis}. The default value is to use an ellipsis
9d3d5390 1160(@samp{[...]}).
6bf7aab6
DL
1161
1162@item C-c C-z
58090a8d 1163@kindex C-c C-z
6bf7aab6
DL
1164@findex message-kill-to-signature
1165Kill all the text up to the signature, or if that's missing, up to the
1166end of the message (@code{message-kill-to-signature}).
1167
1168@item C-c C-v
1169@kindex C-c C-v
1170@findex message-delete-not-region
1171Delete all text in the body of the message that is outside the region
1172(@code{message-delete-not-region}).
1173
1174@item M-RET
1175@kindex M-RET
23f87bed 1176@findex message-newline-and-reformat
6bf7aab6
DL
1177Insert four newlines, and then reformat if inside quoted text.
1178
1179Here's an example:
1180
1181@example
1182> This is some quoted text. And here's more quoted text.
1183@end example
1184
1185If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
1186
1187@example
1188> This is some quoted text.
1189
1190*
1191
1192> And here's more quoted text.
1193@end example
1194
9d3d5390 1195@samp{*} says where point will be placed.
6bf7aab6 1196
6bf7aab6
DL
1197@item C-c M-r
1198@kindex C-c M-r
1199@findex message-rename-buffer
1200Rename the buffer (@code{message-rename-buffer}). If given a prefix,
1201prompt for a new buffer name.
1202
23f87bed
MB
1203@item TAB
1204@kindex TAB
1205@findex message-tab
1206@vindex message-tab-body-function
58090a8d
MB
1207If @code{message-tab-body-function} is non-@code{nil}, execute the
1208function it specifies. Otherwise use the function bound to @kbd{TAB} in
1209@code{text-mode-map} or @code{global-map}.
23f87bed 1210
6bf7aab6
DL
1211@end table
1212
1213
1214@node Sending
1215@section Sending
1216
1217@table @kbd
1218@item C-c C-c
9d3d5390 1219@kindex C-c C-c
6bf7aab6
DL
1220@findex message-send-and-exit
1221Send the message and bury the current buffer
9d3d5390 1222(@code{message-send-and-exit}).
6bf7aab6
DL
1223
1224@item C-c C-s
9d3d5390 1225@kindex C-c C-s
6bf7aab6 1226@findex message-send
9d3d5390 1227Send the message (@code{message-send}).
6bf7aab6
DL
1228
1229@item C-c C-d
1230@kindex C-c C-d
1231@findex message-dont-send
1232Bury the message buffer and exit (@code{message-dont-send}).
1233
1234@item C-c C-k
1235@kindex C-c C-k
1236@findex message-kill-buffer
1237Kill the message buffer and exit (@code{message-kill-buffer}).
1238
1239@end table
1240
1241
1242
1243@node Mail Aliases
1244@section Mail Aliases
1245@cindex mail aliases
1246@cindex aliases
1247
1248@vindex message-mail-alias-type
1249The @code{message-mail-alias-type} variable controls what type of mail
1250alias expansion to use. Currently only one form is supported---Message
1251uses @code{mailabbrev} to handle mail aliases. If this variable is
1252@code{nil}, no mail alias expansion will be performed.
1253
1254@code{mailabbrev} works by parsing the @file{/etc/mailrc} and
1255@file{~/.mailrc} files. These files look like:
1256
1257@example
1258alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
1259alias ding "ding@@ifi.uio.no (ding mailing list)"
1260@end example
1261
1262After adding lines like this to your @file{~/.mailrc} file, you should
1263be able to just write @samp{lmi} in the @code{To} or @code{Cc} (and so
1264on) headers and press @kbd{SPC} to expand the alias.
1265
1266No expansion will be performed upon sending of the message---all
1267expansions have to be done explicitly.
1268
1269
dda5808a
DL
1270@node Spelling
1271@section Spelling
1272@cindex spelling
1273@findex ispell-message
1274
1275There are two popular ways to have Emacs spell-check your messages:
1276@code{ispell} and @code{flyspell}. @code{ispell} is the older and
1277probably more popular package. You typically first write the message,
1278and then run the entire thing through @code{ispell} and fix all the
1279typos. To have this happen automatically when you send a message, put
1280something like the following in your @file{.emacs} file:
1281
1282@lisp
1283(add-hook 'message-send-hook 'ispell-message)
1284@end lisp
1285
1286@vindex ispell-message-dictionary-alist
1287If you're in the habit of writing in different languages, this can be
1288controlled by the @code{ispell-message-dictionary-alist} variable:
1289
1290@lisp
1291(setq ispell-message-dictionary-alist
1292 '(("^Newsgroups:.*\\bde\\." . "deutsch8")
23f87bed 1293 (".*" . "default")))
dda5808a
DL
1294@end lisp
1295
1296@code{ispell} depends on having the external @samp{ispell} command
1297installed.
1298
1299The other popular method is using @code{flyspell}. This package checks
1300your spelling while you're writing, and marks any mis-spelled words in
1301various ways.
1302
1303To use @code{flyspell}, put something like the following in your
1304@file{.emacs} file:
1305
1306@lisp
1307(defun my-message-setup-routine ()
1308 (flyspell-mode 1))
1309(add-hook 'message-setup-hook 'my-message-setup-routine)
1310@end lisp
1311
1312@code{flyspell} depends on having the external @samp{ispell} command
1313installed.
1314
6bf7aab6
DL
1315
1316@node Variables
1317@chapter Variables
1318
1319@menu
1320* Message Headers:: General message header stuff.
1321* Mail Headers:: Customizing mail headers.
1322* Mail Variables:: Other mail variables.
1323* News Headers:: Customizing news headers.
1324* News Variables:: Other news variables.
23f87bed 1325* Insertion Variables:: Customizing how things are inserted.
6bf7aab6
DL
1326* Various Message Variables:: Other message variables.
1327* Sending Variables:: Variables for sending.
1328* Message Buffers:: How Message names its buffers.
1329* Message Actions:: Actions to be performed when exiting.
1330@end menu
1331
1332
1333@node Message Headers
1334@section Message Headers
1335
1336Message is quite aggressive on the message generation front. It has to
1337be -- it's a combined news and mail agent. To be able to send combined
1338messages, it has to generate all headers itself (instead of letting the
1339mail/news system do it) to ensure that mail and news copies of messages
1340look sufficiently similar.
1341
1342@table @code
1343
1344@item message-generate-headers-first
1345@vindex message-generate-headers-first
23f87bed
MB
1346If @code{t}, generate all required headers before starting to
1347compose the message. This can also be a list of headers to generate:
1348
1349@lisp
1350(setq message-generate-headers-first
1351 '(References))
1352@end lisp
74ac26b2 1353
23f87bed
MB
1354@vindex message-required-headers
1355The variables @code{message-required-headers},
1356@code{message-required-mail-headers} and
1357@code{message-required-news-headers} specify which headers are
1358required.
1359
1360Note that some headers will be removed and re-generated before posting,
1361because of the variable @code{message-deletable-headers} (see below).
1362
1363@item message-draft-headers
1364@vindex message-draft-headers
1365When running Message from Gnus, the message buffers are associated
1366with a draft group. @code{message-draft-headers} says which headers
1367should be generated when a draft is written to the draft group.
6bf7aab6
DL
1368
1369@item message-from-style
1370@vindex message-from-style
1371Specifies how @code{From} headers should look. There are four valid
1372values:
1373
1374@table @code
1375@item nil
1376Just the address -- @samp{king@@grassland.com}.
1377
1378@item parens
1379@samp{king@@grassland.com (Elvis Parsley)}.
1380
1381@item angles
1382@samp{Elvis Parsley <king@@grassland.com>}.
1383
1384@item default
1385Look like @code{angles} if that doesn't require quoting, and
1386@code{parens} if it does. If even @code{parens} requires quoting, use
1387@code{angles} anyway.
1388
1389@end table
1390
1391@item message-deletable-headers
1392@vindex message-deletable-headers
1393Headers in this list that were previously generated by Message will be
1394deleted before posting. Let's say you post an article. Then you decide
1395to post it again to some other group, you naughty boy, so you jump back
1396to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
1397ship it off again. By default, this variable makes sure that the old
1398generated @code{Message-ID} is deleted, and a new one generated. If
1399this isn't done, the entire empire would probably crumble, anarchy would
1400prevail, and cats would start walking on two legs and rule the world.
9d3d5390 1401Allegedly.
6bf7aab6
DL
1402
1403@item message-default-headers
1404@vindex message-default-headers
1405This string is inserted at the end of the headers in all message
1406buffers.
1407
1408@item message-subject-re-regexp
1409@vindex message-subject-re-regexp
23f87bed
MB
1410@cindex Aw
1411@cindex Sv
1412@cindex Re
6bf7aab6 1413Responses to messages have subjects that start with @samp{Re: }. This
dda5808a 1414is @emph{not} an abbreviation of the English word ``response'', but is
6bf7aab6
DL
1415Latin, and means ``in response to''. Some illiterate nincompoops have
1416failed to grasp this fact, and have ``internationalized'' their software
28665d46 1417to use abominations like @samp{Aw: } (``antwort'') or @samp{Sv: }
6bf7aab6
DL
1418(``svar'') instead, which is meaningless and evil. However, you may
1419have to deal with users that use these evil tools, in which case you may
1420set this variable to a regexp that matches these prefixes. Myself, I
1421just throw away non-compliant mail.
1422
23f87bed
MB
1423Here's an example of a value to deal with these headers when
1424responding to a message:
1425
1426@lisp
1427(setq message-subject-re-regexp
1428 (concat
1429 "^[ \t]*"
1430 "\\("
1431 "\\("
1432 "[Aa][Nn][Tt][Ww]\\.?\\|" ; antw
1433 "[Aa][Ww]\\|" ; aw
1434 "[Ff][Ww][Dd]?\\|" ; fwd
1435 "[Oo][Dd][Pp]\\|" ; odp
1436 "[Rr][Ee]\\|" ; re
1437 "[Rr][\311\351][Ff]\\.?\\|" ; ref
1438 "[Ss][Vv]" ; sv
1439 "\\)"
1440 "\\(\\[[0-9]*\\]\\)"
1441 "*:[ \t]*"
1442 "\\)"
1443 "*[ \t]*"
1444 ))
1445@end lisp
1446
1447@item message-subject-trailing-was-query
1448@vindex message-subject-trailing-was-query
1449@vindex message-subject-trailing-was-ask-regexp
1450@vindex message-subject-trailing-was-regexp
1451Controls what to do with trailing @samp{(was: <old subject>)} in subject
1452lines. If @code{nil}, leave the subject unchanged. If it is the symbol
cf5e3b4d 1453@code{ask}, query the user what to do. In this case, the subject is
23f87bed 1454matched against @code{message-subject-trailing-was-ask-regexp}. If
18eafade 1455@code{message-subject-trailing-was-query} is @code{t}, always strip the
23f87bed
MB
1456trailing old subject. In this case,
1457@code{message-subject-trailing-was-regexp} is used.
1458
8ac08dea
DL
1459@item message-alternative-emails
1460@vindex message-alternative-emails
46e8fe3d
MB
1461Regexp matching alternative email addresses. The first address in the
1462To, Cc or From headers of the original article matching this variable is
1463used as the From field of outgoing messages, replacing the default From
1464value.
1465
1466For example, if you have two secondary email addresses john@@home.net
1467and john.doe@@work.com and want to use them in the From field when
1468composing a reply to a message addressed to one of them, you could set
1469this variable like this:
1470
1471@lisp
1472(setq message-alternative-emails
1473 (regexp-opt '("john@@home.net" "john.doe@@work.com")))
1474@end lisp
1475
1476This variable has precedence over posting styles and anything that runs
1477off @code{message-setup-hook}.
8ac08dea 1478
23f87bed
MB
1479@item message-allow-no-recipients
1480@vindex message-allow-no-recipients
1481Specifies what to do when there are no recipients other than
1482@code{Gcc} or @code{Fcc}. If it is @code{always}, the posting is
1483allowed. If it is @code{never}, the posting is not allowed. If it is
1484@code{ask} (the default), you are prompted.
1485
1486@item message-hidden-headers
1487@vindex message-hidden-headers
1488A regexp, a list of regexps, or a list where the first element is
1489@code{not} and the rest are regexps. It says which headers to keep
1490hidden when composing a message.
1491
1492@lisp
1493(setq message-hidden-headers
1494 '(not "From" "Subject" "To" "Cc" "Newsgroups"))
1495@end lisp
1496
1497@item message-header-synonyms
1498@vindex message-header-synonyms
1499A list of lists of header synonyms. E.g., if this list contains a
1500member list with elements @code{Cc} and @code{To}, then
1501@code{message-carefully-insert-headers} will not insert a @code{To}
1502header when the message is already @code{Cc}ed to the recipient.
1503
6bf7aab6
DL
1504@end table
1505
1506
1507@node Mail Headers
1508@section Mail Headers
1509
1510@table @code
1511@item message-required-mail-headers
1512@vindex message-required-mail-headers
1513@xref{News Headers}, for the syntax of this variable. It is
58090a8d 1514@code{(From Subject Date (optional . In-Reply-To) Message-ID
dda5808a 1515(optional . User-Agent))} by default.
6bf7aab6
DL
1516
1517@item message-ignored-mail-headers
1518@vindex message-ignored-mail-headers
58090a8d
MB
1519Regexp of headers to be removed before mailing. The default is@*
1520@samp{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:\\|@*
1521^X-Gnus-Agent-Meta-Information:}.
6bf7aab6
DL
1522
1523@item message-default-mail-headers
1524@vindex message-default-mail-headers
1525This string is inserted at the end of the headers in all message
1526buffers that are initialized as mail.
1527
1528@end table
1529
1530
1531@node Mail Variables
9d3d5390 1532@section Mail Variables
6bf7aab6
DL
1533
1534@table @code
1535@item message-send-mail-function
1536@vindex message-send-mail-function
23f87bed
MB
1537@findex message-send-mail-with-sendmail
1538@findex message-send-mail-with-mh
1539@findex message-send-mail-with-qmail
1540@findex message-smtpmail-send-it
1541@findex smtpmail-send-it
1542@findex feedmail-send-it
6bf7aab6 1543Function used to send the current buffer as mail. The default is
23f87bed
MB
1544@code{message-send-mail-with-sendmail}. Other valid values include
1545@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
1546@code{message-smtpmail-send-it}, @code{smtpmail-send-it} and
1547@code{feedmail-send-it}.
6bf7aab6
DL
1548
1549@item message-mh-deletable-headers
1550@vindex message-mh-deletable-headers
1551Most versions of MH doesn't like being fed messages that contain the
1552headers in this variable. If this variable is non-@code{nil} (which is
1553the default), these headers will be removed before mailing when sending
1554messages via MH. Set it to @code{nil} if your MH can handle these
1555headers.
1556
23f87bed
MB
1557@item message-qmail-inject-program
1558@vindex message-qmail-inject-program
1559@cindex qmail
1560Location of the qmail-inject program.
1561
1562@item message-qmail-inject-args
1563@vindex message-qmail-inject-args
1564Arguments passed to qmail-inject programs.
1565This should be a list of strings, one string for each argument. It
1566may also be a function.
1567
1568For e.g., if you wish to set the envelope sender address so that bounces
1569go to the right place or to deal with listserv's usage of that address, you
1570might set this variable to @code{'("-f" "you@@some.where")}.
1571
1572@item message-sendmail-f-is-evil
1573@vindex message-sendmail-f-is-evil
1574@cindex sendmail
1575Non-@code{nil} means don't add @samp{-f username} to the sendmail
1576command line. Doing so would be even more evil than leaving it out.
1577
1578@item message-sendmail-envelope-from
1579@vindex message-sendmail-envelope-from
1580When @code{message-sendmail-f-is-evil} is @code{nil}, this specifies
1581the address to use in the @acronym{SMTP} envelope. If it is
1582@code{nil}, use @code{user-mail-address}. If it is the symbol
1583@code{header}, use the @samp{From} header of the message.
1584
1585@item message-mailer-swallows-blank-line
1586@vindex message-mailer-swallows-blank-line
1587Set this to non-@code{nil} if the system's mailer runs the header and
1588body together. (This problem exists on SunOS 4 when sendmail is run
1589in remote mode.) The value should be an expression to test whether
1590the problem will actually occur.
1591
dda5808a
DL
1592@item message-send-mail-partially-limit
1593@vindex message-send-mail-partially-limit
23f87bed
MB
1594@cindex split large message
1595The limitation of messages sent as message/partial. The lower bound
1596of message size in characters, beyond which the message should be sent
1597in several parts. If it is @code{nil}, the size is unlimited.
dda5808a 1598
6bf7aab6
DL
1599@end table
1600
1601
1602@node News Headers
1603@section News Headers
1604
1605@vindex message-required-news-headers
1606@code{message-required-news-headers} a list of header symbols. These
1607headers will either be automatically generated, or, if that's
1608impossible, they will be prompted for. The following symbols are valid:
1609
1610@table @code
1611
1612@item From
1613@cindex From
1614@findex user-full-name
1615@findex user-mail-address
1616This required header will be filled out with the result of the
1617@code{message-make-from} function, which depends on the
1618@code{message-from-style}, @code{user-full-name},
1619@code{user-mail-address} variables.
1620
1621@item Subject
1622@cindex Subject
9d3d5390 1623This required header will be prompted for if not present already.
6bf7aab6
DL
1624
1625@item Newsgroups
1626@cindex Newsgroups
1627This required header says which newsgroups the article is to be posted
1628to. If it isn't present already, it will be prompted for.
1629
1630@item Organization
1631@cindex organization
23f87bed
MB
1632@vindex message-user-organization
1633@vindex message-user-organization-file
6bf7aab6
DL
1634This optional header will be filled out depending on the
1635@code{message-user-organization} variable.
1636@code{message-user-organization-file} will be used if this variable is
1637@code{t}. This variable can also be a string (in which case this string
1638will be used), or it can be a function (which will be called with no
1639parameters and should return a string to be used).
1640
1641@item Lines
1642@cindex Lines
1643This optional header will be computed by Message.
1644
1645@item Message-ID
1646@cindex Message-ID
23f87bed 1647@vindex message-user-fqdn
6bf7aab6 1648@vindex mail-host-address
23f87bed 1649@vindex user-mail-address
6bf7aab6
DL
1650@findex system-name
1651@cindex Sun
23f87bed 1652@cindex i-did-not-set--mail-host-address--so-tickle-me
6bf7aab6 1653This required header will be generated by Message. A unique ID will be
9b5773bc
MB
1654created based on the date, time, user name (for the local part) and the
1655domain part. For the domain part, message will look (in this order) at
23f87bed
MB
1656@code{message-user-fqdn}, @code{system-name}, @code{mail-host-address}
1657and @code{message-user-mail-address} (i.e. @code{user-mail-address})
1658until a probably valid fully qualified domain name (FQDN) was found.
6bf7aab6 1659
dda5808a
DL
1660@item User-Agent
1661@cindex User-Agent
6bf7aab6
DL
1662This optional header will be filled out according to the
1663@code{message-newsreader} local variable.
1664
6bf7aab6
DL
1665@item In-Reply-To
1666This optional header is filled out using the @code{Date} and @code{From}
1667header of the article being replied to.
1668
1669@item Expires
1670@cindex Expires
23f87bed 1671@vindex message-expires
6bf7aab6
DL
1672This extremely optional header will be inserted according to the
1673@code{message-expires} variable. It is highly deprecated and shouldn't
1674be used unless you know what you're doing.
1675
1676@item Distribution
1677@cindex Distribution
23f87bed 1678@vindex message-distribution-function
6bf7aab6
DL
1679This optional header is filled out according to the
1680@code{message-distribution-function} variable. It is a deprecated and
1681much misunderstood header.
1682
1683@item Path
1684@cindex path
23f87bed 1685@vindex message-user-path
6bf7aab6
DL
1686This extremely optional header should probably never be used.
1687However, some @emph{very} old servers require that this header is
1688present. @code{message-user-path} further controls how this
1689@code{Path} header is to look. If it is @code{nil}, use the server name
1690as the leaf node. If it is a string, use the string. If it is neither
1691a string nor @code{nil}, use the user name only. However, it is highly
1692unlikely that you should need to fiddle with this variable at all.
1693@end table
1694
1695@findex yow
1696@cindex Mime-Version
23f87bed 1697In addition, you can enter conses into this list. The @sc{car} of this cons
6bf7aab6 1698should be a symbol. This symbol's name is the name of the header, and
23f87bed 1699the @sc{cdr} can either be a string to be entered verbatim as the value of
6bf7aab6
DL
1700this header, or it can be a function to be called. This function should
1701return a string to be inserted. For instance, if you want to insert
1702@code{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
1703into the list. If you want to insert a funny quote, you could enter
1704something like @code{(X-Yow . yow)} into the list. The function
1705@code{yow} will then be called without any arguments.
1706
23f87bed
MB
1707If the list contains a cons where the @sc{car} of the cons is
1708@code{optional}, the @sc{cdr} of this cons will only be inserted if it is
6bf7aab6
DL
1709non-@code{nil}.
1710
23f87bed
MB
1711If you want to delete an entry from this list, the following Lisp
1712snippet might be useful. Adjust accordingly if you want to remove
1713another element.
1714
1715@lisp
1716(setq message-required-news-headers
1717 (delq 'Message-ID message-required-news-headers))
1718@end lisp
1719
6bf7aab6
DL
1720Other variables for customizing outgoing news articles:
1721
1722@table @code
1723
1724@item message-syntax-checks
1725@vindex message-syntax-checks
1726Controls what syntax checks should not be performed on outgoing posts.
1727To disable checking of long signatures, for instance, add
1728
1729@lisp
1730(signature . disabled)
1731@end lisp
1732
1733to this list.
1734
1735Valid checks are:
1736
1737@table @code
6bf7aab6
DL
1738@item approved
1739@cindex approved
1740Check whether the article has an @code{Approved} header, which is
1741something only moderators should include.
5cfd0f2e
MB
1742@item continuation-headers
1743Check whether there are continuation header lines that don't begin with
1744whitespace.
1745@item control-chars
1746Check for invalid characters.
6bf7aab6
DL
1747@item empty
1748Check whether the article is empty.
6bf7aab6 1749@item existing-newsgroups
9d3d5390 1750Check whether the newsgroups mentioned in the @code{Newsgroups} and
6bf7aab6 1751@code{Followup-To} headers exist.
5cfd0f2e
MB
1752@item from
1753Check whether the @code{From} header seems nice.
1754@item illegible-text
1755Check whether there is any non-printable character in the body.
1756@item invisible-text
1757Check whether there is any invisible text in the buffer.
1758@item long-header-lines
1759Check for too long header lines.
1760@item long-lines
1761@cindex long lines
1762Check for too long lines in the body.
1763@item message-id
1764Check whether the @code{Message-ID} looks syntactically ok.
1765@item multiple-headers
1766Check for the existence of multiple equal headers.
1767@item new-text
1768Check whether there is any new text in the messages.
1769@item newsgroups
1770Check whether the @code{Newsgroups} header exists and is not empty.
1771@item quoting-style
1772Check whether text follows last quoted portion.
6bf7aab6
DL
1773@item repeated-newsgroups
1774Check whether the @code{Newsgroups} and @code{Followup-to} headers
1775contains repeated group names.
5cfd0f2e
MB
1776@item reply-to
1777Check whether the @code{Reply-To} header looks ok.
1778@item sender
1779@cindex Sender
1780Insert a new @code{Sender} header if the @code{From} header looks odd.
1781@item sendsys
1782@cindex sendsys
1783Check for the existence of version and sendsys commands.
1784@item shoot
1785Check whether the domain part of the @code{Message-ID} header looks ok.
6bf7aab6
DL
1786@item shorten-followup-to
1787Check whether to add a @code{Followup-to} header to shorten the number
1788of groups to post to.
5cfd0f2e
MB
1789@item signature
1790Check the length of the signature.
1791@item size
1792Check for excessive size.
1793@item subject
1794Check whether the @code{Subject} header exists and is not empty.
1795@item subject-cmsg
1796Check the subject for commands.
1797@item valid-newsgroups
1798Check whether the @code{Newsgroups} and @code{Followup-to} headers
1799are valid syntactically.
6bf7aab6
DL
1800@end table
1801
5cfd0f2e
MB
1802All these conditions are checked by default, except for @code{sender}
1803for which the check is disabled by default if
1804@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
6bf7aab6
DL
1805
1806@item message-ignored-news-headers
1807@vindex message-ignored-news-headers
1808Regexp of headers to be removed before posting. The default is@*
58090a8d
MB
1809@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|@*
1810^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:}.
6bf7aab6
DL
1811
1812@item message-default-news-headers
1813@vindex message-default-news-headers
1814This string is inserted at the end of the headers in all message
1815buffers that are initialized as news.
1816
1817@end table
1818
1819
1820@node News Variables
1821@section News Variables
1822
1823@table @code
1824@item message-send-news-function
1825@vindex message-send-news-function
1826Function used to send the current buffer as news. The default is
9d3d5390 1827@code{message-send-news}.
6bf7aab6
DL
1828
1829@item message-post-method
1830@vindex message-post-method
1831Gnusish @dfn{select method} (see the Gnus manual for details) used for
1832posting a prepared news message.
1833
1834@end table
1835
1836
23f87bed
MB
1837@node Insertion Variables
1838@section Insertion Variables
1839
1840@table @code
1841@item message-ignored-cited-headers
1842@vindex message-ignored-cited-headers
1843All headers that match this regexp will be removed from yanked
1844messages. The default is @samp{.}, which means that all headers will be
1845removed.
1846
1847@item message-cite-prefix-regexp
1848@vindex message-cite-prefix-regexp
1849Regexp matching the longest possible citation prefix on a line.
1850
1851@item message-citation-line-function
1852@vindex message-citation-line-function
1853@cindex attribution line
1854Function called to insert the citation line. The default is
1855@code{message-insert-citation-line}, which will lead to citation lines
1856that look like:
1857
1858@example
1859Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
1860@end example
1861
1862Point will be at the beginning of the body of the message when this
1863function is called.
1864
1865Note that Gnus provides a feature where clicking on `writes:' hides the
1866cited text. If you change the citation line too much, readers of your
1867messages will have to adjust their Gnus, too. See the variable
1868@code{gnus-cite-attribution-suffix}. @xref{Article Highlighting, ,
1869Article Highlighting, gnus, The Gnus Manual}, for details.
1870
1871@item message-yank-prefix
1872@vindex message-yank-prefix
1873@cindex yanking
1874@cindex quoting
1875When you are replying to or following up an article, you normally want
1876to quote the person you are answering. Inserting quoted text is done
1877by @dfn{yanking}, and each line you yank will have
1878@code{message-yank-prefix} prepended to it (except for quoted and
1879empty lines which uses @code{message-yank-cited-prefix}). The default
1880is @samp{> }.
1881
1882@item message-yank-cited-prefix
1883@vindex message-yank-cited-prefix
1884@cindex yanking
1885@cindex cited
1886@cindex quoting
1887When yanking text from an article which contains no text or already
1888cited text, each line will be prefixed with the contents of this
1889variable. The default is @samp{>}. See also
1890@code{message-yank-prefix}.
1891
1892@item message-indentation-spaces
1893@vindex message-indentation-spaces
1894Number of spaces to indent yanked messages.
1895
1896@item message-cite-function
1897@vindex message-cite-function
1898@findex message-cite-original
1899@findex sc-cite-original
1900@findex message-cite-original-without-signature
1901@cindex Supercite
1902Function for citing an original message. The default is
1903@code{message-cite-original}, which simply inserts the original message
1904and prepends @samp{> } to each line.
1905@code{message-cite-original-without-signature} does the same, but elides
1906the signature. You can also set it to @code{sc-cite-original} to use
1907Supercite.
1908
1909@item message-indent-citation-function
1910@vindex message-indent-citation-function
1911Function for modifying a citation just inserted in the mail buffer.
1912This can also be a list of functions. Each function can find the
1913citation between @code{(point)} and @code{(mark t)}. And each function
1914should leave point and mark around the citation text as modified.
1915
1916@item message-mark-insert-begin
1917@vindex message-mark-insert-begin
1918String to mark the beginning of some inserted text.
1919
1920@item message-mark-insert-end
1921@vindex message-mark-insert-end
1922String to mark the end of some inserted text.
1923
1924@item message-signature
1925@vindex message-signature
1926String to be inserted at the end of the message buffer. If @code{t}
1927(which is the default), the @code{message-signature-file} file will be
1928inserted instead. If a function, the result from the function will be
1929used instead. If a form, the result from the form will be used instead.
1930If this variable is @code{nil}, no signature will be inserted at all.
1931
1932@item message-signature-file
1933@vindex message-signature-file
1934File containing the signature to be inserted at the end of the buffer.
1935The default is @file{~/.signature}.
1936
1937@item message-signature-insert-empty-line
1938@vindex message-signature-insert-empty-line
1939If @code{t} (the default value) an empty line is inserted before the
1940signature separator.
1941
1942@end table
1943
1944Note that RFC1036bis says that a signature should be preceded by the three
1945characters @samp{-- } on a line by themselves. This is to make it
1946easier for the recipient to automatically recognize and process the
1947signature. So don't remove those characters, even though you might feel
1948that they ruin your beautiful design, like, totally.
1949
1950Also note that no signature should be more than four lines long.
1951Including @acronym{ASCII} graphics is an efficient way to get
1952everybody to believe that you are silly and have nothing important to
1953say.
1954
1955
6bf7aab6
DL
1956@node Various Message Variables
1957@section Various Message Variables
1958
1959@table @code
9d3d5390
DL
1960@item message-default-charset
1961@vindex message-default-charset
1962@cindex charset
58090a8d
MB
1963Symbol naming a @acronym{MIME} charset. Non-@acronym{ASCII} characters
1964in messages are assumed to be encoded using this charset. The default
1965is @code{iso-8859-1} on non-@sc{mule} Emacsen; otherwise @code{nil},
1966which means ask the user. (This variable is used only on non-@sc{mule}
1967Emacsen.) @xref{Charset Translation, , Charset Translation, emacs-mime,
1968Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
1969translation process.
9d3d5390 1970
6bf7aab6
DL
1971@item message-signature-separator
1972@vindex message-signature-separator
1973Regexp matching the signature separator. It is @samp{^-- *$} by
9d3d5390 1974default.
6bf7aab6
DL
1975
1976@item mail-header-separator
1977@vindex mail-header-separator
1978String used to separate the headers from the body. It is @samp{--text
1979follows this line--} by default.
1980
1981@item message-directory
1982@vindex message-directory
9d3d5390 1983Directory used by many mailey things. The default is @file{~/Mail/}.
ad136a7c 1984All other mail file variables are derived from @code{message-directory}.
6bf7aab6 1985
23f87bed
MB
1986@item message-auto-save-directory
1987@vindex message-auto-save-directory
1988Directory where Message auto-saves buffers if Gnus isn't running. If
1989@code{nil}, Message won't auto-save. The default is @file{~/Mail/drafts/}.
1990
6bf7aab6
DL
1991@item message-signature-setup-hook
1992@vindex message-signature-setup-hook
1993Hook run when initializing the message buffer. It is run after the
9d3d5390 1994headers have been inserted but before the signature has been inserted.
6bf7aab6
DL
1995
1996@item message-setup-hook
1997@vindex message-setup-hook
1998Hook run as the last thing when the message buffer has been initialized,
1999but before yanked text is inserted.
2000
2001@item message-header-setup-hook
2002@vindex message-header-setup-hook
9d3d5390 2003Hook called narrowed to the headers after initializing the headers.
6bf7aab6
DL
2004
2005For instance, if you're running Gnus and wish to insert a
2006@samp{Mail-Copies-To} header in all your news articles and all messages
2007you send to mailing lists, you could do something like the following:
2008
2009@lisp
2010(defun my-message-header-setup-hook ()
2011 (let ((group (or gnus-newsgroup-name "")))
2012 (when (or (message-fetch-field "newsgroups")
2013 (gnus-group-find-parameter group 'to-address)
2014 (gnus-group-find-parameter group 'to-list))
2015 (insert "Mail-Copies-To: never\n"))))
2016
2017(add-hook 'message-header-setup-hook
2018 'my-message-header-setup-hook)
2019@end lisp
2020
2021@item message-send-hook
2022@vindex message-send-hook
2023Hook run before sending messages.
2024
2025If you want to add certain headers before sending, you can use the
2026@code{message-add-header} function in this hook. For instance:
2027@findex message-add-header
2028
2029@lisp
2030(add-hook 'message-send-hook 'my-message-add-content)
2031(defun my-message-add-content ()
dda5808a
DL
2032 (message-add-header "X-In-No-Sense: Nonsense")
2033 (message-add-header "X-Whatever: no"))
6bf7aab6
DL
2034@end lisp
2035
2036This function won't add the header if the header is already present.
2037
2038@item message-send-mail-hook
2039@vindex message-send-mail-hook
23f87bed
MB
2040Hook run before sending mail messages. This hook is run very late --
2041just before the message is actually sent as mail.
6bf7aab6
DL
2042
2043@item message-send-news-hook
2044@vindex message-send-news-hook
23f87bed
MB
2045Hook run before sending news messages. This hook is run very late --
2046just before the message is actually sent as news.
6bf7aab6
DL
2047
2048@item message-sent-hook
2049@vindex message-sent-hook
2050Hook run after sending messages.
2051
23f87bed
MB
2052@item message-cancel-hook
2053@vindex message-cancel-hook
2054Hook run when canceling news articles.
2055
6bf7aab6
DL
2056@item message-mode-syntax-table
2057@vindex message-mode-syntax-table
2058Syntax table used in message mode buffers.
2059
23f87bed
MB
2060@item message-strip-special-text-properties
2061@vindex message-strip-special-text-properties
2062Emacs has a number of special text properties which can break message
2063composing in various ways. If this option is set, message will strip
2064these properties from the message composition buffer. However, some
2065packages requires these properties to be present in order to work. If
2066you use one of these packages, turn this option off, and hope the
2067message composition doesn't break too bad.
2068
6bf7aab6
DL
2069@item message-send-method-alist
2070@vindex message-send-method-alist
58090a8d
MB
2071@findex message-mail-p
2072@findex message-news-p
2073@findex message-send-via-mail
2074@findex message-send-via-news
2075Alist of ways to send outgoing messages. Each element has the form:
6bf7aab6
DL
2076
2077@lisp
23f87bed 2078(@var{type} @var{predicate} @var{function})
6bf7aab6
DL
2079@end lisp
2080
2081@table @var
2082@item type
2083A symbol that names the method.
2084
2085@item predicate
2086A function called without any parameters to determine whether the
58090a8d
MB
2087message is a message of type @var{type}. The function will be called in
2088the buffer where the message is.
6bf7aab6
DL
2089
2090@item function
2091A function to be called if @var{predicate} returns non-@code{nil}.
2092@var{function} is called with one parameter -- the prefix.
2093@end table
2094
58090a8d
MB
2095The default is:
2096
6bf7aab6
DL
2097@lisp
2098((news message-news-p message-send-via-news)
2099 (mail message-mail-p message-send-via-mail))
2100@end lisp
2101
58090a8d
MB
2102The @code{message-news-p} function returns non-@code{nil} if the message
2103looks like news, and the @code{message-send-via-news} function sends the
2104message according to the @code{message-send-news-function} variable
2105(@pxref{News Variables}). The @code{message-mail-p} function returns
2106non-@code{nil} if the message looks like mail, and the
2107@code{message-send-via-mail} function sends the message according to the
2108@code{message-send-mail-function} variable (@pxref{Mail Variables}).
2109
2110All the elements in this alist will be tried in order, so a message
2111containing both a valid @samp{Newsgroups} header and a valid @samp{To}
2112header, for example, will be sent as news, and then as mail.
6bf7aab6
DL
2113@end table
2114
2115
2116
2117@node Sending Variables
2118@section Sending Variables
2119
2120@table @code
2121
9d3d5390
DL
2122@item message-fcc-handler-function
2123@vindex message-fcc-handler-function
6bf7aab6 2124A function called to save outgoing articles. This function will be
9d3d5390 2125called with the name of the file to store the article in. The default
23f87bed 2126function is @code{message-output} which saves in Unix mailbox format.
6bf7aab6
DL
2127
2128@item message-courtesy-message
2129@vindex message-courtesy-message
2130When sending combined messages, this string is inserted at the start of
2131the mailed copy. If the string contains the format spec @samp{%s}, the
2132newsgroups the article has been posted to will be inserted there. If
2133this variable is @code{nil}, no such courtesy message will be added.
2134The default value is @samp{"The following message is a courtesy copy of
23f87bed
MB
2135an article\\nthat has been posted to %s as well.\\n\\n"}.
2136
2137@item message-fcc-externalize-attachments
2138@vindex message-fcc-externalize-attachments
2139If @code{nil}, attach files as normal parts in Fcc copies; if it is
2140non-@code{nil}, attach local files as external parts.
2141
2142@item message-interactive
2143@vindex message-interactive
2144If non-@code{nil} wait for and display errors when sending a message;
2145if @code{nil} let the mailer mail back a message to report errors.
6bf7aab6
DL
2146
2147@end table
2148
2149
2150@node Message Buffers
2151@section Message Buffers
2152
2153Message will generate new buffers with unique buffer names when you
2154request a message buffer. When you send the message, the buffer isn't
2155normally killed off. Its name is changed and a certain number of old
2156message buffers are kept alive.
2157
2158@table @code
2159@item message-generate-new-buffers
2160@vindex message-generate-new-buffers
815b81c8
MB
2161Controls whether to create a new message buffer to compose a message.
2162Valid values include:
2163
2164@table @code
2165@item nil
2166Generate the buffer name in the Message way (e.g., *mail*, *news*, *mail
2167to whom*, *news on group*, etc.) and continue editing in the existing
2168buffer of that name. If there is no such buffer, it will be newly
2169created.
2170
2171@item unique
2172@item t
2173Create the new buffer with the name generated in the Message way. This
2174is the default.
2175
2176@item unsent
2177Similar to @code{unique} but the buffer name begins with "*unsent ".
2178
2179@item standard
2180Similar to @code{nil} but the buffer name is simpler like *mail
2181message*.
2182@end table
2183@table @var
2184@item function
2185If this is a function, call that function with three parameters: The
2186type, the To address and the group name (any of these may be
2187@code{nil}). The function should return the new buffer name.
2188@end table
2189
2190The default value is @code{unique}.
6bf7aab6
DL
2191
2192@item message-max-buffers
2193@vindex message-max-buffers
2194This variable says how many old message buffers to keep. If there are
2195more message buffers than this, the oldest buffer will be killed. The
2196default is 10. If this variable is @code{nil}, no old message buffers
2197will ever be killed.
2198
2199@item message-send-rename-function
2200@vindex message-send-rename-function
2201After sending a message, the buffer is renamed from, for instance,
2202@samp{*reply to Lars*} to @samp{*sent reply to Lars*}. If you don't
2203like this, set this variable to a function that renames the buffer in a
2204manner you like. If you don't want to rename the buffer at all, you can
2205say:
2206
2207@lisp
2208(setq message-send-rename-function 'ignore)
2209@end lisp
2210
2211@item message-kill-buffer-on-exit
2212@findex message-kill-buffer-on-exit
2213If non-@code{nil}, kill the buffer immediately on exit.
2214
2215@end table
2216
2217
2218@node Message Actions
2219@section Message Actions
2220
2221When Message is being used from a news/mail reader, the reader is likely
2222to want to perform some task after the message has been sent. Perhaps
2223return to the previous window configuration or mark an article as
9d3d5390 2224replied.
6bf7aab6
DL
2225
2226@vindex message-kill-actions
2227@vindex message-postpone-actions
2228@vindex message-exit-actions
2229@vindex message-send-actions
2230The user may exit from the message buffer in various ways. The most
2231common is @kbd{C-c C-c}, which sends the message and exits. Other
2232possibilities are @kbd{C-c C-s} which just sends the message, @kbd{C-c
2233C-d} which postpones the message editing and buries the message buffer,
2234and @kbd{C-c C-k} which kills the message buffer. Each of these actions
2235have lists associated with them that contains actions to be executed:
2236@code{message-send-actions}, @code{message-exit-actions},
9d3d5390 2237@code{message-postpone-actions}, and @code{message-kill-actions}.
6bf7aab6
DL
2238
2239Message provides a function to interface with these lists:
2240@code{message-add-action}. The first parameter is the action to be
2241added, and the rest of the arguments are which lists to add this action
2242to. Here's an example from Gnus:
2243
2244@lisp
2245 (message-add-action
2246 `(set-window-configuration ,(current-window-configuration))
2247 'exit 'postpone 'kill)
2248@end lisp
2249
2250This restores the Gnus window configuration when the message buffer is
2251killed, postponed or exited.
2252
2253An @dfn{action} can be either: a normal function, or a list where the
23f87bed 2254@sc{car} is a function and the @sc{cdr} is the list of arguments, or
6bf7aab6
DL
2255a form to be @code{eval}ed.
2256
2257
2258@node Compatibility
2259@chapter Compatibility
2260@cindex compatibility
2261
2262Message uses virtually only its own variables---older @code{mail-}
2263variables aren't consulted. To force Message to take those variables
23f87bed 2264into account, you can put the following in your @file{.emacs} file:
6bf7aab6
DL
2265
2266@lisp
2267(require 'messcompat)
2268@end lisp
2269
2270This will initialize many Message variables from the values in the
2271corresponding mail variables.
2272
2273
2274@node Appendices
2275@chapter Appendices
2276
2277@menu
2278* Responses:: Standard rules for determining where responses go.
2279@end menu
2280
2281
2282@node Responses
2283@section Responses
2284
2285To determine where a message is to go, the following algorithm is used
2286by default.
2287
2288@table @dfn
2289@item reply
2290A @dfn{reply} is when you want to respond @emph{just} to the person who
2291sent the message via mail. There will only be one recipient. To
2292determine who the recipient will be, the following headers are
2293consulted, in turn:
2294
2295@table @code
2296@item Reply-To
2297
2298@item From
2299@end table
2300
2301
2302@item wide reply
2303A @dfn{wide reply} is a mail response that includes @emph{all} entities
2304mentioned in the message you are responded to. All mailboxes from the
2305following headers will be concatenated to form the outgoing
2306@code{To}/@code{Cc} headers:
2307
2308@table @code
2309@item From
2310(unless there's a @code{Reply-To}, in which case that is used instead).
2311
2312@item Cc
2313
2314@item To
2315@end table
2316
2317If a @code{Mail-Copies-To} header is present, it will also be included
2318in the list of mailboxes. If this header is @samp{never}, that means
2319that the @code{From} (or @code{Reply-To}) mailbox will be suppressed.
2320
2321
2322@item followup
2323A @dfn{followup} is a response sent via news. The following headers
2324(listed in order of precedence) determine where the response is to be
2325sent:
2326
2327@table @code
2328
2329@item Followup-To
2330
2331@item Newsgroups
2332
2333@end table
2334
2335If a @code{Mail-Copies-To} header is present, it will be used as the
2336basis of the new @code{Cc} header, except if this header is
2337@samp{never}.
2338
2339@end table
2340
2341
84247bb5
CY
2342@node GNU Free Documentation License
2343@chapter GNU Free Documentation License
2344@include doclicense.texi
6bf7aab6
DL
2345
2346@node Index
2347@chapter Index
2348@printindex cp
2349
2350@node Key Index
2351@chapter Key Index
2352@printindex ky
2353
2354@summarycontents
2355@contents
2356@bye
2357
2358@c End:
ab5796a9
MB
2359
2360@ignore
2361 arch-tag: 16ab76af-a281-4e34-aed6-5624569f7601
2362@end ignore