; Fix paths in MAINTAINERS
[emacs.git] / doc / misc / message.texi
blobfa4fa4398b4cd54123a57a372189bb4c952cf271
1 \input texinfo                  @c -*-texinfo-*-
3 @include gnus-overrides.texi
5 @setfilename ../../info/message.info
6 @settitle Message Manual
7 @include docstyle.texi
8 @synindex fn cp
9 @synindex vr cp
10 @synindex pg cp
11 @copying
12 This file documents Message, the Emacs message composition mode.
14 Copyright @copyright{} 1996--2016 Free Software Foundation, Inc.
16 @quotation
17 Permission is granted to copy, distribute and/or modify this document
18 under the terms of the GNU Free Documentation License, Version 1.3 or
19 any later version published by the Free Software Foundation; with no
20 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
21 and with the Back-Cover Texts as in (a) below.  A copy of the license
22 is included in the section entitled ``GNU Free Documentation License''.
24 (a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
25 modify this GNU manual.''
26 @end quotation
27 @end copying
29 @dircategory Emacs network features
30 @direntry
31 * Message: (message).           Mail and news composition mode that
32                                   goes with Gnus.
33 @end direntry
34 @iftex
35 @finalout
36 @end iftex
38 @titlepage
39 @ifset WEBHACKDEVEL
40 @title Message Manual (DEVELOPMENT VERSION)
41 @end ifset
42 @ifclear WEBHACKDEVEL
43 @title Message Manual
44 @end ifclear
46 @author by Lars Magne Ingebrigtsen
47 @page
49 @vskip 0pt plus 1filll
50 @insertcopying
51 @end titlepage
53 @summarycontents
54 @contents
56 @node Top
57 @top Message
59 @ifnottex
60 @insertcopying
61 @end ifnottex
63 All message composition from Gnus (both mail and news) takes place in
64 Message mode buffers.
66 @menu
67 * Interface::         Setting up message buffers.
68 * Commands::          Commands you can execute in message mode buffers.
69 * Variables::         Customizing the message buffers.
70 * Compatibility::     Making Message backwards compatible.
71 * Appendices::        More technical things.
72 * GNU Free Documentation License:: The license for this documentation.
73 * Index::             Variable, function and concept index.
74 * Key Index::         List of Message mode keys.
75 @end menu
77 @c Adjust ../Makefile.in if you change the following lines:
78 Message is distributed with Gnus.  The Gnus distribution
80 corresponding to this manual is Gnus v5.13
83 @node Interface
84 @chapter Interface
86 When a program (or a person) wants to respond to a message---reply,
87 follow up, forward, cancel---the program (or person) should just put
88 point in the buffer where the message is and call the required command.
89 @code{Message} will then pop up a new @code{message} mode buffer with
90 appropriate headers filled out, and the user can edit the message before
91 sending it.
93 @menu
94 * New Mail Message::     Editing a brand new mail message.
95 * New News Message::     Editing a brand new news message.
96 * Reply::                Replying via mail.
97 * Wide Reply::           Responding to all people via mail.
98 * Followup::             Following up via news.
99 * Canceling News::       Canceling a news article.
100 * Superseding::          Superseding a message.
101 * Forwarding::           Forwarding a message via news or mail.
102 * Resending::            Resending a mail message.
103 * Bouncing::             Bouncing a mail message.
104 * Mailing Lists::        Send mail to mailing lists.
105 @end menu
107 You can customize the Message Mode tool bar, see @kbd{M-x
108 customize-apropos RET message-tool-bar}.  This feature is only available
109 in Emacs.
111 @node New Mail Message
112 @section New Mail Message
114 @findex message-mail
115 The @code{message-mail} command pops up a new message buffer.
117 Two optional parameters are accepted: The first will be used as the
118 @code{To} header and the second as the @code{Subject} header.  If these
119 are @code{nil}, those two headers will be empty.
122 @node New News Message
123 @section New News Message
125 @findex message-news
126 The @code{message-news} command pops up a new message buffer.
128 This function accepts two optional parameters.  The first will be used
129 as the @code{Newsgroups} header and the second as the @code{Subject}
130 header.  If these are @code{nil}, those two headers will be empty.
133 @node Reply
134 @section Reply
136 @findex message-reply
137 The @code{message-reply} function pops up a message buffer that's a
138 reply to the message in the current buffer.
140 @vindex message-reply-to-function
141 Message uses the normal methods to determine where replies are to go
142 (@pxref{Responses}), but you can change the behavior to suit your needs
143 by fiddling with the @code{message-reply-to-function} variable.
145 If you want the replies to go to the @code{Sender} instead of the
146 @code{From}, you could do something like this:
148 @lisp
149 (setq message-reply-to-function
150       (lambda ()
151        (cond ((equal (mail-fetch-field "from") "somebody")
152                (list (cons 'To (mail-fetch-field "sender"))))
153              (t
154               nil))))
155 @end lisp
157 This function will be called narrowed to the head of the article that is
158 being replied to.
160 As you can see, this function should return a list.  In this case, it
161 returns @code{((To . "Whom"))} if it has an opinion as to what the To
162 header should be.  If it does not, it should just return @code{nil}, and
163 the normal methods for determining the To header will be used.
165 Each list element should be a cons, where the @sc{car} should be the
166 name of a header (e.g., @code{Cc}) and the @sc{cdr} should be the header
167 value (e.g., @samp{larsi@@ifi.uio.no}).  All these headers will be
168 inserted into the head of the outgoing mail.
171 @node Wide Reply
172 @section Wide Reply
174 @findex message-wide-reply
175 The @code{message-wide-reply} pops up a message buffer that's a wide
176 reply to the message in the current buffer.  A @dfn{wide reply} is a
177 reply that goes out to all people listed in the @code{To}, @code{From}
178 (or @code{Reply-to}) and @code{Cc} headers.
180 @vindex message-wide-reply-to-function
181 Message uses the normal methods to determine where wide replies are to go,
182 but you can change the behavior to suit your needs by fiddling with the
183 @code{message-wide-reply-to-function}.  It is used in the same way as
184 @code{message-reply-to-function} (@pxref{Reply}).
186 @vindex message-dont-reply-to-names
187 Addresses that match the @code{message-dont-reply-to-names} regular
188 expression (or list of regular expressions or a predicate function)
189 will be removed from the @code{Cc} header. A value of @code{nil} means
190 exclude your name only.
192 @vindex message-prune-recipient-rules
193 @code{message-prune-recipient-rules} is used to prune the addresses
194 used when doing a wide reply.  It's meant to be used to remove
195 duplicate addresses and the like.  It's a list of lists, where the
196 first element is a regexp to match the address to trigger the rule,
197 and the second is a regexp that will be expanded based on the first,
198 to match addresses to be pruned.
200 It's complicated to explain, but it's easy to use.
202 For instance, if you get an email from @samp{foo@@example.org}, but
203 @samp{foo@@zot.example.org} is also in the @code{Cc} list, then your
204 wide reply will go out to both these addresses, since they are unique.
206 To avoid this, do something like the following:
208 @lisp
209 (setq message-prune-recipient-rules
210       '(("^\\([^@@]+\\)@@\\(.*\\)" "\\1@@.*[.]\\2")))
211 @end lisp
213 If, for instance, you want all wide replies that involve messages from
214 @samp{cvs@@example.org} to go to that address, and nowhere else (i.e.,
215 remove all other recipients if @samp{cvs@@example.org} is in the
216 recipient list:
218 @lisp
219 (setq message-prune-recipient-rules
220       '(("cvs@@example.org" ".")))
221 @end lisp
223 @vindex message-wide-reply-confirm-recipients
224 If @code{message-wide-reply-confirm-recipients} is non-@code{nil} you
225 will be asked to confirm that you want to reply to multiple
226 recipients.  The default is @code{nil}.
228 @node Followup
229 @section Followup
231 @findex message-followup
232 The @code{message-followup} command pops up a message buffer that's a
233 followup to the message in the current buffer.
235 @vindex message-followup-to-function
236 Message uses the normal methods to determine where followups are to go,
237 but you can change the behavior to suit your needs by fiddling with the
238 @code{message-followup-to-function}.  It is used in the same way as
239 @code{message-reply-to-function} (@pxref{Reply}).
241 @vindex message-use-followup-to
242 The @code{message-use-followup-to} variable says what to do about
243 @code{Followup-To} headers.  If it is @code{use}, always use the value.
244 If it is @code{ask} (which is the default), ask whether to use the
245 value.  If it is @code{t}, use the value unless it is @samp{poster}.  If
246 it is @code{nil}, don't use the value.
249 @node Canceling News
250 @section Canceling News
252 @findex message-cancel-news
253 The @code{message-cancel-news} command cancels the article in the
254 current buffer.
256 @vindex message-cancel-message
257 The value of @code{message-cancel-message} is inserted in the body of
258 the cancel message.  The default is @samp{I am canceling my own
259 article.}.
261 @cindex Cancel Locks
262 @vindex message-insert-canlock
263 @cindex canlock
264 When Message posts news messages, it inserts @code{Cancel-Lock}
265 headers by default.  This is a cryptographic header that ensures that
266 only you can cancel your own messages, which is nice.  The downside
267 is that if you lose your @file{.emacs} file (which is where Gnus
268 stores the secret cancel lock password (which is generated
269 automatically the first time you use this feature)), you won't be
270 able to cancel your message.  If you want to manage a password yourself,
271 you can put something like the following in your @file{~/.gnus.el} file:
273 @lisp
274 (setq canlock-password "geheimnis"
275       canlock-password-for-verify canlock-password)
276 @end lisp
278 Whether to insert the header or not is controlled by the
279 @code{message-insert-canlock} variable.
281 Not many news servers respect the @code{Cancel-Lock} header yet, but
282 this is expected to change in the future.
285 @node Superseding
286 @section Superseding
288 @findex message-supersede
289 The @code{message-supersede} command pops up a message buffer that will
290 supersede the message in the current buffer.
292 @vindex message-ignored-supersedes-headers
293 Headers matching the @code{message-ignored-supersedes-headers} are
294 removed before popping up the new message buffer.  The default is@*
295 @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
296 ^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
297 Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
298 ^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
299 ^X-Payment:\\|^Approved:}.
303 @node Forwarding
304 @section Forwarding
306 @findex message-forward
307 The @code{message-forward} command pops up a message buffer to forward
308 the message in the current buffer.  If given a prefix, forward using
309 news.
311 @table @code
312 @item message-forward-ignored-headers
313 @vindex message-forward-ignored-headers
314 In non-@code{nil}, all headers that match this regexp will be deleted
315 when forwarding a message.
317 @item message-forward-included-headers
318 @vindex message-forward-included-headers
319 In non-@code{nil}, only headers that match this regexp will be kept
320 when forwarding a message.
322 @item message-make-forward-subject-function
323 @vindex message-make-forward-subject-function
324 A list of functions that are called to generate a subject header for
325 forwarded messages.  The subject generated by the previous function is
326 passed into each successive function.
328 The provided functions are:
330 @table @code
331 @item message-forward-subject-author-subject
332 @findex message-forward-subject-author-subject
333 Source of article (author or newsgroup), in brackets followed by the
334 subject.
336 @item message-forward-subject-fwd
337 Subject of article with @samp{Fwd:} prepended to it.
338 @end table
340 @item message-wash-forwarded-subjects
341 @vindex message-wash-forwarded-subjects
342 If this variable is @code{t}, the subjects of forwarded messages have
343 the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
344 @samp{(fwd)}) removed before the new subject is
345 constructed.  The default value is @code{nil}.
347 @item message-forward-as-mime
348 @vindex message-forward-as-mime
349 If this variable is @code{t} (the default), forwarded messages are
350 included as inline @acronym{MIME} RFC822 parts.  If it's @code{nil}, forwarded
351 messages will just be copied inline to the new message, like previous,
352 non @acronym{MIME}-savvy versions of Gnus would do.
354 @item message-forward-before-signature
355 @vindex message-forward-before-signature
356 If non-@code{nil}, put forwarded message before signature, else after.
358 @end table
361 @node Resending
362 @section Resending
364 @findex message-resend
365 The @code{message-resend} command will prompt the user for an address
366 and resend the message in the current buffer to that address.
368 @vindex message-ignored-resent-headers
369 Headers that match the @code{message-ignored-resent-headers} regexp will
370 be removed before sending the message.
373 @node Bouncing
374 @section Bouncing
376 @findex message-bounce
377 The @code{message-bounce} command will, if the current buffer contains a
378 bounced mail message, pop up a message buffer stripped of the bounce
379 information.  A @dfn{bounced message} is typically a mail you've sent
380 out that has been returned by some @code{mailer-daemon} as
381 undeliverable.
383 @vindex message-ignored-bounced-headers
384 Headers that match the @code{message-ignored-bounced-headers} regexp
385 will be removed before popping up the buffer.  The default is
386 @samp{^\\(Received\\|Return-Path\\|Delivered-To\\):}.
389 @node Mailing Lists
390 @section Mailing Lists
392 @cindex Mail-Followup-To
393 Sometimes while posting to mailing lists, the poster needs to direct
394 followups to the post to specific places.  The Mail-Followup-To (MFT)
395 was created to enable just this.  Three example scenarios where this is
396 useful:
398 @itemize @bullet
399 @item
400 A mailing list poster can use MFT to express that responses should be
401 sent to just the list, and not the poster as well.  This will happen
402 if the poster is already subscribed to the list.
404 @item
405 A mailing list poster can use MFT to express that responses should be
406 sent to the list and the poster as well.  This will happen if the poster
407 is not subscribed to the list.
409 @item
410 If a message is posted to several mailing lists, MFT may also be used
411 to direct the following discussion to one list only, because
412 discussions that are spread over several lists tend to be fragmented
413 and very difficult to follow.
415 @end itemize
417 Gnus honors the MFT header in other's messages (i.e., while following
418 up to someone else's post) and also provides support for generating
419 sensible MFT headers for outgoing messages as well.
421 @c @menu
422 @c * Honoring an MFT post::        What to do when one already exists
423 @c * Composing with a MFT header:: Creating one from scratch.
424 @c @end menu
426 @c @node Composing with a MFT header
427 @subsection  Composing a correct MFT header automagically
429 The first step in getting Gnus to automagically generate a MFT header
430 in posts you make is to give Gnus a list of the mailing lists
431 addresses you are subscribed to.  You can do this in more than one
432 way.  The following variables would come in handy.
434 @table @code
436 @vindex message-subscribed-addresses
437 @item message-subscribed-addresses
438 This should be a list of addresses the user is subscribed to.  Its
439 default value is @code{nil}.  Example:
440 @lisp
441 (setq message-subscribed-addresses
442       '("ding@@gnus.org" "bing@@noose.org"))
443 @end lisp
445 @vindex message-subscribed-regexps
446 @item message-subscribed-regexps
447 This should be a list of regexps denoting the addresses of mailing
448 lists subscribed to.  Default value is @code{nil}.  Example: If you
449 want to achieve the same result as above:
450 @lisp
451 (setq message-subscribed-regexps
452       '("\\(ding@@gnus\\)\\|\\(bing@@noose\\)\\.org")
453 @end lisp
455 @vindex message-subscribed-address-functions
456 @item message-subscribed-address-functions
457 This can be a list of functions to be called (one at a time!!) to
458 determine the value of MFT headers.  It is advisable that these
459 functions not take any arguments.  Default value is @code{nil}.
461 There is a pre-defined function in Gnus that is a good candidate for
462 this variable.  @code{gnus-find-subscribed-addresses} is a function
463 that returns a list of addresses corresponding to the groups that have
464 the @code{subscribed} (@pxref{Group Parameters, ,Group Parameters,
465 gnus, The Gnus Manual}) group parameter set to a non-@code{nil} value.
466 This is how you would do it.
468 @lisp
469 (setq message-subscribed-address-functions
470       '(gnus-find-subscribed-addresses))
471 @end lisp
473 @vindex message-subscribed-address-file
474 @item message-subscribed-address-file
475 You might be one organized human freak and have a list of addresses of
476 all subscribed mailing lists in a separate file!  Then you can just
477 set this variable to the name of the file and life would be good.
479 @end table
481 You can use one or more of the above variables.  All their values are
482 ``added'' in some way that works :-)
484 Now you are all set.  Just start composing a message as you normally do.
485 And just send it; as always.  Just before the message is sent out, Gnus'
486 MFT generation thingy kicks in and checks if the message already has a
487 MFT field.  If there is one, it is left alone.  (Except if it's empty;
488 in that case, the field is removed and is not replaced with an
489 automatically generated one.  This lets you disable MFT generation on a
490 per-message basis.)  If there is none, then the list of recipient
491 addresses (in the To: and Cc: headers) is checked to see if one of them
492 is a list address you are subscribed to.  If none of them is a list
493 address, then no MFT is generated; otherwise, a MFT is added to the
494 other headers and set to the value of all addresses in To: and Cc:
496 @kindex C-c C-f C-a
497 @findex message-generate-unsubscribed-mail-followup-to
498 @kindex C-c C-f C-m
499 @findex message-goto-mail-followup-to
500 Hm.  ``So'', you ask, ``what if I send an email to a list I am not
501 subscribed to?  I want my MFT to say that I want an extra copy.''  (This
502 is supposed to be interpreted by others the same way as if there were no
503 MFT, but you can use an explicit MFT to override someone else's
504 to-address group parameter.)  The function
505 @code{message-generate-unsubscribed-mail-followup-to} might come in
506 handy.  It is bound to @kbd{C-c C-f C-a} by default.  In any case, you
507 can insert a MFT of your own choice; @kbd{C-c C-f C-m}
508 (@code{message-goto-mail-followup-to}) will help you get started.
510 @c @node Honoring an MFT post
511 @subsection Honoring an MFT post
513 @vindex message-use-mail-followup-to
514 When you followup to a post on a mailing list, and the post has a MFT
515 header, Gnus' action will depend on the value of the variable
516 @code{message-use-mail-followup-to}.  This variable can be one of:
518 @table @code
519 @item use
520  Always honor MFTs.  The To: and Cc: headers in your followup will be
521  derived from the MFT header of the original post.  This is the default.
523 @item nil
524  Always dishonor MFTs (just ignore the darned thing)
526 @item ask
527 Gnus will prompt you for an action.
529 @end table
531 It is considered good netiquette to honor MFT, as it is assumed the
532 fellow who posted a message knows where the followups need to go
533 better than you do.
535 @node Commands
536 @chapter Commands
538 @menu
539 * Buffer Entry::        Commands after entering a Message buffer.
540 * Header Commands::     Commands for moving headers or changing headers.
541 * Movement::            Moving around in message buffers.
542 * Insertion::           Inserting things into message buffers.
543 * MIME::                @acronym{MIME} considerations.
544 * IDNA::                Non-@acronym{ASCII} domain name considerations.
545 * Security::            Signing and encrypting messages.
546 * Various Commands::    Various things.
547 * Sending::             Actually sending the message.
548 * Mail Aliases::        How to use mail aliases.
549 * Spelling::            Having Emacs check your spelling.
550 @end menu
553 @node Buffer Entry
554 @section Buffer Entry
555 @cindex undo
556 @kindex C-_
558 You most often end up in a Message buffer when responding to some other
559 message of some sort.  Message does lots of handling of quoted text, and
560 may remove signatures, reformat the text, or the like---depending on
561 which used settings you're using.  Message usually gets things right,
562 but sometimes it stumbles.  To help the user unwind these stumblings,
563 Message sets the undo boundary before each major automatic action it
564 takes.  If you press the undo key (usually located at @kbd{C-_}) a few
565 times, you will get back the un-edited message you're responding to.
568 @node Header Commands
569 @section Header Commands
571 @subsection Commands for moving to headers
573 These following commands move to the header in question.  If it doesn't
574 exist, it will be inserted.
576 @table @kbd
578 @item C-c ?
579 @kindex C-c ?
580 @findex describe-mode
581 Describe the message mode.
583 @item C-c C-f C-t
584 @kindex C-c C-f C-t
585 @findex message-goto-to
586 Go to the @code{To} header (@code{message-goto-to}).
588 @item C-c C-f C-o
589 @kindex C-c C-f C-o
590 @findex message-goto-from
591 Go to the @code{From} header (@code{message-goto-from}).  (The ``o''
592 in the key binding is for Originator.)
594 @item C-c C-f C-b
595 @kindex C-c C-f C-b
596 @findex message-goto-bcc
597 Go to the @code{Bcc} header (@code{message-goto-bcc}).
599 @item C-c C-f C-w
600 @kindex C-c C-f C-w
601 @findex message-goto-fcc
602 Go to the @code{Fcc} header (@code{message-goto-fcc}).
604 @item C-c C-f C-c
605 @kindex C-c C-f C-c
606 @findex message-goto-cc
607 Go to the @code{Cc} header (@code{message-goto-cc}).
609 @item C-c C-f C-s
610 @kindex C-c C-f C-s
611 @findex message-goto-subject
612 Go to the @code{Subject} header (@code{message-goto-subject}).
614 @item C-c C-f C-r
615 @kindex C-c C-f C-r
616 @findex message-goto-reply-to
617 Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
619 @item C-c C-f C-n
620 @kindex C-c C-f C-n
621 @findex message-goto-newsgroups
622 Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
624 @item C-c C-f C-d
625 @kindex C-c C-f C-d
626 @findex message-goto-distribution
627 Go to the @code{Distribution} header (@code{message-goto-distribution}).
629 @item C-c C-f C-f
630 @kindex C-c C-f C-f
631 @findex message-goto-followup-to
632 Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
634 @item C-c C-f C-k
635 @kindex C-c C-f C-k
636 @findex message-goto-keywords
637 Go to the @code{Keywords} header (@code{message-goto-keywords}).
639 @item C-c C-f C-u
640 @kindex C-c C-f C-u
641 @findex message-goto-summary
642 Go to the @code{Summary} header (@code{message-goto-summary}).
644 @item C-c C-f C-i
645 @kindex C-c C-f C-i
646 @findex message-insert-or-toggle-importance
647 This inserts the @samp{Importance:} header with a value of
648 @samp{high}.  This header is used to signal the importance of the
649 message to the receiver.  If the header is already present in the
650 buffer, it cycles between the three valid values according to RFC
651 1376: @samp{low}, @samp{normal} and @samp{high}.
653 @item C-c C-f C-a
654 @kindex C-c C-f C-a
655 @findex message-generate-unsubscribed-mail-followup-to
656 Insert a reasonable @samp{Mail-Followup-To:} header
657 (@pxref{Mailing Lists}) in a post to an
658 unsubscribed list.  When making original posts to a mailing list you are
659 not subscribed to, you have to type in a @samp{Mail-Followup-To:} header
660 by hand.  The contents, usually, are the addresses of the list and your
661 own address.  This function inserts such a header automatically.  It
662 fetches the contents of the @samp{To:} header in the current mail
663 buffer, and appends the current @code{user-mail-address}.
665 If the optional argument @code{include-cc} is non-@code{nil}, the
666 addresses in the @samp{Cc:} header are also put into the
667 @samp{Mail-Followup-To:} header.
669 @end table
671 @subsection  Commands to change headers
673 @table @kbd
675 @item C-c C-o
676 @kindex C-c C-o
677 @findex message-sort-headers
678 @vindex message-header-format-alist
679 Sort headers according to @code{message-header-format-alist}
680 (@code{message-sort-headers}).
682 @item C-c C-t
683 @kindex C-c C-t
684 @findex message-insert-to
685 Insert a @code{To} header that contains the @code{Reply-To} or
686 @code{From} header of the message you're following up
687 (@code{message-insert-to}).
689 @item C-c C-n
690 @kindex C-c C-n
691 @findex message-insert-newsgroups
692 Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
693 or @code{Newsgroups} header of the article you're replying to
694 (@code{message-insert-newsgroups}).
696 @item C-c C-l
697 @kindex C-c C-l
698 @findex message-to-list-only
699 Send a message to the list only.  Remove all addresses but the list
700 address from @code{To:} and @code{Cc:} headers.
702 @item C-c M-n
703 @kindex C-c M-n
704 @findex message-insert-disposition-notification-to
705 Insert a request for a disposition
706 notification.  (@code{message-insert-disposition-notification-to}).
707 This means that if the recipient supports RFC 2298 she might send you a
708 notification that she received the message.
710 @item M-x message-insert-importance-high
711 @kindex M-x message-insert-importance-high
712 @findex message-insert-importance-high
713 @cindex Importance
714 Insert an @samp{Importance} header with a value of @samp{high},
715 deleting headers if necessary.
717 @item M-x message-insert-importance-low
718 @kindex M-x message-insert-importance-low
719 @findex message-insert-importance-low
720 @cindex Importance
721 Insert an @samp{Importance} header with a value of @samp{low}, deleting
722 headers if necessary.
724 @item C-c C-f s
725 @kindex C-c C-f s
726 @findex message-change-subject
727 @cindex Subject
728 Change the current @samp{Subject} header.  Ask for new @samp{Subject}
729 header and append @samp{(was: <Old Subject>)}.  The old subject can be
730 stripped on replying, see @code{message-subject-trailing-was-query}
731 (@pxref{Message Headers}).
733 @item C-c C-f x
734 @kindex C-c C-f x
735 @findex message-cross-post-followup-to
736 @vindex message-cross-post-default
737 @vindex message-cross-post-note-function
738 @cindex X-Post
739 @cindex cross-post
740 Set up the @samp{FollowUp-To} header with a target newsgroup for a
741 cross-post, add that target newsgroup to the @samp{Newsgroups} header if
742 it is not a member of @samp{Newsgroups}, and insert a note in the body.
743 If @code{message-cross-post-default} is @code{nil} or if this command is
744 called with a prefix-argument, only the @samp{FollowUp-To} header will
745 be set but the target newsgroup will not be added to the
746 @samp{Newsgroups} header.  The function to insert a note is controlled
747 by the @code{message-cross-post-note-function} variable.
749 @item C-c C-f t
750 @kindex C-c C-f t
751 @findex message-reduce-to-to-cc
752 Replace contents of @samp{To} header with contents of @samp{Cc}
753 header (or the @samp{Bcc} header, if there is no @samp{Cc} header).
755 @item C-c C-f w
756 @kindex C-c C-f w
757 @findex message-insert-wide-reply
758 Insert @samp{To} and @samp{Cc} headers as if you were doing a wide
759 reply even if the message was not made for a wide reply first.
761 @item C-c C-f a
762 @kindex C-c C-f a
763 @findex message-add-archive-header
764 @vindex message-archive-header
765 @vindex message-archive-note
766 @cindex X-No-Archive
767 Insert @samp{X-No-Archive: Yes} in the header and a note in the body.
768 The header and the note can be customized using
769 @code{message-archive-header} and @code{message-archive-note}.  When
770 called with a prefix argument, ask for a text to insert.  If you don't
771 want the note in the body, set @code{message-archive-note} to
772 @code{nil}.
774 @end table
777 @node Movement
778 @section Movement
780 @table @kbd
781 @item C-c C-b
782 @kindex C-c C-b
783 @findex message-goto-body
784 Move to the beginning of the body of the message
785 (@code{message-goto-body}).
787 @item C-c C-i
788 @kindex C-c C-i
789 @findex message-goto-signature
790 Move to the signature of the message (@code{message-goto-signature}).
792 @item C-a
793 @kindex C-a
794 @findex message-beginning-of-line
795 @vindex message-beginning-of-line
796 If at beginning of header value, go to beginning of line, else go to
797 beginning of header value.  (The header value comes after the header
798 name and the colon.)  This behavior can be disabled by toggling
799 the variable @code{message-beginning-of-line}.
801 @end table
804 @node Insertion
805 @section Insertion
807 @table @kbd
809 @item C-c C-y
810 @kindex C-c C-y
811 @findex message-yank-original
812 Yank the message that's being replied to into the message buffer
813 (@code{message-yank-original}).
815 @item C-c C-M-y
816 @kindex C-c C-M-y
817 @findex message-yank-buffer
818 Prompt for a buffer name and yank the contents of that buffer into the
819 message buffer (@code{message-yank-buffer}).
821 @item C-c C-q
822 @kindex C-c C-q
823 @findex message-fill-yanked-message
824 Fill the yanked message (@code{message-fill-yanked-message}).  Warning:
825 Can severely mess up the yanked text if its quoting conventions are
826 strange.  You'll quickly get a feel for when it's safe, though.  Anyway,
827 just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
828 all right.
830 @item C-c C-w
831 @kindex C-c C-w
832 @findex message-insert-signature
833 Insert a signature at the end of the buffer
834 (@code{message-insert-signature}).
836 @item C-c M-h
837 @kindex C-c M-h
838 @findex message-insert-headers
839 Insert the message headers (@code{message-insert-headers}).
841 @item C-c M-m
842 @kindex C-c M-m
843 @findex message-mark-inserted-region
844 Mark some region in the current article with enclosing tags.  See
845 @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
846 When called with a prefix argument, use slrn style verbatim marks
847 (@samp{#v+} and @samp{#v-}).
849 @item C-c M-f
850 @kindex C-c M-f
851 @findex message-mark-insert-file
852 Insert a file in the current article with enclosing tags.
853 See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
854 When called with a prefix argument, use slrn style verbatim marks
855 (@samp{#v+} and @samp{#v-}).
857 @end table
860 @node MIME
861 @section MIME
862 @cindex MML
863 @cindex MIME
864 @cindex multipart
865 @cindex attachment
867 Message is a @acronym{MIME}-compliant posting agent.  The user generally
868 doesn't have to do anything to make the @acronym{MIME} happen---Message will
869 automatically add the @code{Content-Type} and
870 @code{Content-Transfer-Encoding} headers.
872 @findex mml-attach-file
873 @kindex C-c C-a
874 The most typical thing users want to use the multipart things in
875 @acronym{MIME} for is to add ``attachments'' to mail they send out.
876 This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach-file}),
877 which will prompt for a file name and a @acronym{MIME} type.
879 @vindex mml-dnd-protocol-alist
880 @vindex mml-dnd-attach-options
881 If your Emacs supports drag and drop, you can also drop the file in the
882 Message buffer.  The variable @code{mml-dnd-protocol-alist} specifies
883 what kind of action is done when you drop a file into the Message
884 buffer.  The variable @code{mml-dnd-attach-options} controls which
885 @acronym{MIME} options you want to specify when dropping a file.  If it
886 is a list, valid members are @code{type}, @code{description} and
887 @code{disposition}.  @code{disposition} implies @code{type}.  If it is
888 @code{nil}, don't ask for options.  If it is @code{t}, ask the user
889 whether or not to specify options.
891 You can also create arbitrarily complex multiparts using the @acronym{MML}
892 language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
893 Manual}).
895 @node IDNA
896 @section IDNA
897 @cindex IDNA
898 @cindex internationalized domain names
899 @cindex non-ascii domain names
901 @acronym{IDNA} is a standard way to encode non-@acronym{ASCII} domain
902 names into a readable @acronym{ASCII} string.  The details can be
903 found in RFC 3490.
905 Message is a @acronym{IDNA}-compliant posting agent.  The user
906 generally doesn't have to do anything to make the @acronym{IDNA}
907 happen---Message will encode non-@acronym{ASCII} domain names in @code{From},
908 @code{To}, and @code{Cc} headers automatically.
910 Until @acronym{IDNA} becomes more well known, Message queries you
911 whether @acronym{IDNA} encoding of the domain name really should
912 occur.  Some users might not be aware that domain names can contain
913 non-@acronym{ASCII} now, so this gives them a safety net if they accidentally
914 typed a non-@acronym{ASCII} domain name.
916 @vindex message-use-idna
917 The @code{message-use-idna} variable control whether @acronym{IDNA} is
918 used.  If the variable is @code{nil} no @acronym{IDNA} encoding will
919 ever happen, if it is set to the symbol @code{ask} the user will be
920 queried, and if set to @code{t} (which is the default if @acronym{IDNA}
921 is fully available) @acronym{IDNA} encoding happens automatically.
923 @findex message-idna-to-ascii-rhs
924 If you want to experiment with the @acronym{IDNA} encoding, you can
925 invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer
926 to have the non-@acronym{ASCII} domain names encoded while you edit
927 the message.
929 Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
930 Libidn} installed in order to use this functionality.
932 @node Security
933 @section Security
934 @cindex Security
935 @cindex S/MIME
936 @cindex PGP
937 @cindex PGP/MIME
938 @cindex sign
939 @cindex encrypt
940 @cindex secure
942 By default, e-mails are transmitted without any protection around the
943 Internet, which implies that they can be read and changed by lots of
944 different parties.  In particular, they are analyzed under bulk
945 surveillance, which violates basic human rights.  To defend those
946 rights, digital self-defense is necessary (in addition to legal
947 changes), and encryption and digital signatures are powerful
948 techniques for self-defense.  In essence, encryption ensures that
949 only the intended recipient will be able to read a message, while
950 digital signatures make sure that modifications to messages can be
951 detected by the recipient.
953 Nowadays, there are two major incompatible e-mail encryption
954 standards, namely @acronym{OpenPGP} and @acronym{S/MIME}.  Both of
955 these standards are implemented by the @uref{https://www.gnupg.org/,
956 GNU Privacy Guard (GnuPG)}, which needs to be installed as external
957 software in addition to GNU Emacs.  Before you can start to encrypt,
958 decrypt, and sign messages, you need to create a so-called key-pair,
959 which consists of a private key and a public key.  Your @emph{public} key
960 (also known as @emph{certificate}, in particular with @acronym{S/MIME}), is
961 used by others (a) to encrypt messages intended for you and (b) to verify
962 digital signatures created by you.  In contrast, you use your @emph{private}
963 key (a) to decrypt messages and (b) to sign messages.  (You may want to
964 think of your public key as an open safe that you offer to others such
965 that they can deposit messages and lock the door, while your private
966 key corresponds to the opening combination for the safe.)
968 Thus, you need to perform the following steps for e-mail encryption,
969 typically outside Emacs.  See, for example, the
970 @uref{https://www.gnupg.org/gph/en/manual.html, The GNU Privacy
971 Handbook} for details covering the standard @acronym{OpenPGP} with
972 @acronym{GnuPG}.
973 @enumerate
974 @item
975 Install GnuPG.
976 @item
977 Create a key-pair for your own e-mail address.
978 @item
979 Distribute your public key, e.g., via upload to key servers.
980 @item
981 Import the public keys for the recipients to which you want to send
982 encrypted e-mails.
983 @end enumerate
985 Whether to use the standard @acronym{OpenPGP} or @acronym{S/MIME} is
986 beyond the scope of this documentation.  Actually, you can use one
987 standard for one set of recipients and the other standard for
988 different recipients (depending their preferences or capabilities).
990 In case you are not familiar with all those acronyms: The standard
991 @acronym{OpenPGP} is also called @acronym{PGP} (Pretty Good Privacy).
992 The command line tools offered by @acronym{GnuPG} for
993 @acronym{OpenPGP} are called @command{gpg} and @command{gpg2}, while
994 the one for @acronym{S/MIME} is called @command{gpgsm}.  An
995 alternative, but discouraged, tool for @acronym{S/MIME} is
996 @command{openssl}.  To make matters worse, e-mail messages can be
997 formed in two different ways with @acronym{OpenPGP}, namely
998 @acronym{PGP} (RFC 1991/4880) and @acronym{PGP/MIME} (RFC 2015/3156).
1000 The good news, however, is the following: In GNU Emacs, Message
1001 supports all those variants, comes with reasonable defaults that can
1002 be customized according to your needs, and invokes the proper command
1003 line tools behind the scenes for encryption, decryption, as well as
1004 creation and verification of digital signatures.
1006 Message uses the @acronym{MML} language for the creation of signed
1007 and/or encrypted messages as explained in the following.
1010 @menu
1011 * Signing and encryption::      Signing and encrypting commands.
1012 * Using S/MIME::                Using S/MIME
1013 * Using OpenPGP::               Using OpenPGP
1014 * Passphrase caching::          How to cache passphrases
1015 * PGP Compatibility::           Compatibility with older implementations
1016 * Encrypt-to-self::             Reading your own encrypted messages
1017 * Bcc Warning::                 Do not use encryption with Bcc headers
1018 @end menu
1020 @node Signing and encryption
1021 @subsection Signing and encrypting commands
1023 Instructing @acronym{MML} to perform security operations on a
1024 @acronym{MIME} part is done using the @kbd{C-c C-m s} key map for
1025 signing and the @kbd{C-c C-m c} key map for encryption, as follows.
1026 @table @kbd
1028 @item C-c C-m s s
1029 @kindex C-c C-m s s
1030 @findex mml-secure-message-sign-smime
1032 Digitally sign current message using @acronym{S/MIME}.
1034 @item C-c C-m s o
1035 @kindex C-c C-m s o
1036 @findex mml-secure-message-sign-pgp
1038 Digitally sign current message using @acronym{PGP}.
1040 @item C-c C-m s p
1041 @kindex C-c C-m s p
1042 @findex mml-secure-message-sign-pgpmime
1044 Digitally sign current message using @acronym{PGP/MIME}.
1046 @item C-c C-m c s
1047 @kindex C-c C-m c s
1048 @findex mml-secure-message-encrypt-smime
1050 Digitally encrypt current message using @acronym{S/MIME}.
1052 @item C-c C-m c o
1053 @kindex C-c C-m c o
1054 @findex mml-secure-message-encrypt-pgp
1056 Digitally encrypt current message using @acronym{PGP}.
1058 @item C-c C-m c p
1059 @kindex C-c C-m c p
1060 @findex mml-secure-message-encrypt-pgpmime
1062 Digitally encrypt current message using @acronym{PGP/MIME}.
1064 @item C-c C-m C-n
1065 @kindex C-c C-m C-n
1066 @findex mml-unsecure-message
1067 Remove security related @acronym{MML} tags from message.
1069 @end table
1071 These commands do not immediately sign or encrypt the message, they
1072 merely insert the proper @acronym{MML} secure tag to instruct the
1073 @acronym{MML} engine to perform that operation when the message is
1074 actually sent.  They may perform other operations too, such as locating
1075 and retrieving a @acronym{S/MIME} certificate of the person you wish to
1076 send encrypted mail to.  When the mml parsing engine converts your
1077 @acronym{MML} into a properly encoded @acronym{MIME} message, the secure
1078 tag will be replaced with either a part or a multipart tag.  If your
1079 message contains other mml parts, a multipart tag will be used; if no
1080 other parts are present in your message a single part tag will be used.
1081 This way, message mode will do the Right Thing (TM) with
1082 signed/encrypted multipart messages.
1084 Since signing and especially encryption often is used when sensitive
1085 information is sent, you may want to have some way to ensure that your
1086 mail is actually signed or encrypted.  After invoking the above
1087 sign/encrypt commands, it is possible to preview the raw article by
1088 using @kbd{C-u C-c RET P} (@code{mml-preview}).  Then you can
1089 verify that your long rant about what your ex-significant other or
1090 whomever actually did with that funny looking person at that strange
1091 party the other night, actually will be sent encrypted.
1093 @emph{Note!}  Neither @acronym{PGP/MIME} nor @acronym{S/MIME} encrypt/signs
1094 RFC822 headers.  They only operate on the @acronym{MIME} object.  Keep this
1095 in mind before sending mail with a sensitive Subject line.
1097 By default, when encrypting a message, Gnus will use the
1098 ``signencrypt'' mode, which means the message is both signed and
1099 encrypted.  If you would like to disable this for a particular
1100 message, give the @code{mml-secure-message-encrypt-*} command a prefix
1101 argument, e.g., @kbd{C-u C-c C-m c p}.
1103 Actually using the security commands above is not very difficult.  At
1104 least not compared with making sure all involved programs talk with each
1105 other properly.  Thus, we now describe what external libraries or
1106 programs are required to make things work, and some small general hints.
1108 @node Using S/MIME
1109 @subsection Using S/MIME
1111 @acronym{S/MIME} requires an external implementation, such as
1112 @uref{https://www.gnupg.org/, GNU Privacy Guard} or
1113 @uref{https://www.openssl.org/, OpenSSL}.  The default Emacs interface
1114 to the S/MIME implementation is EasyPG (@pxref{Top,,EasyPG Assistant
1115 User's Manual, epa, EasyPG Assistant User's Manual}), which has been
1116 included in Emacs since version 23 and which relies on the command
1117 line tool @command{gpgsm} provided by @acronym{GnuPG}.  That tool
1118 implements certificate management, including certificate revocation
1119 and expiry, while such tasks need to be performed manually, if OpenSSL
1120 is used.
1122 The choice between EasyPG and OpenSSL is controlled by the variable
1123 @code{mml-smime-use}, which needs to be set to the value @code{epg}
1124 for EasyPG.  Depending on your version of Emacs that value may be the
1125 default; if not, you can either customize that variable or place the
1126 following line in your @file{.emacs} file (that line needs to be
1127 placed above other code related to message/gnus/encryption):
1129 @lisp
1130 (require 'epg)
1131 @end lisp
1133 Moreover, you may want to customize the variables
1134 @code{mml-default-encrypt-method} and
1135 @code{mml-default-sign-method} to the string @code{"smime"}.
1137 That's all if you want to use S/MIME with EasyPG, and that's the
1138 recommended way of using S/MIME with Message.
1140 If you think about using OpenSSL instead of EasyPG, please read the
1141 BUGS section in the manual for the @command{smime} command coming with
1142 OpenSSL first.  If you still want to use OpenSSL, the following
1143 applies.
1145 @emph{Note!}  The remainder of this section assumes you have a basic
1146 familiarity with modern cryptography, @acronym{S/MIME}, various PKCS
1147 standards, OpenSSL and so on.
1149 The @acronym{S/MIME} support in Message (and @acronym{MML}) can use
1150 OpenSSL@.  OpenSSL performs the actual @acronym{S/MIME} sign/encrypt
1151 operations.  OpenSSL can be found at @uref{http://www.openssl.org/}.
1152 OpenSSL 0.9.6 and later should work.  Version 0.9.5a cannot extract mail
1153 addresses from certificates, and it insert a spurious CR character into
1154 @acronym{MIME} separators so you may wish to avoid it if you would like
1155 to avoid being regarded as someone who send strange mail.  (Although by
1156 sending @acronym{S/MIME} messages you've probably already lost that
1157 contest.)
1159 To be able to send encrypted mail, a personal certificate is not
1160 required.  Message (@acronym{MML}) need a certificate for the person to whom you
1161 wish to communicate with though.  You're asked for this when you type
1162 @kbd{C-c C-m c s}.  Currently there are two ways to retrieve this
1163 certificate, from a local file or from DNS@.  If you chose a local
1164 file, it need to contain a X.509 certificate in @acronym{PEM} format.
1165 If you chose DNS, you're asked for the domain name where the
1166 certificate is stored, the default is a good guess.  To my belief,
1167 Message (@acronym{MML}) is the first mail agent in the world to support
1168 retrieving @acronym{S/MIME} certificates from DNS, so you're not
1169 likely to find very many certificates out there.  At least there
1170 should be one, stored at the domain @code{simon.josefsson.org}.  LDAP
1171 is a more popular method of distributing certificates, support for it
1172 is planned.  (Meanwhile, you can use @code{ldapsearch} from the
1173 command line to retrieve a certificate into a file and use it.)
1175 As for signing messages, OpenSSL can't perform signing operations
1176 without some kind of configuration.  Especially, you need to tell it
1177 where your private key and your certificate is stored.  @acronym{MML}
1178 uses an Emacs interface to OpenSSL, aptly named @code{smime.el}, and it
1179 contain a @code{custom} group used for this configuration.  So, try
1180 @kbd{M-x customize-group RET smime RET} and look around.
1182 Currently there is no support for talking to a CA (or RA) to create
1183 your own certificate.  None is planned either.  You need to do this
1184 manually with OpenSSL or using some other program.  I used Netscape
1185 and got a free @acronym{S/MIME} certificate from one of the big CA's on the
1186 net.  Netscape is able to export your private key and certificate in
1187 PKCS #12 format.  Use OpenSSL to convert this into a plain X.509
1188 certificate in PEM format as follows.
1190 @example
1191 $ openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
1192 @end example
1194 The @file{key+cert.pem} file should be pointed to from the
1195 @code{smime-keys} variable.  You should now be able to send signed mail.
1197 @emph{Note!}  Your private key is now stored unencrypted in the file,
1198 so take care in handling it.  Storing encrypted keys on the disk are
1199 supported, and Gnus will ask you for a passphrase before invoking
1200 OpenSSL@.  Read the OpenSSL documentation for how to achieve this.  If
1201 you use unencrypted keys (e.g., if they are on a secure storage, or if
1202 you are on a secure single user machine) simply press @code{RET} at
1203 the passphrase prompt.
1205 @node Using OpenPGP
1206 @subsection Using OpenPGP
1208 Use of OpenPGP requires an external software, such
1209 as @uref{https://www.gnupg.org/, GNU Privacy Guard}.  Pre-OpenPGP
1210 implementations such as PGP 2.x and PGP 5.x are also supported.  The
1211 default Emacs interface to the PGP implementation is EasyPG
1212 (@pxref{Top,,EasyPG Assistant User's Manual, epa, EasyPG Assistant
1213 User's Manual}), but PGG (@pxref{Top, ,PGG, pgg, PGG Manual}) and
1214 Mailcrypt are also supported.  @xref{PGP Compatibility}.
1216 As stated earlier, messages encrypted with OpenPGP can be formatted
1217 according to two different standards, namely @acronym{PGP} or
1218 @acronym{PGP/MIME}.  The variables
1219 @code{mml-default-encrypt-method} and
1220 @code{mml-default-sign-method} determine which variant to prefer,
1221 @acronym{PGP/MIME} by default.
1223 @node Passphrase caching
1224 @subsection Passphrase caching
1226 @cindex gpg-agent
1227 Message with EasyPG internally calls GnuPG (the @command{gpg} or
1228 @command{gpgsm} command) to perform
1229 data encryption, and in certain cases (decrypting or signing for
1230 example), @command{gpg}/@command{gpgsm} requires user's passphrase.
1231 Currently the recommended way to supply your passphrase is to use the
1232 @command{gpg-agent} program.
1234 In particular, the @command{gpg-agent} program supports passphrase
1235 caching so that you do not need to enter your passphrase for every
1236 decryption/sign operation.  @xref{Agent Options, , , gnupg, Using the
1237 GNU Privacy Guard}.
1239 How to use @command{gpg-agent} in Emacs depends on your version of
1240 GnuPG.  With GnuPG version 2.1, @command{gpg-agent} is started
1241 automatically if necessary.  With older versions you may need to run
1242 the following command from the shell before starting Emacs.
1244 @example
1245 eval `gpg-agent --daemon`
1246 @end example
1248 This will invoke @command{gpg-agent} and set the environment variable
1249 @code{GPG_AGENT_INFO} to allow @command{gpg} to communicate with it.
1250 It might be good idea to put this command in your @file{.xsession} or
1251 @file{.bash_profile}.  @xref{Invoking GPG-AGENT, , , gnupg, Using the
1252 GNU Privacy Guard}.
1254 Once your @command{gpg-agent} is set up, it will ask you for a
1255 passphrase as needed for @command{gpg}.  Under the X Window System,
1256 you will see a new passphrase input dialog appear.  The dialog is
1257 provided by PIN Entry (the @command{pinentry} command), reasonably
1258 recent versions of which can also cooperate with Emacs on a text
1259 console.  If that does not work, you may need to put a passphrase into
1260 gpg-agent's cache beforehand.  The following command does the trick.
1262 @example
1263 gpg --use-agent --sign < /dev/null > /dev/null
1264 @end example
1266 @node PGP Compatibility
1267 @subsection Compatibility with older implementations
1269 @vindex gpg-temp-directory
1270 Note, if you are using the @code{gpg.el} you must make sure that the
1271 directory specified by @code{gpg-temp-directory} have permissions
1272 0700.
1274 Creating your own key is described in detail in the documentation of
1275 your PGP implementation, so we refer to it.
1277 If you have imported your old PGP 2.x key into GnuPG, and want to send
1278 signed and encrypted messages to your fellow PGP 2.x users, you'll
1279 discover that the receiver cannot understand what you send. One
1280 solution is to use PGP 2.x instead (e.g., if you use @code{pgg}, set
1281 @code{pgg-default-scheme} to @code{pgp}). You could also convince your
1282 fellow PGP 2.x users to convert to GnuPG@.
1283 @vindex mml-signencrypt-style-alist
1284 As a final workaround, you can make the sign and encryption work in
1285 two steps; separately sign, then encrypt a message.  If you would like
1286 to change this behavior you can customize the
1287 @code{mml-signencrypt-style-alist} variable.  For example:
1289 @lisp
1290 (setq mml-signencrypt-style-alist '(("smime" separate)
1291                                     ("pgp" separate)
1292                                     ("pgpauto" separate)
1293                                     ("pgpmime" separate)))
1294 @end lisp
1296 This causes to sign and encrypt in two passes, thus generating a
1297 message that can be understood by PGP version 2.
1299 (Refer to @uref{http://www.gnupg.org/gph/en/pgp2x.html} for more
1300 information about the problem.)
1302 @node Encrypt-to-self
1303 @subsection Encrypt-to-self
1305 By default, messages are encrypted to all recipients (@code{To},
1306 @code{Cc}, @code{Bcc} headers).  Thus, you will not be able to decrypt
1307 your own messages.  To make sure that messages are also encrypted to
1308 your own key(s), several alternative solutions exist:
1309 @enumerate
1310 @item
1311 Use the @code{encrypt-to} option in the file @file{gpg.conf} (for
1312 OpenPGP) or @file{gpgsm.conf} (for @acronym{S/MIME} with EasyPG).
1313 @xref{Invoking GPG, , , gnupg, Using the GNU Privacy Guard}, or
1314 @xref{Invoking GPGSM, , , gnupg, Using the GNU Privacy Guard}.
1315 @item
1316 Include your own e-mail address (for which you created a key-pair)
1317 among the recipients.
1318 @item
1319 Customize the variable @code{mml-secure-openpgp-encrypt-to-self} (for
1320 OpenPGP) or @code{mml-secure-smime-encrypt-to-self} (for
1321 @acronym{S/MIME} with EasyPG).
1322 @end enumerate
1324 @node Bcc Warning
1325 @subsection Bcc Warning
1327 The @code{Bcc} header is meant to hide recipients of messages.
1328 However, when encrypted messages are used, the e-mail addresses of all
1329 @code{Bcc}-headers are given away to all recipients without
1330 warning, which is a bug, see
1331 @uref{https://debbugs.gnu.org/cgi/bugreport.cgi?bug=18718}.
1334 @node Various Commands
1335 @section Various Commands
1337 @table @kbd
1339 @item C-c C-r
1340 @kindex C-c C-r
1341 @findex message-caesar-buffer-body
1342 Caesar rotate (aka. rot13) the current message
1343 (@code{message-caesar-buffer-body}).  If narrowing is in effect, just
1344 rotate the visible portion of the buffer.  A numerical prefix says how
1345 many places to rotate the text.  The default is 13.
1347 @item C-c C-e
1348 @kindex C-c C-e
1349 @findex message-elide-region
1350 @vindex message-elide-ellipsis
1351 Elide the text between point and mark (@code{message-elide-region}).
1352 The text is killed and replaced with the contents of the variable
1353 @code{message-elide-ellipsis}.  The default value is to use an ellipsis
1354 (@samp{[...]}).
1356 This is a format-spec string, and you can use @samp{%l} to say how
1357 many lines were removed, and @samp{%c} to say how many characters were
1358 removed.
1360 @item C-c M-k
1361 @kindex C-c M-k
1362 @findex message-kill-address
1363 Kill the address under point.
1365 @item C-c C-z
1366 @kindex C-c C-z
1367 @findex message-kill-to-signature
1368 Kill all the text up to the signature, or if that's missing, up to the
1369 end of the message (@code{message-kill-to-signature}).
1371 @item C-c C-v
1372 @kindex C-c C-v
1373 @findex message-delete-not-region
1374 Delete all text in the body of the message that is outside the region
1375 (@code{message-delete-not-region}).
1377 @item M-RET
1378 @kindex M-RET
1379 @findex message-newline-and-reformat
1380 Insert four newlines, and then reformat if inside quoted text.
1382 Here's an example:
1384 @example
1385 > This is some quoted text.  And here's more quoted text.
1386 @end example
1388 If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
1390 @example
1391 > This is some quoted text.
1395 > And here's more quoted text.
1396 @end example
1398 @samp{*} says where point will be placed.
1400 @item C-c M-r
1401 @kindex C-c M-r
1402 @findex message-rename-buffer
1403 Rename the buffer (@code{message-rename-buffer}).  If given a prefix,
1404 prompt for a new buffer name.
1406 @item TAB
1407 @kindex TAB
1408 @findex message-tab
1409 @vindex message-tab-body-function
1410 If @code{message-tab-body-function} is non-@code{nil}, execute the
1411 function it specifies.  Otherwise use the function bound to @kbd{TAB} in
1412 @code{text-mode-map} or @code{global-map}.
1414 @end table
1417 @node Sending
1418 @section Sending
1420 @table @kbd
1421 @item C-c C-c
1422 @kindex C-c C-c
1423 @findex message-send-and-exit
1424 Send the message and bury the current buffer
1425 (@code{message-send-and-exit}).
1427 @item C-c C-s
1428 @kindex C-c C-s
1429 @findex message-send
1430 Send the message (@code{message-send}).
1432 @item C-c C-d
1433 @kindex C-c C-d
1434 @findex message-dont-send
1435 Bury the message buffer and exit (@code{message-dont-send}).
1437 @item C-c C-k
1438 @kindex C-c C-k
1439 @findex message-kill-buffer
1440 Kill the message buffer and exit (@code{message-kill-buffer}).
1442 @end table
1446 @node Mail Aliases
1447 @section Mail Aliases
1448 @cindex mail aliases
1449 @cindex aliases
1450 @cindex completion
1451 @cindex ecomplete
1453 @vindex message-mail-alias-type
1454 The @code{message-mail-alias-type} variable controls what type of mail
1455 alias expansion to use.  Currently two forms are supported:
1456 @code{mailabbrev} and @code{ecomplete}.  If this variable is
1457 @code{nil}, no mail alias expansion will be performed.
1459 @code{mailabbrev} works by parsing the @file{/etc/mailrc} and
1460 @file{~/.mailrc} files.  These files look like:
1462 @example
1463 alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
1464 alias ding "ding@@ifi.uio.no (ding mailing list)"
1465 @end example
1467 After adding lines like this to your @file{~/.mailrc} file, you should
1468 be able to just write @samp{lmi} in the @code{To} or @code{Cc} (and so
1469 on) headers and press @kbd{SPC} to expand the alias.
1471 No expansion will be performed upon sending of the message---all
1472 expansions have to be done explicitly.
1474 If you're using @code{ecomplete}, all addresses from @code{To} and
1475 @code{Cc} headers will automatically be put into the
1476 @file{~/.ecompleterc} file.  When you enter text in the @code{To} and
1477 @code{Cc} headers, @code{ecomplete} will check out the values stored
1478 there and ``electrically'' say what completions are possible.  To
1479 choose one of these completions, use the @kbd{M-n} command to move
1480 down to the list.  Use @kbd{M-n} and @kbd{M-p} to move down and up the
1481 list, and @kbd{RET} to choose a completion.
1483 @node Spelling
1484 @section Spelling
1485 @cindex spelling
1486 @findex ispell-message
1488 There are two popular ways to have Emacs spell-check your messages:
1489 @code{ispell} and @code{flyspell}.  @code{ispell} is the older and
1490 probably more popular package.  You typically first write the message,
1491 and then run the entire thing through @code{ispell} and fix all the
1492 typos.  To have this happen automatically when you send a message, put
1493 something like the following in your @file{.emacs} file:
1495 @lisp
1496 (add-hook 'message-send-hook 'ispell-message)
1497 @end lisp
1499 @vindex ispell-message-dictionary-alist
1500 If you're in the habit of writing in different languages, this can be
1501 controlled by the @code{ispell-message-dictionary-alist} variable:
1503 @lisp
1504 (setq ispell-message-dictionary-alist
1505       '(("^Newsgroups:.*\\bde\\." . "deutsch8")
1506         (".*" . "default")))
1507 @end lisp
1509 @code{ispell} depends on having the external @samp{ispell} command
1510 installed.
1512 The other popular method is using @code{flyspell}.  This package checks
1513 your spelling while you're writing, and marks any mis-spelled words in
1514 various ways.
1516 To use @code{flyspell}, put something like the following in your
1517 @file{.emacs} file:
1519 @lisp
1520 (defun my-message-setup-routine ()
1521   (flyspell-mode 1))
1522 (add-hook 'message-setup-hook 'my-message-setup-routine)
1523 @end lisp
1525 @code{flyspell} depends on having the external @samp{ispell} command
1526 installed.
1529 @node Variables
1530 @chapter Variables
1532 @menu
1533 * Message Headers::             General message header stuff.
1534 * Mail Headers::                Customizing mail headers.
1535 * Mail Variables::              Other mail variables.
1536 * News Headers::                Customizing news headers.
1537 * News Variables::              Other news variables.
1538 * Insertion Variables::         Customizing how things are inserted.
1539 * Various Message Variables::   Other message variables.
1540 * Sending Variables::           Variables for sending.
1541 * Message Buffers::             How Message names its buffers.
1542 * Message Actions::             Actions to be performed when exiting.
1543 @end menu
1546 @node Message Headers
1547 @section Message Headers
1549 Message is quite aggressive on the message generation front.  It has to
1550 be---it's a combined news and mail agent.  To be able to send combined
1551 messages, it has to generate all headers itself (instead of letting the
1552 mail/news system do it) to ensure that mail and news copies of messages
1553 look sufficiently similar.
1555 @table @code
1557 @item message-generate-headers-first
1558 @vindex message-generate-headers-first
1559 If @code{t}, generate all required headers before starting to
1560 compose the message.  This can also be a list of headers to generate:
1562 @lisp
1563 (setq message-generate-headers-first
1564       '(References))
1565 @end lisp
1567 @vindex message-required-headers
1568 The variables @code{message-required-headers},
1569 @code{message-required-mail-headers} and
1570 @code{message-required-news-headers} specify which headers are
1571 required.
1573 Note that some headers will be removed and re-generated before posting,
1574 because of the variable @code{message-deletable-headers} (see below).
1576 @item message-draft-headers
1577 @vindex message-draft-headers
1578 When running Message from Gnus, the message buffers are associated
1579 with a draft group.  @code{message-draft-headers} says which headers
1580 should be generated when a draft is written to the draft group.
1582 @item message-from-style
1583 @vindex message-from-style
1584 Specifies how @code{From} headers should look.  There are four valid
1585 values:
1587 @table @code
1588 @item nil
1589 Just the address---@samp{king@@grassland.com}.
1591 @item parens
1592 @samp{king@@grassland.com (Elvis Parsley)}.
1594 @item angles
1595 @samp{Elvis Parsley <king@@grassland.com>}.
1597 @item default
1598 Look like @code{angles} if that doesn't require quoting, and
1599 @code{parens} if it does.  If even @code{parens} requires quoting, use
1600 @code{angles} anyway.
1602 @end table
1604 @item message-deletable-headers
1605 @vindex message-deletable-headers
1606 Headers in this list that were previously generated by Message will be
1607 deleted before posting.  Let's say you post an article.  Then you decide
1608 to post it again to some other group, you naughty boy, so you jump back
1609 to the @file{*post-buf*} buffer, edit the @code{Newsgroups} line, and
1610 ship it off again.  By default, this variable makes sure that the old
1611 generated @code{Message-ID} is deleted, and a new one generated.  If
1612 this isn't done, the entire empire would probably crumble, anarchy would
1613 prevail, and cats would start walking on two legs and rule the world.
1614 Allegedly.
1616 @item message-default-headers
1617 @vindex message-default-headers
1618 Header lines to be inserted in outgoing messages before you edit the
1619 message, so you can edit or delete their lines. If set to a string, it
1620 is directly inserted. If set to a function, it is called and its
1621 result is inserted.
1623 @item message-subject-re-regexp
1624 @vindex message-subject-re-regexp
1625 @cindex Aw
1626 @cindex Sv
1627 @cindex Re
1628 Responses to messages have subjects that start with @samp{Re: }.  This
1629 is @emph{not} an abbreviation of the English word ``response'', but is
1630 Latin, and means ``in response to''.  Some illiterate nincompoops have
1631 failed to grasp this fact, and have ``internationalized'' their software
1632 to use abominations like @samp{Aw: } (``antwort'') or @samp{Sv: }
1633 (``svar'') instead, which is meaningless and evil.  However, you may
1634 have to deal with users that use these evil tools, in which case you may
1635 set this variable to a regexp that matches these prefixes.  Myself, I
1636 just throw away non-compliant mail.
1638 Here's an example of a value to deal with these headers when
1639 responding to a message:
1641 @lisp
1642 (setq message-subject-re-regexp
1643       (concat
1644        "^[ \t]*"
1645          "\\("
1646            "\\("
1647              "[Aa][Nn][Tt][Ww]\\.?\\|"     ; antw
1648              "[Aa][Ww]\\|"                 ; aw
1649              "[Ff][Ww][Dd]?\\|"            ; fwd
1650              "[Oo][Dd][Pp]\\|"             ; odp
1651              "[Rr][Ee]\\|"                 ; re
1652              "[Rr][\311\351][Ff]\\.?\\|"   ; ref
1653              "[Ss][Vv]"                    ; sv
1654            "\\)"
1655            "\\(\\[[0-9]*\\]\\)"
1656            "*:[ \t]*"
1657          "\\)"
1658        "*[ \t]*"
1659        ))
1660 @end lisp
1662 @item message-subject-trailing-was-query
1663 @vindex message-subject-trailing-was-query
1664 @vindex message-subject-trailing-was-ask-regexp
1665 @vindex message-subject-trailing-was-regexp
1666 Controls what to do with trailing @samp{(was: <old subject>)} in subject
1667 lines.  If @code{nil}, leave the subject unchanged.  If it is the symbol
1668 @code{ask}, query the user what to do.  In this case, the subject is
1669 matched against @code{message-subject-trailing-was-ask-regexp}.  If
1670 @code{message-subject-trailing-was-query} is @code{t}, always strip the
1671 trailing old subject.  In this case,
1672 @code{message-subject-trailing-was-regexp} is used.
1674 @item message-alternative-emails
1675 @vindex message-alternative-emails
1676 Regexp or predicate function matching alternative email addresses.
1677 The first address in the To, Cc or From headers of the original
1678 article matching this variable is used as the From field of outgoing
1679 messages, replacing the default From value.
1681 For example, if you have two secondary email addresses john@@home.net
1682 and john.doe@@work.com and want to use them in the From field when
1683 composing a reply to a message addressed to one of them, you could set
1684 this variable like this:
1686 @lisp
1687 (setq message-alternative-emails
1688       (regexp-opt '("john@@home.net" "john.doe@@work.com")))
1689 @end lisp
1691 This variable has precedence over posting styles and anything that runs
1692 off @code{message-setup-hook}.
1694 @item message-allow-no-recipients
1695 @vindex message-allow-no-recipients
1696 Specifies what to do when there are no recipients other than
1697 @code{Gcc} or @code{Fcc}.  If it is @code{always}, the posting is
1698 allowed.  If it is @code{never}, the posting is not allowed.  If it is
1699 @code{ask} (the default), you are prompted.
1701 @item message-hidden-headers
1702 @vindex message-hidden-headers
1703 A regexp, a list of regexps, or a list where the first element is
1704 @code{not} and the rest are regexps.  It says which headers to keep
1705 hidden when composing a message.
1707 @lisp
1708 (setq message-hidden-headers
1709       '(not "From" "Subject" "To" "Cc" "Newsgroups"))
1710 @end lisp
1712 Headers are hidden using narrowing, you can use @kbd{M-x widen} to
1713 expose them in the buffer.
1715 @item message-header-synonyms
1716 @vindex message-header-synonyms
1717 A list of lists of header synonyms.  E.g., if this list contains a
1718 member list with elements @code{Cc} and @code{To}, then
1719 @code{message-carefully-insert-headers} will not insert a @code{To}
1720 header when the message is already @code{Cc}ed to the recipient.
1722 @end table
1725 @node Mail Headers
1726 @section Mail Headers
1728 @table @code
1729 @item message-required-mail-headers
1730 @vindex message-required-mail-headers
1731 @xref{News Headers}, for the syntax of this variable.  It is
1732 @code{(From Subject Date (optional . In-Reply-To) Message-ID
1733 (optional . User-Agent))} by default.
1735 @item message-ignored-mail-headers
1736 @vindex message-ignored-mail-headers
1737 Regexp of headers to be removed before mailing.  The default is@*
1738 @samp{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:\\|@*
1739 ^X-Gnus-Agent-Meta-Information:}.
1741 @item message-default-mail-headers
1742 @vindex message-default-mail-headers
1743 This string is inserted at the end of the headers in all message
1744 buffers that are initialized as mail.
1746 @item message-generate-hashcash
1747 @vindex message-generate-hashcash
1748 Variable that indicates whether @samp{X-Hashcash} headers
1749 should be computed for the message.  @xref{Hashcash, ,Hashcash,gnus,
1750 The Gnus Manual}.  If @code{opportunistic}, only generate the headers
1751 when it doesn't lead to the user having to wait.
1753 @end table
1756 @node Mail Variables
1757 @section Mail Variables
1759 @table @code
1760 @item message-send-mail-function
1761 @vindex message-send-mail-function
1762 @findex message-send-mail-function
1763 @findex message-send-mail-with-sendmail
1764 @findex message-send-mail-with-mh
1765 @findex message-send-mail-with-qmail
1766 @findex message-smtpmail-send-it
1767 @findex smtpmail-send-it
1768 @findex feedmail-send-it
1769 @findex message-send-mail-with-mailclient
1770 Function used to send the current buffer as mail.  The default is
1771 @code{message-send-mail-with-sendmail}, or @code{smtpmail-send-it}
1772 according to the system.  Other valid values include
1773 @code{message-send-mail-with-mailclient},
1774 @code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
1775 @code{message-smtpmail-send-it} and @code{feedmail-send-it}.
1777 The function
1778 @code{message-send-mail-with-sendmail} pipes your article to the
1779 @code{sendmail} binary for further queuing and sending.  When your local
1780 system is not configured for sending mail using @code{sendmail}, and you
1781 have access to a remote @acronym{SMTP} server, you can set
1782 @code{message-send-mail-function} to @code{smtpmail-send-it} and make
1783 sure to setup the @code{smtpmail} package correctly.  An example:
1785 @lisp
1786 (setq message-send-mail-function 'smtpmail-send-it
1787       smtpmail-default-smtp-server "YOUR SMTP HOST")
1788 @end lisp
1790 To the thing similar to this, there is
1791 @code{message-smtpmail-send-it}.  It is useful if your @acronym{ISP}
1792 requires the @acronym{POP}-before-@acronym{SMTP} authentication.
1793 @xref{POP before SMTP, , POP before SMTP, gnus, The Gnus Manual}.
1795 @cindex X-Message-SMTP-Method
1796 If you have a complex @acronym{SMTP} setup, and want some messages to
1797 go via one mail server, and other messages to go through another, you
1798 can use the @samp{X-Message-SMTP-Method} header.  These are the
1799 supported values:
1801 @table @samp
1802 @item smtpmail
1804 @example
1805 X-Message-SMTP-Method: smtp smtp.fsf.org 587
1806 @end example
1808 This will send the message via @samp{smtp.fsf.org}, using port 587.
1810 @example
1811 X-Message-SMTP-Method: smtp smtp.fsf.org 587 other-user
1812 @end example
1814 This is the same as the above, but uses @samp{other-user} as the user
1815 name when authenticating.  This is handy if you have several
1816 @acronym{SMTP} accounts on the same server.
1818 @item sendmail
1820 @example
1821 X-Message-SMTP-Method: sendmail
1822 @end example
1824 This will send the message via the locally installed sendmail/exim/etc
1825 installation.
1827 @end table
1829 @item message-mh-deletable-headers
1830 @vindex message-mh-deletable-headers
1831 Most versions of MH doesn't like being fed messages that contain the
1832 headers in this variable.  If this variable is non-@code{nil} (which is
1833 the default), these headers will be removed before mailing when sending
1834 messages via MH@.  Set it to @code{nil} if your MH can handle these
1835 headers.
1837 @item message-qmail-inject-program
1838 @vindex message-qmail-inject-program
1839 @cindex qmail
1840 Location of the qmail-inject program.
1842 @item message-qmail-inject-args
1843 @vindex message-qmail-inject-args
1844 Arguments passed to qmail-inject programs.
1845 This should be a list of strings, one string for each argument.  It
1846 may also be a function.
1848 E.g., if you wish to set the envelope sender address so that bounces
1849 go to the right place or to deal with listserv's usage of that address, you
1850 might set this variable to @code{'("-f" "you@@some.where")}.
1852 @item message-sendmail-f-is-evil
1853 @vindex message-sendmail-f-is-evil
1854 @cindex sendmail
1855 Non-@code{nil} means don't add @samp{-f username} to the sendmail
1856 command line.  Doing so would be even more evil than leaving it out.
1858 @item message-sendmail-envelope-from
1859 @vindex message-sendmail-envelope-from
1860 When @code{message-sendmail-f-is-evil} is @code{nil}, this specifies
1861 the address to use in the @acronym{SMTP} envelope.  If it is
1862 @code{nil}, use @code{user-mail-address}.  If it is the symbol
1863 @code{header}, use the @samp{From} header of the message.
1865 @item message-mailer-swallows-blank-line
1866 @vindex message-mailer-swallows-blank-line
1867 Set this to non-@code{nil} if the system's mailer runs the header and
1868 body together.  (This problem exists on SunOS 4 when sendmail is run
1869 in remote mode.)  The value should be an expression to test whether
1870 the problem will actually occur.
1872 @item message-send-mail-partially-limit
1873 @vindex message-send-mail-partially-limit
1874 @cindex split large message
1875 The limitation of messages sent as message/partial.  The lower bound
1876 of message size in characters, beyond which the message should be sent
1877 in several parts.  If it is @code{nil} (which is the default), the
1878 size is unlimited.
1880 @end table
1883 @node News Headers
1884 @section News Headers
1886 @vindex message-required-news-headers
1887 @code{message-required-news-headers} a list of header symbols.  These
1888 headers will either be automatically generated, or, if that's
1889 impossible, they will be prompted for.  The following symbols are valid:
1891 @table @code
1893 @item From
1894 @cindex From
1895 @findex user-full-name
1896 @findex user-mail-address
1897 This required header will be filled out with the result of the
1898 @code{message-make-from} function, which depends on the
1899 @code{message-from-style}, @code{user-full-name},
1900 @code{user-mail-address} variables.
1902 @item Subject
1903 @cindex Subject
1904 This required header will be prompted for if not present already.
1906 @item Newsgroups
1907 @cindex Newsgroups
1908 This required header says which newsgroups the article is to be posted
1909 to.  If it isn't present already, it will be prompted for.
1911 @item Organization
1912 @cindex organization
1913 @vindex message-user-organization
1914 @vindex message-user-organization-file
1915 This optional header will be filled out depending on the
1916 @code{message-user-organization} variable.
1917 @code{message-user-organization-file} will be used if this variable is
1918 @code{t}.  This variable can also be a string (in which case this string
1919 will be used), or it can be a function (which will be called with no
1920 parameters and should return a string to be used).
1922 @item Lines
1923 @cindex Lines
1924 This optional header will be computed by Message.
1926 @item Message-ID
1927 @cindex Message-ID
1928 @vindex message-user-fqdn
1929 @vindex mail-host-address
1930 @vindex user-mail-address
1931 @findex system-name
1932 @cindex Sun
1933 @cindex i-did-not-set--mail-host-address--so-tickle-me
1934 This required header will be generated by Message.  A unique ID will be
1935 created based on the date, time, user name (for the local part) and the
1936 domain part.  For the domain part, message will look (in this order) at
1937 @code{message-user-fqdn}, @code{system-name}, @code{mail-host-address}
1938 and @code{message-user-mail-address} (i.e., @code{user-mail-address})
1939 until a probably valid fully qualified domain name (FQDN) was found.
1941 @item User-Agent
1942 @cindex User-Agent
1943 This optional header will be filled out according to the
1944 @code{message-newsreader} local variable.
1946 @item In-Reply-To
1947 This optional header is filled out using the @code{Date} and @code{From}
1948 header of the article being replied to.
1950 @item Expires
1951 @cindex Expires
1952 @vindex message-expires
1953 This extremely optional header will be inserted according to the
1954 @code{message-expires} variable.  It is highly deprecated and shouldn't
1955 be used unless you know what you're doing.
1957 @item Distribution
1958 @cindex Distribution
1959 @vindex message-distribution-function
1960 This optional header is filled out according to the
1961 @code{message-distribution-function} variable.  It is a deprecated and
1962 much misunderstood header.
1964 @item Path
1965 @cindex path
1966 @vindex message-user-path
1967 This extremely optional header should probably never be used.
1968 However, some @emph{very} old servers require that this header is
1969 present.  @code{message-user-path} further controls how this
1970 @code{Path} header is to look.  If it is @code{nil}, use the server name
1971 as the leaf node.  If it is a string, use the string.  If it is neither
1972 a string nor @code{nil}, use the user name only.  However, it is highly
1973 unlikely that you should need to fiddle with this variable at all.
1974 @end table
1976 @cindex Mime-Version
1977 In addition, you can enter conses into this list.  The @sc{car} of this cons
1978 should be a symbol.  This symbol's name is the name of the header, and
1979 the @sc{cdr} can either be a string to be entered verbatim as the value of
1980 this header, or it can be a function to be called.  This function should
1981 take no arguments, and return a string to be inserted.  For
1982 instance, if you want to insert @code{Mime-Version: 1.0}, you should
1983 enter @code{(Mime-Version . "1.0")} into the list.
1985 If the list contains a cons where the @sc{car} of the cons is
1986 @code{optional}, the @sc{cdr} of this cons will only be inserted if it is
1987 non-@code{nil}.
1989 If you want to delete an entry from this list, the following Lisp
1990 snippet might be useful.  Adjust accordingly if you want to remove
1991 another element.
1993 @lisp
1994 (setq message-required-news-headers
1995       (delq 'Message-ID message-required-news-headers))
1996 @end lisp
1998 Other variables for customizing outgoing news articles:
2000 @table @code
2002 @item message-syntax-checks
2003 @vindex message-syntax-checks
2004 Controls what syntax checks should not be performed on outgoing posts.
2005 To disable checking of long signatures, for instance, add
2007 @lisp
2008 (signature . disabled)
2009 @end lisp
2011 to this list.
2013 Valid checks are:
2015 @table @code
2016 @item approved
2017 @cindex approved
2018 Check whether the article has an @code{Approved} header, which is
2019 something only moderators should include.
2020 @item continuation-headers
2021 Check whether there are continuation header lines that don't begin with
2022 whitespace.
2023 @item control-chars
2024 Check for invalid characters.
2025 @item empty
2026 Check whether the article is empty.
2027 @item existing-newsgroups
2028 Check whether the newsgroups mentioned in the @code{Newsgroups} and
2029 @code{Followup-To} headers exist.
2030 @item from
2031 Check whether the @code{From} header seems nice.
2032 @item illegible-text
2033 Check whether there is any non-printable character in the body.
2034 @item invisible-text
2035 Check whether there is any invisible text in the buffer.
2036 @item long-header-lines
2037 Check for too long header lines.
2038 @item long-lines
2039 @cindex long lines
2040 Check for too long lines in the body.
2041 @item message-id
2042 Check whether the @code{Message-ID} looks syntactically ok.
2043 @item multiple-headers
2044 Check for the existence of multiple equal headers.
2045 @item new-text
2046 Check whether there is any new text in the messages.
2047 @item newsgroups
2048 Check whether the @code{Newsgroups} header exists and is not empty.
2049 @item quoting-style
2050 Check whether text follows last quoted portion.
2051 @item repeated-newsgroups
2052 Check whether the @code{Newsgroups} and @code{Followup-to} headers
2053 contains repeated group names.
2054 @item reply-to
2055 Check whether the @code{Reply-To} header looks ok.
2056 @item sender
2057 @cindex Sender
2058 Insert a new @code{Sender} header if the @code{From} header looks odd.
2059 @item sendsys
2060 @cindex sendsys
2061 Check for the existence of version and sendsys commands.
2062 @item shoot
2063 Check whether the domain part of the @code{Message-ID} header looks ok.
2064 @item shorten-followup-to
2065 Check whether to add a @code{Followup-to} header to shorten the number
2066 of groups to post to.
2067 @item signature
2068 Check the length of the signature.
2069 @item size
2070 Check for excessive size.
2071 @item subject
2072 Check whether the @code{Subject} header exists and is not empty.
2073 @item subject-cmsg
2074 Check the subject for commands.
2075 @item valid-newsgroups
2076 Check whether the @code{Newsgroups} and @code{Followup-to} headers
2077 are valid syntactically.
2078 @end table
2080 All these conditions are checked by default, except for @code{sender}
2081 for which the check is disabled by default if
2082 @code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
2084 @item message-ignored-news-headers
2085 @vindex message-ignored-news-headers
2086 Regexp of headers to be removed before posting.  The default is@*
2087 @samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|@*
2088 ^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:}.
2090 @item message-default-news-headers
2091 @vindex message-default-news-headers
2092 This string is inserted at the end of the headers in all message
2093 buffers that are initialized as news.
2095 @end table
2098 @node News Variables
2099 @section News Variables
2101 @table @code
2102 @item message-send-news-function
2103 @vindex message-send-news-function
2104 Function used to send the current buffer as news.  The default is
2105 @code{message-send-news}.
2107 @item message-post-method
2108 @vindex message-post-method
2109 Gnusish @dfn{select method} (see the Gnus manual for details) used for
2110 posting a prepared news message.
2112 @end table
2115 @node Insertion Variables
2116 @section Insertion Variables
2118 @table @code
2119 @item message-cite-style
2120 @vindex message-cite-style
2121 The overall style to be used when replying to messages. This controls
2122 things like where the reply should be put relative to the original,
2123 how the citation is formatted, where the signature goes, etc.
2125 Value is either @code{nil} (no variable overrides) or a let-style list
2126 of pairs @code{(VARIABLE VALUE)} to override default values.
2128 See @code{gnus-posting-styles} to set this variable for specific
2129 groups. Presets to impersonate popular mail agents are available in the
2130 @code{message-cite-style-*} variables.
2132 @item message-cite-reply-position
2133 @vindex message-cite-reply-position
2134 Where the reply should be positioned. Available styles are
2135 @code{traditional} to reply inline, @code{above} for top-posting, and
2136 @code{below} for bottom-posting
2138 @item message-ignored-cited-headers
2139 @vindex message-ignored-cited-headers
2140 All headers that match this regexp will be removed from yanked
2141 messages.  The default is @samp{.}, which means that all headers will be
2142 removed.
2144 @item message-cite-prefix-regexp
2145 @vindex message-cite-prefix-regexp
2146 Regexp matching the longest possible citation prefix on a line.
2148 @item message-citation-line-function
2149 @vindex message-citation-line-function
2150 @cindex attribution line
2151 Function called to insert the citation line.  The default is
2152 @code{message-insert-citation-line}, which will lead to citation lines
2153 that look like:
2155 @example
2156 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
2157 @end example
2159 @c FIXME: Add 'message-insert-formatted-citation-line' and
2160 @c 'message-citation-line-format'.
2162 Point will be at the beginning of the body of the message when this
2163 function is called.
2165 Note that Gnus provides a feature where clicking on @samp{writes:} hides the
2166 cited text.  If you change the citation line too much, readers of your
2167 messages will have to adjust their Gnus, too.  See the variable
2168 @code{gnus-cite-attribution-suffix}.  @xref{Article Highlighting, ,
2169 Article Highlighting, gnus, The Gnus Manual}, for details.
2171 @item message-yank-prefix
2172 @vindex message-yank-prefix
2173 @cindex yanking
2174 @cindex quoting
2175 When you are replying to or following up an article, you normally want
2176 to quote the person you are answering.  Inserting quoted text is done by
2177 @dfn{yanking}, and each line you yank will have
2178 @code{message-yank-prefix} prepended to it (except for quoted lines
2179 which use @code{message-yank-cited-prefix} and empty lines which use
2180 @code{message-yank-empty-prefix}).  The default is @samp{> }.
2182 @item message-yank-cited-prefix
2183 @vindex message-yank-cited-prefix
2184 @cindex yanking
2185 @cindex cited
2186 @cindex quoting
2187 When yanking text from an article which contains already cited text,
2188 each line will be prefixed with the contents of this variable.  The
2189 default is @samp{>}.  See also @code{message-yank-prefix}.
2191 @item message-yank-empty-prefix
2192 @vindex message-yank-empty-prefix
2193 @cindex yanking
2194 @cindex quoting
2195 When yanking text from an article, each empty line will be prefixed with
2196 the contents of this variable.  The default is @samp{>}.  You can set
2197 this variable to an empty string to split the cited text into paragraphs
2198 automatically.  See also @code{message-yank-prefix}.
2200 @item message-indentation-spaces
2201 @vindex message-indentation-spaces
2202 Number of spaces to indent yanked messages.
2204 @item message-cite-function
2205 @vindex message-cite-function
2206 @findex message-cite-original
2207 @findex message-cite-original-without-signature
2208 Function for citing an original message.  The default is
2209 @code{message-cite-original}, which simply inserts the original message
2210 and prepends @samp{> } to each line.
2211 @code{message-cite-original-without-signature} does the same, but elides
2212 the signature.
2214 @item message-indent-citation-function
2215 @vindex message-indent-citation-function
2216 Function for modifying a citation just inserted in the mail buffer.
2217 This can also be a list of functions.  Each function can find the
2218 citation between @code{(point)} and @code{(mark t)}.  And each function
2219 should leave point and mark around the citation text as modified.
2221 @item message-mark-insert-begin
2222 @vindex message-mark-insert-begin
2223 String to mark the beginning of some inserted text.
2225 @item message-mark-insert-end
2226 @vindex message-mark-insert-end
2227 String to mark the end of some inserted text.
2229 @item message-signature
2230 @vindex message-signature
2231 String to be inserted at the end of the message buffer.  If @code{t}
2232 (which is the default), the @code{message-signature-file} file will be
2233 inserted instead.  If a function, the result from the function will be
2234 used instead.  If a form, the result from the form will be used instead.
2235 If this variable is @code{nil}, no signature will be inserted at all.
2237 @item message-signature-file
2238 @vindex message-signature-file
2239 File containing the signature to be inserted at the end of the buffer.
2240 If a path is specified, the value of
2241 @code{message-signature-directory} is ignored, even if set.
2242 The default is @file{~/.signature}.
2244 @item message-signature-directory
2245 @vindex message-signature-directory
2246 Name of directory containing signature files.  Comes in handy if you
2247 have many such files, handled via Gnus posting styles for instance.
2248 If @code{nil} (the default), @code{message-signature-file} is expected
2249 to specify the directory if needed.
2252 @item message-signature-insert-empty-line
2253 @vindex message-signature-insert-empty-line
2254 If @code{t} (the default value) an empty line is inserted before the
2255 signature separator.
2257 @end table
2259 Note that RFC1036bis says that a signature should be preceded by the three
2260 characters @samp{-- } on a line by themselves.  This is to make it
2261 easier for the recipient to automatically recognize and process the
2262 signature.  So don't remove those characters, even though you might feel
2263 that they ruin your beautiful design, like, totally.
2265 Also note that no signature should be more than four lines long.
2266 Including @acronym{ASCII} graphics is an efficient way to get
2267 everybody to believe that you are silly and have nothing important to
2268 say.
2271 @node Various Message Variables
2272 @section Various Message Variables
2274 @table @code
2275 @item message-default-charset
2276 @vindex message-default-charset
2277 @cindex charset
2278 Symbol naming a @acronym{MIME} charset.  Non-@acronym{ASCII} characters
2279 in messages are assumed to be encoded using this charset.  The default
2280 is @code{iso-8859-1} on non-@sc{mule} Emacsen; otherwise @code{nil},
2281 which means ask the user.  (This variable is used only on non-@sc{mule}
2282 Emacsen.)  @xref{Charset Translation, , Charset Translation, emacs-mime,
2283 Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
2284 translation process.
2286 @item message-fill-column
2287 @vindex message-fill-column
2288 @cindex auto-fill
2289 Local value for the column beyond which automatic line-wrapping should
2290 happen for message buffers.  If non-@code{nil} (the default), also turn on
2291 auto-fill in message buffers.
2293 @item message-signature-separator
2294 @vindex message-signature-separator
2295 Regexp matching the signature separator.  It is @samp{^-- *$} by
2296 default.
2298 @item mail-header-separator
2299 @vindex mail-header-separator
2300 String used to separate the headers from the body.  It is @samp{--text
2301 follows this line--} by default.
2303 @item message-directory
2304 @vindex message-directory
2305 Directory used by many mailish things.  The default is @file{~/Mail/}.
2306 All other mail file variables are derived from @code{message-directory}.
2308 @item message-auto-save-directory
2309 @vindex message-auto-save-directory
2310 Directory where Message auto-saves buffers if Gnus isn't running.  If
2311 @code{nil}, Message won't auto-save.  The default is @file{~/Mail/drafts/}.
2313 @item message-signature-setup-hook
2314 @vindex message-signature-setup-hook
2315 Hook run when initializing the message buffer.  It is run after the
2316 headers have been inserted but before the signature has been inserted.
2318 @item message-setup-hook
2319 @vindex message-setup-hook
2320 Hook run as the last thing when the message buffer has been initialized,
2321 but before yanked text is inserted.
2323 @item message-header-setup-hook
2324 @vindex message-header-setup-hook
2325 Hook called narrowed to the headers after initializing the headers.
2327 For instance, if you're running Gnus and wish to insert a
2328 @samp{Mail-Copies-To} header in all your news articles and all messages
2329 you send to mailing lists, you could do something like the following:
2331 @lisp
2332 (defun my-message-header-setup-hook ()
2333   (let ((group (or gnus-newsgroup-name "")))
2334     (when (or (message-fetch-field "newsgroups")
2335               (gnus-group-find-parameter group 'to-address)
2336               (gnus-group-find-parameter group 'to-list))
2337       (insert "Mail-Copies-To: never\n"))))
2339 (add-hook 'message-header-setup-hook
2340           'my-message-header-setup-hook)
2341 @end lisp
2343 @item message-send-hook
2344 @vindex message-send-hook
2345 Hook run before sending messages.
2347 If you want to add certain headers before sending, you can use the
2348 @code{message-add-header} function in this hook.  For instance:
2349 @findex message-add-header
2351 @lisp
2352 (add-hook 'message-send-hook 'my-message-add-content)
2353 (defun my-message-add-content ()
2354   (message-add-header "X-In-No-Sense: Nonsense")
2355   (message-add-header "X-Whatever: no"))
2356 @end lisp
2358 This function won't add the header if the header is already present.
2360 @item message-send-mail-hook
2361 @vindex message-send-mail-hook
2362 Hook run before sending mail messages.  This hook is run very late:
2363 just before the message is actually sent as mail.
2365 @item message-send-news-hook
2366 @vindex message-send-news-hook
2367 Hook run before sending news messages.  This hook is run very late:
2368 just before the message is actually sent as news.
2370 @item message-sent-hook
2371 @vindex message-sent-hook
2372 Hook run after sending messages.
2374 @item message-cancel-hook
2375 @vindex message-cancel-hook
2376 Hook run when canceling news articles.
2378 @item message-mode-syntax-table
2379 @vindex message-mode-syntax-table
2380 Syntax table used in message mode buffers.
2382 @item message-cite-articles-with-x-no-archive
2383 @vindex message-cite-articles-with-x-no-archive
2384 If non-@code{nil}, don't strip quoted text from articles that have
2385 @samp{X-No-Archive} set.  Even if this variable isn't set, you can
2386 undo the stripping by hitting the @code{undo} keystroke.
2388 @item message-strip-special-text-properties
2389 @vindex message-strip-special-text-properties
2390 Emacs has a number of special text properties which can break message
2391 composing in various ways.  If this option is set, message will strip
2392 these properties from the message composition buffer.  However, some
2393 packages requires these properties to be present in order to work.  If
2394 you use one of these packages, turn this option off, and hope the
2395 message composition doesn't break too bad.
2397 @item message-send-method-alist
2398 @vindex message-send-method-alist
2399 @findex message-mail-p
2400 @findex message-news-p
2401 @findex message-send-via-mail
2402 @findex message-send-via-news
2403 Alist of ways to send outgoing messages.  Each element has the form:
2405 @lisp
2406 (@var{type} @var{predicate} @var{function})
2407 @end lisp
2409 @table @var
2410 @item type
2411 A symbol that names the method.
2413 @item predicate
2414 A function called without any parameters to determine whether the
2415 message is a message of type @var{type}.  The function will be called in
2416 the buffer where the message is.
2418 @item function
2419 A function to be called if @var{predicate} returns non-@code{nil}.
2420 @var{function} is called with one parameter---the prefix.
2421 @end table
2423 The default is:
2425 @lisp
2426 ((news message-news-p message-send-via-news)
2427  (mail message-mail-p message-send-via-mail))
2428 @end lisp
2430 The @code{message-news-p} function returns non-@code{nil} if the message
2431 looks like news, and the @code{message-send-via-news} function sends the
2432 message according to the @code{message-send-news-function} variable
2433 (@pxref{News Variables}).  The @code{message-mail-p} function returns
2434 non-@code{nil} if the message looks like mail, and the
2435 @code{message-send-via-mail} function sends the message according to the
2436 @code{message-send-mail-function} variable (@pxref{Mail Variables}).
2438 All the elements in this alist will be tried in order, so a message
2439 containing both a valid @samp{Newsgroups} header and a valid @samp{To}
2440 header, for example, will be sent as news, and then as mail.
2441 @end table
2445 @node Sending Variables
2446 @section Sending Variables
2448 @table @code
2450 @item message-fcc-handler-function
2451 @vindex message-fcc-handler-function
2452 A function called to save outgoing articles.  This function will be
2453 called with the name of the file to store the article in.  The default
2454 function is @code{message-output} which saves in Unix mailbox format.
2456 @item message-courtesy-message
2457 @vindex message-courtesy-message
2458 When sending combined messages, this string is inserted at the start of
2459 the mailed copy.  If the string contains the format spec @samp{%s}, the
2460 newsgroups the article has been posted to will be inserted there.  If
2461 this variable is @code{nil}, no such courtesy message will be added.
2462 The default value is @samp{"The following message is a courtesy copy of
2463 an article\\nthat has been posted to %s as well.\\n\\n"}.
2465 @item message-fcc-externalize-attachments
2466 @vindex message-fcc-externalize-attachments
2467 If @code{nil}, attach files as normal parts in Fcc copies; if it is
2468 non-@code{nil}, attach local files as external parts.
2470 @item message-interactive
2471 @vindex message-interactive
2472 If non-@code{nil} wait for and display errors when sending a message;
2473 if @code{nil} let the mailer mail back a message to report errors.
2475 @item message-confirm-send
2476 @vindex message-confirm-send
2477 When non-@code{nil}, Gnus will ask for confirmation when sending a
2478 message.
2480 @end table
2483 @node Message Buffers
2484 @section Message Buffers
2486 Message will generate new buffers with unique buffer names when you
2487 request a message buffer.  When you send the message, the buffer isn't
2488 normally killed off.  Its name is changed and a certain number of old
2489 message buffers are kept alive.
2491 @table @code
2492 @item message-generate-new-buffers
2493 @vindex message-generate-new-buffers
2494 Controls whether to create a new message buffer to compose a message.
2495 Valid values include:
2497 @table @code
2498 @item nil
2499 Generate the buffer name in the Message way (e.g., *mail*, *news*, *mail
2500 to whom*, *news on group*, etc.)@: and continue editing in the existing
2501 buffer of that name.  If there is no such buffer, it will be newly
2502 created.
2504 @item unique
2505 @item t
2506 Create the new buffer with the name generated in the Message way.
2508 @item unsent
2509 Similar to @code{unique} but the buffer name begins with "*unsent ".
2511 @item standard
2512 Similar to @code{nil} but the buffer name is simpler like *mail
2513 message*.
2514 @end table
2515 @table @var
2516 @item function
2517 If this is a function, call that function with three parameters: The
2518 type, the To address and the group name (any of these may be
2519 @code{nil}).  The function should return the new buffer name.
2520 @end table
2522 The default value is @code{unsent}.
2524 @item message-max-buffers
2525 @vindex message-max-buffers
2526 This variable says how many old message buffers to keep.  If there are
2527 more message buffers than this, the oldest buffer will be killed.  The
2528 default is 10.  If this variable is @code{nil}, no old message buffers
2529 will ever be killed.
2531 @item message-send-rename-function
2532 @vindex message-send-rename-function
2533 After sending a message, the buffer is renamed from, for instance,
2534 @samp{*reply to Lars*} to @samp{*sent reply to Lars*}.  If you don't
2535 like this, set this variable to a function that renames the buffer in a
2536 manner you like.  If you don't want to rename the buffer at all, you can
2537 say:
2539 @lisp
2540 (setq message-send-rename-function 'ignore)
2541 @end lisp
2543 @item message-kill-buffer-on-exit
2544 @findex message-kill-buffer-on-exit
2545 If non-@code{nil}, kill the buffer immediately on exit.
2547 @end table
2550 @node Message Actions
2551 @section Message Actions
2553 When Message is being used from a news/mail reader, the reader is likely
2554 to want to perform some task after the message has been sent.  Perhaps
2555 return to the previous window configuration or mark an article as
2556 replied.
2558 @vindex message-kill-actions
2559 @vindex message-postpone-actions
2560 @vindex message-exit-actions
2561 @vindex message-send-actions
2562 The user may exit from the message buffer in various ways.  The most
2563 common is @kbd{C-c C-c}, which sends the message and exits.  Other
2564 possibilities are @kbd{C-c C-s} which just sends the message, @kbd{C-c
2565 C-d} which postpones the message editing and buries the message buffer,
2566 and @kbd{C-c C-k} which kills the message buffer.  Each of these actions
2567 have lists associated with them that contains actions to be executed:
2568 @code{message-send-actions}, @code{message-exit-actions},
2569 @code{message-postpone-actions}, and @code{message-kill-actions}.
2571 Message provides a function to interface with these lists:
2572 @code{message-add-action}.  The first parameter is the action to be
2573 added, and the rest of the arguments are which lists to add this action
2574 to.  Here's an example from Gnus:
2576 @lisp
2577   (message-add-action
2578    `(set-window-configuration ,(current-window-configuration))
2579    'exit 'postpone 'kill)
2580 @end lisp
2582 This restores the Gnus window configuration when the message buffer is
2583 killed, postponed or exited.
2585 An @dfn{action} can be either: a normal function, or a list where the
2586 @sc{car} is a function and the @sc{cdr} is the list of arguments, or
2587 a form to be @code{eval}ed.
2590 @node Compatibility
2591 @chapter Compatibility
2592 @cindex compatibility
2594 Message uses virtually only its own variables---older @code{mail-}
2595 variables aren't consulted.  To force Message to take those variables
2596 into account, you can put the following in your @file{.emacs} file:
2598 @lisp
2599 (require 'messcompat)
2600 @end lisp
2602 This will initialize many Message variables from the values in the
2603 corresponding mail variables.
2606 @node Appendices
2607 @chapter Appendices
2609 @menu
2610 * Responses::          Standard rules for determining where responses go.
2611 @end menu
2614 @node Responses
2615 @section Responses
2617 To determine where a message is to go, the following algorithm is used
2618 by default.
2620 @table @dfn
2621 @item reply
2622 A @dfn{reply} is when you want to respond @emph{just} to the person who
2623 sent the message via mail.  There will only be one recipient.  To
2624 determine who the recipient will be, the following headers are
2625 consulted, in turn:
2627 @table @code
2628 @item Reply-To
2630 @item From
2631 @end table
2634 @item wide reply
2635 A @dfn{wide reply} is a mail response that includes @emph{all} entities
2636 mentioned in the message you are responding to.  All mailboxes from the
2637 following headers will be concatenated to form the outgoing
2638 @code{To}/@code{Cc} headers:
2640 @table @code
2641 @item From
2642 (unless there's a @code{Reply-To}, in which case that is used instead).
2644 @item Cc
2646 @item To
2647 @end table
2649 If a @code{Mail-Copies-To} header is present, it will also be included
2650 in the list of mailboxes.  If this header is @samp{never}, that means
2651 that the @code{From} (or @code{Reply-To}) mailbox will be suppressed.
2654 @item followup
2655 A @dfn{followup} is a response sent via news.  The following headers
2656 (listed in order of precedence) determine where the response is to be
2657 sent:
2659 @table @code
2661 @item Followup-To
2663 @item Newsgroups
2665 @end table
2667 If a @code{Mail-Copies-To} header is present, it will be used as the
2668 basis of the new @code{Cc} header, except if this header is
2669 @samp{never}.
2671 @end table
2674 @node GNU Free Documentation License
2675 @chapter GNU Free Documentation License
2676 @include doclicense.texi
2678 @node Index
2679 @chapter Index
2680 @printindex cp
2682 @node Key Index
2683 @chapter Key Index
2684 @printindex ky
2686 @bye
2688 @c End: