]> code.delx.au - gnu-emacs/blob - doc/misc/message.texi
; Merge from origin/emacs-25
[gnu-emacs] / doc / misc / message.texi
1 \input texinfo @c -*-texinfo-*-
2
3 @include gnus-overrides.texi
4
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.
13
14 Copyright @copyright{} 1996--2016 Free Software Foundation, Inc.
15
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''.
23
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
28
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
37
38 @titlepage
39 @ifset WEBHACKDEVEL
40 @title Message Manual (DEVELOPMENT VERSION)
41 @end ifset
42 @ifclear WEBHACKDEVEL
43 @title Message Manual
44 @end ifclear
45
46 @author by Lars Magne Ingebrigtsen
47 @page
48
49 @vskip 0pt plus 1filll
50 @insertcopying
51 @end titlepage
52
53 @summarycontents
54 @contents
55
56 @node Top
57 @top Message
58
59 @ifnottex
60 @insertcopying
61 @end ifnottex
62
63 All message composition from Gnus (both mail and news) takes place in
64 Message mode buffers.
65
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
76
77 @c Adjust ../Makefile.in if you change the following lines:
78 Message is distributed with Gnus. The Gnus distribution
79 @c
80 corresponding to this manual is Gnus v5.13
81
82
83 @node Interface
84 @chapter Interface
85
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.
92
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
106
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.
110
111 @node New Mail Message
112 @section New Mail Message
113
114 @findex message-mail
115 The @code{message-mail} command pops up a new message buffer.
116
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.
120
121
122 @node New News Message
123 @section New News Message
124
125 @findex message-news
126 The @code{message-news} command pops up a new message buffer.
127
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.
131
132
133 @node Reply
134 @section Reply
135
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.
139
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.
144
145 If you want the replies to go to the @code{Sender} instead of the
146 @code{From}, you could do something like this:
147
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
156
157 This function will be called narrowed to the head of the article that is
158 being replied to.
159
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.
164
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.
169
170
171 @node Wide Reply
172 @section Wide Reply
173
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.
179
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}).
185
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.
191
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.
199
200 It's complicated to explain, but it's easy to use.
201
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.
205
206 To avoid this, do something like the following:
207
208 @lisp
209 (setq message-prune-recipient-rules
210 '(("^\\([^@@]+\\)@@\\(.*\\)" "\\1@@.*[.]\\2")))
211 @end lisp
212
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:
217
218 @lisp
219 (setq message-prune-recipient-rules
220 '(("cvs@@example.org" ".")))
221 @end lisp
222
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}.
227
228 @node Followup
229 @section Followup
230
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.
234
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}).
240
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.
247
248
249 @node Canceling News
250 @section Canceling News
251
252 @findex message-cancel-news
253 The @code{message-cancel-news} command cancels the article in the
254 current buffer.
255
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.}.
260
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:
272
273 @lisp
274 (setq canlock-password "geheimnis"
275 canlock-password-for-verify canlock-password)
276 @end lisp
277
278 Whether to insert the header or not is controlled by the
279 @code{message-insert-canlock} variable.
280
281 Not many news servers respect the @code{Cancel-Lock} header yet, but
282 this is expected to change in the future.
283
284
285 @node Superseding
286 @section Superseding
287
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.
291
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:}.
300
301
302
303 @node Forwarding
304 @section Forwarding
305
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.
310
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.
316
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.
321
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.
327
328 The provided functions are:
329
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.
335
336 @item message-forward-subject-fwd
337 Subject of article with @samp{Fwd:} prepended to it.
338 @end table
339
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}.
346
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.
353
354 @item message-forward-before-signature
355 @vindex message-forward-before-signature
356 If non-@code{nil}, put forwarded message before signature, else after.
357
358 @end table
359
360
361 @node Resending
362 @section Resending
363
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.
367
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.
371
372
373 @node Bouncing
374 @section Bouncing
375
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.
382
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\\):}.
387
388
389 @node Mailing Lists
390 @section Mailing Lists
391
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:
397
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.
403
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.
408
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.
414
415 @end itemize
416
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.
420
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
425
426 @c @node Composing with a MFT header
427 @subsection Composing a correct MFT header automagically
428
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.
433
434 @table @code
435
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
444
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
454
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}.
460
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.
467
468 @lisp
469 (setq message-subscribed-address-functions
470 '(gnus-find-subscribed-addresses))
471 @end lisp
472
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.
478
479 @end table
480
481 You can use one or more of the above variables. All their values are
482 ``added'' in some way that works :-)
483
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:
495
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.
509
510 @c @node Honoring an MFT post
511 @subsection Honoring an MFT post
512
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:
517
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.
522
523 @item nil
524 Always dishonor MFTs (just ignore the darned thing)
525
526 @item ask
527 Gnus will prompt you for an action.
528
529 @end table
530
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.
534
535 @node Commands
536 @chapter Commands
537
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
551
552
553 @node Buffer Entry
554 @section Buffer Entry
555 @cindex undo
556 @kindex C-_
557
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.
566
567
568 @node Header Commands
569 @section Header Commands
570
571 @subsection Commands for moving to headers
572
573 These following commands move to the header in question. If it doesn't
574 exist, it will be inserted.
575
576 @table @kbd
577
578 @item C-c ?
579 @kindex C-c ?
580 @findex describe-mode
581 Describe the message mode.
582
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}).
587
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.)
593
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}).
598
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}).
603
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}).
608
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}).
613
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}).
618
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}).
623
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}).
628
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}).
633
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}).
638
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}).
643
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}.
652
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}.
664
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.
668
669 @end table
670
671 @subsection Commands to change headers
672
673 @table @kbd
674
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}).
681
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}).
688
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}).
695
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.
701
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.
709
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.
716
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.
723
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}).
732
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.
748
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).
754
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.
760
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}.
773
774 @end table
775
776
777 @node Movement
778 @section Movement
779
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}).
786
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}).
791
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}.
800
801 @end table
802
803
804 @node Insertion
805 @section Insertion
806
807 @table @kbd
808
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}).
814
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}).
820
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.
829
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}).
835
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}).
840
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-}).
848
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-}).
856
857 @end table
858
859
860 @node MIME
861 @section MIME
862 @cindex MML
863 @cindex MIME
864 @cindex multipart
865 @cindex attachment
866
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.
871
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.
878
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.
890
891 You can also create arbitrarily complex multiparts using the @acronym{MML}
892 language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
893 Manual}).
894
895 @node IDNA
896 @section IDNA
897 @cindex IDNA
898 @cindex internationalized domain names
899 @cindex non-ascii domain names
900
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.
904
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.
909
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.
915
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.
922
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.
928
929 Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
930 Libidn} installed in order to use this functionality.
931
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
941
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.
952
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.)
967
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
984
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).
989
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).
999
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.
1005
1006 Message uses the @acronym{MML} language for the creation of signed
1007 and/or encrypted messages as explained in the following.
1008
1009
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
1019
1020 @node Signing and encryption
1021 @subsection Signing and encrypting commands
1022
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
1027
1028 @item C-c C-m s s
1029 @kindex C-c C-m s s
1030 @findex mml-secure-message-sign-smime
1031
1032 Digitally sign current message using @acronym{S/MIME}.
1033
1034 @item C-c C-m s o
1035 @kindex C-c C-m s o
1036 @findex mml-secure-message-sign-pgp
1037
1038 Digitally sign current message using @acronym{PGP}.
1039
1040 @item C-c C-m s p
1041 @kindex C-c C-m s p
1042 @findex mml-secure-message-sign-pgpmime
1043
1044 Digitally sign current message using @acronym{PGP/MIME}.
1045
1046 @item C-c C-m c s
1047 @kindex C-c C-m c s
1048 @findex mml-secure-message-encrypt-smime
1049
1050 Digitally encrypt current message using @acronym{S/MIME}.
1051
1052 @item C-c C-m c o
1053 @kindex C-c C-m c o
1054 @findex mml-secure-message-encrypt-pgp
1055
1056 Digitally encrypt current message using @acronym{PGP}.
1057
1058 @item C-c C-m c p
1059 @kindex C-c C-m c p
1060 @findex mml-secure-message-encrypt-pgpmime
1061
1062 Digitally encrypt current message using @acronym{PGP/MIME}.
1063
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.
1068
1069 @end table
1070
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.
1083
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.
1092
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.
1096
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}.
1102
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.
1107
1108 @node Using S/MIME
1109 @subsection Using S/MIME
1110
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.
1121
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):
1128
1129 @lisp
1130 (require 'epg)
1131 @end lisp
1132
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"}.
1136
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.
1139
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.
1144
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.
1148
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.)
1158
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.)
1174
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.
1181
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.
1189
1190 @example
1191 $ openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
1192 @end example
1193
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.
1196
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.
1204
1205 @node Using OpenPGP
1206 @subsection Using OpenPGP
1207
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}.
1215
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.
1222
1223 @node Passphrase caching
1224 @subsection Passphrase caching
1225
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.
1233
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}.
1238
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.
1243
1244 @example
1245 eval `gpg-agent --daemon`
1246 @end example
1247
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}.
1253
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.
1261
1262 @example
1263 gpg --use-agent --sign < /dev/null > /dev/null
1264 @end example
1265
1266 @node PGP Compatibility
1267 @subsection Compatibility with older implementations
1268
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.
1273
1274 Creating your own key is described in detail in the documentation of
1275 your PGP implementation, so we refer to it.
1276
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:
1288
1289 @lisp
1290 (setq mml-signencrypt-style-alist '(("smime" separate)
1291 ("pgp" separate)
1292 ("pgpauto" separate)
1293 ("pgpmime" separate)))
1294 @end lisp
1295
1296 This causes to sign and encrypt in two passes, thus generating a
1297 message that can be understood by PGP version 2.
1298
1299 (Refer to @uref{http://www.gnupg.org/gph/en/pgp2x.html} for more
1300 information about the problem.)
1301
1302 @node Encrypt-to-self
1303 @subsection Encrypt-to-self
1304
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
1323
1324 @node Bcc Warning
1325 @subsection Bcc Warning
1326
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}.
1332
1333
1334 @node Various Commands
1335 @section Various Commands
1336
1337 @table @kbd
1338
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.
1346
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{[...]}).
1355
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.
1359
1360 @item C-c M-k
1361 @kindex C-c M-k
1362 @findex message-kill-address
1363 Kill the address under point.
1364
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}).
1370
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}).
1376
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.
1381
1382 Here's an example:
1383
1384 @example
1385 > This is some quoted text. And here's more quoted text.
1386 @end example
1387
1388 If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
1389
1390 @example
1391 > This is some quoted text.
1392
1393 *
1394
1395 > And here's more quoted text.
1396 @end example
1397
1398 @samp{*} says where point will be placed.
1399
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.
1405
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}.
1413
1414 @end table
1415
1416
1417 @node Sending
1418 @section Sending
1419
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}).
1426
1427 @item C-c C-s
1428 @kindex C-c C-s
1429 @findex message-send
1430 Send the message (@code{message-send}).
1431
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}).
1436
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}).
1441
1442 @end table
1443
1444
1445
1446 @node Mail Aliases
1447 @section Mail Aliases
1448 @cindex mail aliases
1449 @cindex aliases
1450 @cindex completion
1451 @cindex ecomplete
1452
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.
1458
1459 @code{mailabbrev} works by parsing the @file{/etc/mailrc} and
1460 @file{~/.mailrc} files. These files look like:
1461
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
1466
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.
1470
1471 No expansion will be performed upon sending of the message---all
1472 expansions have to be done explicitly.
1473
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.
1482
1483 @node Spelling
1484 @section Spelling
1485 @cindex spelling
1486 @findex ispell-message
1487
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:
1494
1495 @lisp
1496 (add-hook 'message-send-hook 'ispell-message)
1497 @end lisp
1498
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:
1502
1503 @lisp
1504 (setq ispell-message-dictionary-alist
1505 '(("^Newsgroups:.*\\bde\\." . "deutsch8")
1506 (".*" . "default")))
1507 @end lisp
1508
1509 @code{ispell} depends on having the external @samp{ispell} command
1510 installed.
1511
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.
1515
1516 To use @code{flyspell}, put something like the following in your
1517 @file{.emacs} file:
1518
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
1524
1525 @code{flyspell} depends on having the external @samp{ispell} command
1526 installed.
1527
1528
1529 @node Variables
1530 @chapter Variables
1531
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
1544
1545
1546 @node Message Headers
1547 @section Message Headers
1548
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.
1554
1555 @table @code
1556
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:
1561
1562 @lisp
1563 (setq message-generate-headers-first
1564 '(References))
1565 @end lisp
1566
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.
1572
1573 Note that some headers will be removed and re-generated before posting,
1574 because of the variable @code{message-deletable-headers} (see below).
1575
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.
1581
1582 @item message-from-style
1583 @vindex message-from-style
1584 Specifies how @code{From} headers should look. There are four valid
1585 values:
1586
1587 @table @code
1588 @item nil
1589 Just the address---@samp{king@@grassland.com}.
1590
1591 @item parens
1592 @samp{king@@grassland.com (Elvis Parsley)}.
1593
1594 @item angles
1595 @samp{Elvis Parsley <king@@grassland.com>}.
1596
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.
1601
1602 @end table
1603
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.
1615
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.
1622
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.
1637
1638 Here's an example of a value to deal with these headers when
1639 responding to a message:
1640
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
1661
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.
1673
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.
1680
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:
1685
1686 @lisp
1687 (setq message-alternative-emails
1688 (regexp-opt '("john@@home.net" "john.doe@@work.com")))
1689 @end lisp
1690
1691 This variable has precedence over posting styles and anything that runs
1692 off @code{message-setup-hook}.
1693
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.
1700
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.
1706
1707 @lisp
1708 (setq message-hidden-headers
1709 '(not "From" "Subject" "To" "Cc" "Newsgroups"))
1710 @end lisp
1711
1712 Headers are hidden using narrowing, you can use @kbd{M-x widen} to
1713 expose them in the buffer.
1714
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.
1721
1722 @end table
1723
1724
1725 @node Mail Headers
1726 @section Mail Headers
1727
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.
1734
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:}.
1740
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.
1745
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.
1752
1753 @end table
1754
1755
1756 @node Mail Variables
1757 @section Mail Variables
1758
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}.
1776
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:
1784
1785 @lisp
1786 (setq message-send-mail-function 'smtpmail-send-it
1787 smtpmail-default-smtp-server "YOUR SMTP HOST")
1788 @end lisp
1789
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}.
1794
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:
1800
1801 @table @samp
1802 @item smtpmail
1803
1804 @example
1805 X-Message-SMTP-Method: smtp smtp.fsf.org 587
1806 @end example
1807
1808 This will send the message via @samp{smtp.fsf.org}, using port 587.
1809
1810 @example
1811 X-Message-SMTP-Method: smtp smtp.fsf.org 587 other-user
1812 @end example
1813
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.
1817
1818 @item sendmail
1819
1820 @example
1821 X-Message-SMTP-Method: sendmail
1822 @end example
1823
1824 This will send the message via the locally installed sendmail/exim/etc
1825 installation.
1826
1827 @end table
1828
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.
1836
1837 @item message-qmail-inject-program
1838 @vindex message-qmail-inject-program
1839 @cindex qmail
1840 Location of the qmail-inject program.
1841
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.
1847
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")}.
1851
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.
1857
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.
1864
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.
1871
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.
1879
1880 @end table
1881
1882
1883 @node News Headers
1884 @section News Headers
1885
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:
1890
1891 @table @code
1892
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.
1901
1902 @item Subject
1903 @cindex Subject
1904 This required header will be prompted for if not present already.
1905
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.
1910
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).
1921
1922 @item Lines
1923 @cindex Lines
1924 This optional header will be computed by Message.
1925
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.
1940
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.
1945
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.
1949
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.
1956
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.
1963
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
1975
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.
1984
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}.
1988
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.
1992
1993 @lisp
1994 (setq message-required-news-headers
1995 (delq 'Message-ID message-required-news-headers))
1996 @end lisp
1997
1998 Other variables for customizing outgoing news articles:
1999
2000 @table @code
2001
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
2006
2007 @lisp
2008 (signature . disabled)
2009 @end lisp
2010
2011 to this list.
2012
2013 Valid checks are:
2014
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
2079
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}).
2083
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:}.
2089
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.
2094
2095 @end table
2096
2097
2098 @node News Variables
2099 @section News Variables
2100
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}.
2106
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.
2111
2112 @end table
2113
2114
2115 @node Insertion Variables
2116 @section Insertion Variables
2117
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.
2124
2125 Value is either @code{nil} (no variable overrides) or a let-style list
2126 of pairs @code{(VARIABLE VALUE)} to override default values.
2127
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.
2131
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
2137
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.
2143
2144 @item message-cite-prefix-regexp
2145 @vindex message-cite-prefix-regexp
2146 Regexp matching the longest possible citation prefix on a line.
2147
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:
2154
2155 @example
2156 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
2157 @end example
2158
2159 @c FIXME: Add 'message-insert-formatted-citation-line' and
2160 @c 'message-citation-line-format'.
2161
2162 Point will be at the beginning of the body of the message when this
2163 function is called.
2164
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.
2170
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{> }.
2181
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}.
2190
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}.
2199
2200 @item message-indentation-spaces
2201 @vindex message-indentation-spaces
2202 Number of spaces to indent yanked messages.
2203
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.
2213
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.
2220
2221 @item message-mark-insert-begin
2222 @vindex message-mark-insert-begin
2223 String to mark the beginning of some inserted text.
2224
2225 @item message-mark-insert-end
2226 @vindex message-mark-insert-end
2227 String to mark the end of some inserted text.
2228
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.
2236
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}.
2243
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.
2250
2251
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.
2256
2257 @end table
2258
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.
2264
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.
2269
2270
2271 @node Various Message Variables
2272 @section Various Message Variables
2273
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.
2285
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.
2292
2293 @item message-signature-separator
2294 @vindex message-signature-separator
2295 Regexp matching the signature separator. It is @samp{^-- *$} by
2296 default.
2297
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.
2302
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}.
2307
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/}.
2312
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.
2317
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.
2322
2323 @item message-header-setup-hook
2324 @vindex message-header-setup-hook
2325 Hook called narrowed to the headers after initializing the headers.
2326
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:
2330
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"))))
2338
2339 (add-hook 'message-header-setup-hook
2340 'my-message-header-setup-hook)
2341 @end lisp
2342
2343 @item message-send-hook
2344 @vindex message-send-hook
2345 Hook run before sending messages.
2346
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
2350
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
2357
2358 This function won't add the header if the header is already present.
2359
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.
2364
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.
2369
2370 @item message-sent-hook
2371 @vindex message-sent-hook
2372 Hook run after sending messages.
2373
2374 @item message-cancel-hook
2375 @vindex message-cancel-hook
2376 Hook run when canceling news articles.
2377
2378 @item message-mode-syntax-table
2379 @vindex message-mode-syntax-table
2380 Syntax table used in message mode buffers.
2381
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.
2387
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.
2396
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:
2404
2405 @lisp
2406 (@var{type} @var{predicate} @var{function})
2407 @end lisp
2408
2409 @table @var
2410 @item type
2411 A symbol that names the method.
2412
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.
2417
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
2422
2423 The default is:
2424
2425 @lisp
2426 ((news message-news-p message-send-via-news)
2427 (mail message-mail-p message-send-via-mail))
2428 @end lisp
2429
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}).
2437
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
2442
2443
2444
2445 @node Sending Variables
2446 @section Sending Variables
2447
2448 @table @code
2449
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.
2455
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"}.
2464
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.
2469
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.
2474
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.
2479
2480 @end table
2481
2482
2483 @node Message Buffers
2484 @section Message Buffers
2485
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.
2490
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:
2496
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.
2503
2504 @item unique
2505 @item t
2506 Create the new buffer with the name generated in the Message way.
2507
2508 @item unsent
2509 Similar to @code{unique} but the buffer name begins with "*unsent ".
2510
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
2521
2522 The default value is @code{unsent}.
2523
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.
2530
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:
2538
2539 @lisp
2540 (setq message-send-rename-function 'ignore)
2541 @end lisp
2542
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.
2546
2547 @end table
2548
2549
2550 @node Message Actions
2551 @section Message Actions
2552
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.
2557
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}.
2570
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:
2575
2576 @lisp
2577 (message-add-action
2578 `(set-window-configuration ,(current-window-configuration))
2579 'exit 'postpone 'kill)
2580 @end lisp
2581
2582 This restores the Gnus window configuration when the message buffer is
2583 killed, postponed or exited.
2584
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.
2588
2589
2590 @node Compatibility
2591 @chapter Compatibility
2592 @cindex compatibility
2593
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:
2597
2598 @lisp
2599 (require 'messcompat)
2600 @end lisp
2601
2602 This will initialize many Message variables from the values in the
2603 corresponding mail variables.
2604
2605
2606 @node Appendices
2607 @chapter Appendices
2608
2609 @menu
2610 * Responses:: Standard rules for determining where responses go.
2611 @end menu
2612
2613
2614 @node Responses
2615 @section Responses
2616
2617 To determine where a message is to go, the following algorithm is used
2618 by default.
2619
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:
2626
2627 @table @code
2628 @item Reply-To
2629
2630 @item From
2631 @end table
2632
2633
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:
2639
2640 @table @code
2641 @item From
2642 (unless there's a @code{Reply-To}, in which case that is used instead).
2643
2644 @item Cc
2645
2646 @item To
2647 @end table
2648
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.
2652
2653
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:
2658
2659 @table @code
2660
2661 @item Followup-To
2662
2663 @item Newsgroups
2664
2665 @end table
2666
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}.
2670
2671 @end table
2672
2673
2674 @node GNU Free Documentation License
2675 @chapter GNU Free Documentation License
2676 @include doclicense.texi
2677
2678 @node Index
2679 @chapter Index
2680 @printindex cp
2681
2682 @node Key Index
2683 @chapter Key Index
2684 @printindex ky
2685
2686 @bye
2687
2688 @c End: