f2cc33e33b16f79b7f71c90c8516b99cab2334c4
[elisp/gnus.git-] / texi / message.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename message
4 @settitle T-gnus 6.15 Message Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @dircategory Emacs
9 @direntry
10 * Message: (message).   Mail and news composition mode that goes with Gnus.
11 @end direntry
12 @iftex
13 @finalout
14 @end iftex
15 @setchapternewpage odd
16
17 @ifnottex
18
19 This file documents Message, the Emacs message composition mode.
20
21 Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
22
23 Permission is granted to copy, distribute and/or modify this document
24 under the terms of the GNU Free Documentation License, Version 1.1 or
25 any later version published by the Free Software Foundation; with no
26 Invariant Sections, with the Front-Cover texts being ``A GNU
27 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
28 license is included in the section entitled ``GNU Free Documentation
29 License'' in the Emacs manual.
30
31 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
32 this GNU Manual, like GNU software.  Copies published by the Free
33 Software Foundation raise funds for GNU development.''
34
35 This document is part of a collection distributed under the GNU Free
36 Documentation License.  If you want to distribute this document
37 separately from the collection, you can do so by adding a copy of the
38 license to the document, as described in section 6 of the license.
39 @end ifnottex
40
41 @tex
42
43 @titlepage
44 @title T-gnus 6.15 Message Manual
45
46 @author by Lars Magne Ingebrigtsen
47 @page
48
49 @vskip 0pt plus 1filll
50 Copyright @copyright{} 1996, 1997, 1998, 1999, 2000 
51      Free Software Foundation, Inc.
52
53 Permission is granted to copy, distribute and/or modify this document
54 under the terms of the GNU Free Documentation License, Version 1.1 or
55 any later version published by the Free Software Foundation; with the
56 Invariant Sections being none, with the Front-Cover texts being ``A GNU
57 Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
58 license is included in the section entitled ``GNU Free Documentation
59 License'' in the Emacs manual.
60
61 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
62 this GNU Manual, like GNU software.  Copies published by the Free
63 Software Foundation raise funds for GNU development.''
64
65 This document is part of a collection distributed under the GNU Free
66 Documentation License.  If you want to distribute this document
67 separately from the collection, you can do so by adding a copy of the
68 license to the document, as described in section 6 of the license.
69 @end titlepage
70 @page
71
72 @end tex
73
74 @node Top
75 @top Message
76
77 All message composition from Gnus (both mail and news) takes place in
78 Message mode buffers.
79
80 @menu
81 * Interface::         Setting up message buffers.
82 * Commands::          Commands you can execute in message mode buffers.
83 * Variables::         Customizing the message buffers.
84 * Compatibility::     Making Message backwards compatible.
85 * Appendices::        More technical things.
86 * Index::             Variable, function and concept index.
87 * Key Index::         List of Message mode keys.
88 @end menu
89
90 This manual corresponds to T-gnus 6.15 Message.  Message is distributed
91 with the Gnus distribution bearing the same version number as this
92 manual.
93
94
95 @node Interface
96 @chapter Interface
97
98 When a program (or a person) wants to respond to a message -- reply,
99 follow up, forward, cancel -- the program (or person) should just put
100 point in the buffer where the message is and call the required command.
101 @code{Message} will then pop up a new @code{message} mode buffer with
102 appropriate headers filled out, and the user can edit the message before
103 sending it.
104
105 @menu
106 * New Mail Message::     Editing a brand new mail message.
107 * New News Message::     Editing a brand new news message.
108 * Reply::                Replying via mail.
109 * Wide Reply::           Responding to all people via mail.
110 * Followup::             Following up via news.
111 * Canceling News::       Canceling a news article.
112 * Superseding::          Superseding a message.
113 * Forwarding::           Forwarding a message via news or mail.
114 * Resending::            Resending a mail message.
115 * Bouncing::             Bouncing a mail message.
116 @end menu
117
118
119 @node New Mail Message
120 @section New Mail Message
121
122 @findex message-mail
123 The @code{message-mail} command pops up a new message buffer.
124
125 Two optional parameters are accepted: The first will be used as the
126 @code{To} header and the second as the @code{Subject} header.  If these
127 are @code{nil}, those two headers will be empty.
128
129
130 @node New News Message
131 @section New News Message
132
133 @findex message-news
134 The @code{message-news} command pops up a new message buffer.
135
136 This function accepts two optional parameters.  The first will be used
137 as the @code{Newsgroups} header and the second as the @code{Subject}
138 header.  If these are @code{nil}, those two headers will be empty.
139
140
141 @node Reply
142 @section Reply
143
144 @findex message-reply
145 The @code{message-reply} function pops up a message buffer that's a
146 reply to the message in the current buffer.
147
148 @vindex message-reply-to-function
149 Message uses the normal methods to determine where replies are to go
150 (@pxref{Responses}), but you can change the behavior to suit your needs
151 by fiddling with the @code{message-reply-to-function} variable.
152
153 If you want the replies to go to the @code{Sender} instead of the
154 @code{From}, you could do something like this:
155
156 @lisp
157 (setq message-reply-to-function
158       (lambda ()
159        (cond ((equal (mail-fetch-field "from") "somebody")
160                (list (cons 'To (mail-fetch-field "sender"))))
161              (t
162               nil))))
163 @end lisp
164
165 This function will be called narrowed to the head of the article that is
166 being replied to.
167
168 As you can see, this function should return a string if it has an
169 opinion as to what the To header should be.  If it does not, it should
170 just return @code{nil}, and the normal methods for determining the To
171 header will be used.
172
173 This function can also return a list.  In that case, each list element
174 should be a cons, where the car should be the name of an header
175 (eg. @code{Cc}) and the cdr should be the header value
176 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
177 the head of the outgoing mail.
178
179
180 @node Wide Reply
181 @section Wide Reply
182
183 @findex message-wide-reply
184 The @code{message-wide-reply} pops up a message buffer that's a wide
185 reply to the message in the current buffer.  A @dfn{wide reply} is a
186 reply that goes out to all people listed in the @code{To}, @code{From}
187 (or @code{Reply-to}) and @code{Cc} headers.
188
189 @vindex message-wide-reply-to-function
190 Message uses the normal methods to determine where wide replies are to go,
191 but you can change the behavior to suit your needs by fiddling with the
192 @code{message-wide-reply-to-function}.  It is used in the same way as
193 @code{message-reply-to-function} (@pxref{Reply}).
194
195 @findex message-dont-reply-to-names
196 Addresses that match the @code{message-dont-reply-to-names} regular
197 expression will be removed from the @code{Cc} header.
198
199
200 @node Followup
201 @section Followup
202
203 @findex message-followup
204 The @code{message-followup} command pops up a message buffer that's a
205 followup to the message in the current buffer.
206
207 @vindex message-followup-to-function
208 Message uses the normal methods to determine where followups are to go,
209 but you can change the behavior to suit your needs by fiddling with the
210 @code{message-followup-to-function}.  It is used in the same way as
211 @code{message-reply-to-function} (@pxref{Reply}).
212
213 @vindex message-use-followup-to
214 The @code{message-use-followup-to} variable says what to do about
215 @code{Followup-To} headers.  If it is @code{use}, always use the value.
216 If it is @code{ask} (which is the default), ask whether to use the
217 value.  If it is @code{t}, use the value unless it is @samp{poster}.  If
218 it is @code{nil}, don't use the value.
219
220
221 @node Canceling News
222 @section Canceling News
223
224 @findex message-cancel-news
225 The @code{message-cancel-news} command cancels the article in the
226 current buffer.
227
228
229 @node Superseding
230 @section Superseding
231
232 @findex message-supersede
233 The @code{message-supersede} command pops up a message buffer that will
234 supersede the message in the current buffer.
235
236 @vindex message-ignored-supersedes-headers
237 Headers matching the @code{message-ignored-supersedes-headers} are
238 removed before popping up the new message buffer.  The default is@*
239 @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
240 ^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:}.
241
242
243
244 @node Forwarding
245 @section Forwarding
246
247 @findex message-forward
248 The @code{message-forward} command pops up a message buffer to forward
249 the message in the current buffer.  If given a prefix, forward using
250 news.
251
252 @table @code
253 @item message-forward-ignored-headers
254 @vindex message-forward-ignored-headers
255 All headers that match this regexp will be deleted when forwarding a message.
256
257 @item message-make-forward-subject-function
258 @vindex message-make-forward-subject-function
259 A list of functions that are called to generate a subject header for
260 forwarded messages.  The subject generated by the previous function is
261 passed into each successive function.
262
263 The provided functions are:
264
265 @table @code
266 @item message-forward-subject-author-subject
267 @findex message-forward-subject-author-subject
268 Source of article (author or newsgroup), in brackets followed by the
269 subject.
270
271 @item message-forward-subject-fwd
272 Subject of article with @samp{Fwd:} prepended to it.
273 @end table
274
275 @item message-wash-forwarded-subjects
276 @vindex message-wash-forwarded-subjects
277 If this variable is @code{t}, the subjects of forwarded messages have
278 the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
279 @samp{(fwd)}) removed before the new subject is
280 constructed.  The default value is @code{nil}.
281
282 @item message-forward-as-mime
283 @vindex message-forward-as-mime
284 If this variable is @code{t} (the default), forwarded messages are
285 included as inline MIME RFC822 parts.  If it's @code{nil}, forwarded
286 messages will just be copied inline to the new message, like previous,
287 non MIME-savvy versions of gnus would do.
288 @end table
289
290
291 @node Resending
292 @section Resending
293
294 @findex message-resend
295 The @code{message-resend} command will prompt the user for an address
296 and resend the message in the current buffer to that address.
297
298 @vindex message-ignored-resent-headers
299 Headers that match the @code{message-ignored-resent-headers} regexp will
300 be removed before sending the message.  The default is
301 @samp{^Return-receipt}.
302
303
304 @node Bouncing
305 @section Bouncing
306
307 @findex message-bounce
308 The @code{message-bounce} command will, if the current buffer contains a
309 bounced mail message, pop up a message buffer stripped of the bounce
310 information.  A @dfn{bounced message} is typically a mail you've sent
311 out that has been returned by some @code{mailer-daemon} as
312 undeliverable.
313
314 @vindex message-ignored-bounced-headers
315 Headers that match the @code{message-ignored-bounced-headers} regexp
316 will be removed before popping up the buffer.  The default is
317 @samp{^\\(Received\\|Return-Path\\):}.
318
319
320 @node Commands
321 @chapter Commands
322
323 @menu
324 * Buffer Entry::        Commands after entering a Message buffer.
325 * Header Commands::     Commands for moving to headers.
326 * Movement::            Moving around in message buffers.
327 * Insertion::           Inserting things into message buffers.
328 * MIME::                @sc{mime} considerations.
329 * Security::            Signing and encrypting messages.
330 * Various Commands::    Various things.
331 * Sending::             Actually sending the message.
332 * Mail Aliases::        How to use mail aliases.
333 * Spelling::            Having Emacs check your spelling.
334 @end menu
335
336
337 @node Buffer Entry
338 @section Buffer Entry
339 @cindex undo
340 @kindex C-_
341
342 You most often end up in a Message buffer when responding to some other
343 message of some sort.  Message does lots of handling of quoted text, and
344 may remove signatures, reformat the text, or the like---depending on
345 which used settings you're using.  Message usually gets things right,
346 but sometimes it stumbles.  To help the user unwind these stumblings,
347 Message sets the undo boundary before each major automatic action it
348 takes.  If you press the undo key (usually located at @kbd{C-_}) a few
349 times, you will get back the un-edited message you're responding to.
350
351
352 @node Header Commands
353 @section Header Commands
354
355 All these commands move to the header in question.  If it doesn't exist,
356 it will be inserted.
357
358 @table @kbd
359
360 @item C-c ?
361 @kindex C-c ?
362 @findex message-goto-to
363 Describe the message mode.
364
365 @item C-c C-f C-t
366 @kindex C-c C-f C-t
367 @findex message-goto-to
368 Go to the @code{To} header (@code{message-goto-to}).
369
370 @item C-c C-f C-b
371 @kindex C-c C-f C-b
372 @findex message-goto-bcc
373 Go to the @code{Bcc} header (@code{message-goto-bcc}).
374
375 @item C-c C-f C-f
376 @kindex C-c C-f C-f
377 @findex message-goto-fcc
378 Go to the @code{Fcc} header (@code{message-goto-fcc}).
379
380 @item C-c C-f C-c
381 @kindex C-c C-f C-c
382 @findex message-goto-cc
383 Go to the @code{Cc} header (@code{message-goto-cc}).
384
385 @item C-c C-f C-s
386 @kindex C-c C-f C-s
387 @findex message-goto-subject
388 Go to the @code{Subject} header (@code{message-goto-subject}).
389
390 @item C-c C-f C-r
391 @kindex C-c C-f C-r
392 @findex message-goto-reply-to
393 Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
394
395 @item C-c C-f C-n
396 @kindex C-c C-f C-n
397 @findex message-goto-newsgroups
398 Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
399
400 @item C-c C-f C-d
401 @kindex C-c C-f C-d
402 @findex message-goto-distribution
403 Go to the @code{Distribution} header (@code{message-goto-distribution}).
404
405 @item C-c C-f C-o
406 @kindex C-c C-f C-o
407 @findex message-goto-followup-to
408 Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
409
410 @item C-c C-f C-k
411 @kindex C-c C-f C-k
412 @findex message-goto-keywords
413 Go to the @code{Keywords} header (@code{message-goto-keywords}).
414
415 @item C-c C-f C-u
416 @kindex C-c C-f C-u
417 @findex message-goto-summary
418 Go to the @code{Summary} header (@code{message-goto-summary}).
419
420 @end table
421
422
423 @node Movement
424 @section Movement
425
426 @table @kbd
427 @item C-c C-b
428 @kindex C-c C-b
429 @findex message-goto-body
430 Move to the beginning of the body of the message
431 (@code{message-goto-body}).
432
433 @item C-c C-i
434 @kindex C-c C-i
435 @findex message-goto-signature
436 Move to the signature of the message (@code{message-goto-signature}).
437
438 @end table
439
440
441 @node Insertion
442 @section Insertion
443
444 @table @kbd
445
446 @item C-c C-y
447 @kindex C-c C-y
448 @findex message-yank-original
449 Yank the message in the buffer @code{gnus-article-copy} into the message
450 buffer. Normally @code{gnus-article-copy} is what you are replying to
451 (@code{message-yank-original}).
452
453 @item C-c M-C-y
454 @kindex C-c M-C-y
455 @findex message-yank-buffer
456 Prompt for a buffer name and yank the contents of that buffer into the
457 message buffer (@code{message-yank-buffer}).
458
459 @item C-c C-q
460 @kindex C-c C-q
461 @findex message-fill-yanked-message
462 Fill the yanked message (@code{message-fill-yanked-message}).  Warning:
463 Can severely mess up the yanked text if its quoting conventions are
464 strange.  You'll quickly get a feel for when it's safe, though.  Anyway,
465 just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
466 all right.
467
468 @item C-c C-w
469 @kindex C-c C-w
470 @findex message-insert-signature
471 Insert a signature at the end of the buffer
472 (@code{message-insert-signature}).
473
474 @item C-c M-h
475 @kindex C-c M-h
476 @findex message-insert-headers
477 Insert the message headers (@code{message-insert-headers}).
478
479 @end table
480
481 @table @code
482 @item message-ignored-cited-headers
483 @vindex message-ignored-cited-headers
484 All headers that match this regexp will be removed from yanked
485 messages.  The default is @samp{.}, which means that all headers will be
486 removed.
487
488 @item message-cite-prefix-regexp
489 @vindex message-cite-prefix-regexp
490 Regexp matching the longest possible citation prefix on a line.
491
492 @item message-citation-line-function
493 @vindex message-citation-line-function
494 Function called to insert the citation line.  The default is
495 @code{message-insert-citation-line}, which will lead to citation lines
496 that look like:
497
498 @example
499 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
500 @end example
501
502 Point will be at the beginning of the body of the message when this
503 function is called.
504
505 Note that Gnus provides a feature where clicking on `writes:' hides the
506 cited text.  If you change the citation line too much, readers of your
507 messages will have to adjust their Gnus, too.  See the variable
508 @code{gnus-cite-attribution-suffix}.  @xref{Article Highlighting, ,
509 Article Highlighting, gnus}, for details.
510
511 @item message-yank-prefix
512 @vindex message-yank-prefix
513 @cindex yanking
514 @cindex quoting
515 When you are replying to or following up an article, you normally want
516 to quote the person you are answering.  Inserting quoted text is done
517 by @dfn{yanking}, and each quoted line you yank (except earlier
518 quotes, see @code{message-yank-cited-prefix}) will have
519 @code{message-yank-prefix} prepended to it.  The default is @samp{> }.
520
521 @item message-yank-cited-prefix
522 @vindex message-yank-cited-prefix
523 @cindex yanking
524 @cindex cited
525 @cindex quoting
526 The @code{message-yank-prefix} prefix is not used on already cited
527 lines, instead the contents of this variable is used as yank prefix.
528 The default is @samp{>}.
529
530 @item message-yank-add-new-references
531 @vindex message-yank-add-new-references
532 @cindex yanking
533 Non-@code{nil} means new IDs will be added to References field when an
534 article is yanked by the command @code{message-yank-original}
535 interactively.  If it is a symbol @code{message-id-only}, only an ID
536 from Message-ID field is used, otherwise IDs extracted from References,
537 In-Reply-To and Message-ID fields are used.
538
539 @item message-list-references-add-position
540 @vindex message-list-references-add-position
541 @cindex yanking
542 Integer value means position for adding to References field when an
543 article is yanked by the command @code{message-yank-original}
544 interactively.
545
546 @item message-indentation-spaces
547 @vindex message-indentation-spaces
548 Number of spaces to indent yanked messages.
549
550 @item message-cite-function
551 @vindex message-cite-function
552 @findex message-cite-original
553 @findex sc-cite-original
554 @findex message-cite-original-without-signature
555 @cindex Supercite
556 Function for citing an original message.  The default is
557 @code{message-cite-original}, which simply inserts the original message
558 and prepends @samp{> } to each line.
559 @code{message-cite-original-without-signature} does the same, but elides
560 the signature.  You can also set it to @code{sc-cite-original} to use
561 Supercite.
562
563 @item message-suspend-font-lock-when-citing
564 @vindex message-suspend-font-lock-when-citing
565 If non-@code{nil}, suspend font-lock'ing while citing an original
566 message.  Some lazy demand-driven fontification tools (or Emacs itself)
567 have a bug that they often miss a buffer to be fontified.  It will
568 mostly occur when Emacs prompts user for any inputs in the minibuffer.
569 Setting this option to non-@code{nil} may help you to avoid unpleasant
570 errors even if it is an add-hoc expedient.
571
572 @item message-indent-citation-function
573 @vindex message-indent-citation-function
574 Function for modifying a citation just inserted in the mail buffer.
575 This can also be a list of functions.  Each function can find the
576 citation between @code{(point)} and @code{(mark t)}.  And each function
577 should leave point and mark around the citation text as modified.
578
579 @item message-signature
580 @vindex message-signature
581 String to be inserted at the end of the message buffer.  If @code{t}
582 (which is the default), the @code{message-signature-file} file will be
583 inserted instead.  If a function, the result from the function will be
584 used instead.  If a form, the result from the form will be used instead.
585 If this variable is @code{nil}, no signature will be inserted at all.
586
587 @item message-signature-file
588 @vindex message-signature-file
589 File containing the signature to be inserted at the end of the buffer.
590 The default is @samp{~/.signature}.
591
592 @end table
593
594 Note that RFC1036bis says that a signature should be preceded by the three
595 characters @samp{-- } on a line by themselves.  This is to make it
596 easier for the recipient to automatically recognize and process the
597 signature.  So don't remove those characters, even though you might feel
598 that they ruin your beautiful design, like, totally.
599
600 Also note that no signature should be more than four lines long.
601 Including ASCII graphics is an efficient way to get everybody to believe
602 that you are silly and have nothing important to say.
603
604
605 @node MIME
606 @section MIME
607 @cindex MML
608 @cindex MIME
609 @cindex multipart
610 @cindex attachment
611
612 Message is a @sc{mime}-compliant posting agent.  The user generally
613 doesn't have to do anything to make the @sc{mime} happen---Message will
614 automatically add the @code{Content-Type} and
615 @code{Content-Transfer-Encoding} headers.
616
617 The most typical thing users want to use the multipart things in
618 @sc{mime} for is to add ``attachments'' to mail they send out.  This can
619 be done with the @code{C-c C-a} command, which will prompt for a file
620 name and a @sc{mime} type.
621
622 You can also create arbitrarily complex multiparts using the MML
623 language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
624 Manual}).
625
626 @node Security
627 @section Security
628 @cindex Security
629 @cindex S/MIME
630 @cindex PGP/MIME
631 @cindex sign
632 @cindex encrypt
633
634 Using the MML language, Message is able to create digitally signed and
635 digitally encrypted messages.  Message (or rather MML) currently support
636 PGP/MIME and S/MIME.  Instructing MML to perform security operations on
637 a MIME part is done using the @code{C-c C-m s} key map for signing and the
638 @code{C-c C-m c} key map for encryption, as follows.
639
640 @table @kbd
641
642 @item C-c C-m s s
643 @kindex C-c C-m s s
644 @findex mml-secure-sign-smime
645
646 Digitally sign current MIME part using S/MIME.
647
648 @item C-c C-m s p
649 @kindex C-c C-m s p
650 @findex mml-secure-sign-pgp
651
652 Digitally sign current MIME part using PGP/MIME.
653
654 @item C-c C-m c s
655 @kindex C-c C-m c s
656 @findex mml-secure-encrypt-smime
657
658 Digitally encrypt current MIME part using S/MIME.
659
660 @item C-c C-m c p
661 @kindex C-c C-m c p
662 @findex mml-secure-encrypt-pgpmime
663
664 Digitally encrypt current MIME part using PGP/MIME.
665
666 @end table
667
668 These commands do not immediately sign or encrypt the message, they
669 merely insert proper MML tags to instruct the MML engine to perform that
670 operation when the message is actually sent.  They may perform other
671 operations too, such as locating and retrieving a S/MIME certificate of
672 the person you wish to send encrypted mail to.
673
674 Since signing and especially encryption often is used when sensitive
675 information is sent, you may want to have some way to ensure that your
676 mail is actually signed or encrypted.  After invoking the above
677 sign/encrypt commands, it is possible to preview the raw article by
678 using @code{C-u C-m P} (@code{mml-preview}).  Then you can verify that
679 your long rant about what your ex-significant other or whomever actually
680 did with that funny looking person at that strange party the other
681 night, actually will be sent encrypted.
682
683 @emph{Note!}  Neither PGP/MIME nor S/MIME encrypt/signs RFC822 headers.
684 They only operate on the MIME object.  Keep this in mind before sending
685 mail with a sensitive Subject line.
686
687 Actually using the security commands above is not very difficult.  At
688 least not compared with making sure all involved programs talk with each
689 other properly.  Thus, we now describe what external libraries or
690 programs are required to make things work, and some small general hints.
691
692 @subsection Using S/MIME
693
694 @emph{Note!}  This section assume you have a basic familiarity with
695 modern cryptography, S/MIME, various PKCS standards, OpenSSL and so on.
696
697 The S/MIME support in Message (and MML) require OpenSSL.  OpenSSL
698 perform the actual S/MIME sign/encrypt operations.  OpenSSL can be found
699 at @code{http://www.openssl.org/}.  OpenSSL 0.9.6 and later should work.
700 Version 0.9.5a cannot extract mail addresses from certificates, and it
701 insert a spurious CR character into MIME separators so you may wish to
702 avoid it if you would like to avoid being regarded as someone who send
703 strange mail. (Although by sending S/MIME messages you've probably
704 already lost that contest.)
705
706 To be able to send encrypted mail, a personal certificate is not
707 required.  Message (MML) need a certificate for the person to whom you
708 wish to communicate with though.  You're asked for this when you type
709 @code{C-c C-m c s}.  Currently there are two ways to retrieve this
710 certificate, from a local file or from DNS.  If you chose a local file,
711 it need to contain a X.509 certificate in PEM format.  If you chose DNS,
712 you're asked for the domain name where the certificate is stored, the
713 default is a good guess.  To my belief, Message (MML) is the first mail
714 agent in the world to support retrieving S/MIME certificates from DNS,
715 so you're not likely to find very many certificates out there.  At least
716 there should be one, stored at the domain @code{simon.josefsson.org}.
717 LDAP is a more popular method of distributing certificates, support for
718 it is planned.  (Meanwhile, you can use @code{ldapsearch} from the
719 command line to retrieve a certificate into a file and use it.)
720
721 As for signing messages, OpenSSL can't perform signing operations
722 without some kind of configuration.  Especially, you need to tell it
723 where your private key and your certificate is stored.  MML uses an
724 Emacs interface to OpenSSL, aptly named @code{smime.el}, and it contain
725 a @code{custom} group used for this configuration.  So, try @code{M-x
726 customize-group RET smime RET} and look around.
727
728 Currently there is no support for talking to a CA (or RA) to create your
729 own certificate.  None is planned either.  You need to do this manually
730 with OpenSSL or using some other program.  I used Netscape and got a
731 free S/MIME certificate from one of the big CA's on the net.  Netscape
732 is able to export your private key and certificate in PKCS #12 format.
733 Use OpenSSL to convert this into a plain X.509 certificate in PEM format
734 as follows.
735
736 @example
737 $ openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
738 @end example
739
740 The @code{key+cert.pem} file should be pointed to from the
741 @code{smime-keys} variable.  You should now be able to send signed mail.
742
743 @emph{Note!}  Your private key is store unencrypted in the file, so take
744 care in handling it.
745
746 @subsection Using PGP/MIME
747
748 PGP/MIME requires an external OpenPGP implementation, such as GNU
749 Privacy Guard (@code{http://www.gnupg.org/}).  It also requires an Emacs
750 interface to it, such as Mailcrypt (available from
751 @code{http://www.nb.net/~lbudney/linux/software/mailcrypt.html}) or
752 Florian Weimer's @code{gpg.el}.
753
754 Creating your own OpenPGP key is described in detail in the
755 documentation of your OpenPGP implementation, so we refer to it.
756
757 @node Various Commands
758 @section Various Commands
759
760 @table @kbd
761
762 @item C-c C-r
763 @kindex C-c C-r
764 @findex message-caesar-buffer-body
765 Caesar rotate (aka. rot13) the current message
766 (@code{message-caesar-buffer-body}).  If narrowing is in effect, just
767 rotate the visible portion of the buffer.  A numerical prefix says how
768 many places to rotate the text.  The default is 13.
769
770 @item C-c C-e
771 @kindex C-c C-e
772 @findex message-elide-region
773 Elide the text between point and mark (@code{message-elide-region}).
774 The text is killed and replaced with the contents of the variable
775 @code{message-elide-ellipsis}. The default value is to use an ellipsis
776 (@samp{[...]}).
777
778 @item C-c C-z
779 @kindex C-c C-x
780 @findex message-kill-to-signature
781 Kill all the text up to the signature, or if that's missing, up to the
782 end of the message (@code{message-kill-to-signature}).
783
784 @item C-c C-v
785 @kindex C-c C-v
786 @findex message-delete-not-region
787 Delete all text in the body of the message that is outside the region
788 (@code{message-delete-not-region}).
789
790 @item M-RET
791 @kindex M-RET
792 @kindex message-newline-and-reformat
793 Insert four newlines, and then reformat if inside quoted text.
794
795 Here's an example:
796
797 @example
798 > This is some quoted text.  And here's more quoted text.
799 @end example
800
801 If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
802
803 @example
804 > This is some quoted text.
805
806 *
807
808 > And here's more quoted text.
809 @end example
810
811 @samp{*} says where point will be placed.
812
813 @item C-c C-t
814 @kindex C-c C-t
815 @findex message-insert-to
816 Insert a @code{To} header that contains the @code{Reply-To} or
817 @code{From} header of the message you're following up
818 (@code{message-insert-to}).
819
820 @item C-c C-n
821 @kindex C-c C-n
822 @findex message-insert-newsgroups
823 Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
824 or @code{Newsgroups} header of the article you're replying to
825 (@code{message-insert-newsgroups}).
826
827 @item C-c M-r
828 @kindex C-c M-r
829 @findex message-rename-buffer
830 Rename the buffer (@code{message-rename-buffer}).  If given a prefix,
831 prompt for a new buffer name.
832
833 @end table
834
835
836 @node Sending
837 @section Sending
838
839 @table @kbd
840 @item C-c C-c
841 @kindex C-c C-c
842 @findex message-send-and-exit
843 Send the message and bury the current buffer
844 (@code{message-send-and-exit}).
845
846 @item C-c C-s
847 @kindex C-c C-s
848 @findex message-send
849 Send the message (@code{message-send}).
850
851 @item C-c C-d
852 @kindex C-c C-d
853 @findex message-dont-send
854 Bury the message buffer and exit (@code{message-dont-send}).
855
856 @item C-c C-k
857 @kindex C-c C-k
858 @findex message-kill-buffer
859 Kill the message buffer and exit (@code{message-kill-buffer}).
860
861 @end table
862
863
864
865 @node Mail Aliases
866 @section Mail Aliases
867 @cindex mail aliases
868 @cindex aliases
869
870 @vindex message-mail-alias-type
871 The @code{message-mail-alias-type} variable controls what type of mail
872 alias expansion to use.  Currently only one form is supported---Message
873 uses @code{mailabbrev} to handle mail aliases.  If this variable is
874 @code{nil}, no mail alias expansion will be performed.
875
876 @code{mailabbrev} works by parsing the @file{/etc/mailrc} and
877 @file{~/.mailrc} files.  These files look like:
878
879 @example
880 alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
881 alias ding "ding@@ifi.uio.no (ding mailing list)"
882 @end example
883
884 After adding lines like this to your @file{~/.mailrc} file, you should
885 be able to just write @samp{lmi} in the @code{To} or @code{Cc} (and so
886 on) headers and press @kbd{SPC} to expand the alias.
887
888 No expansion will be performed upon sending of the message---all
889 expansions have to be done explicitly.
890
891
892 @node Spelling
893 @section Spelling
894 @cindex spelling
895 @findex ispell-message
896
897 There are two popular ways to have Emacs spell-check your messages:
898 @code{ispell} and @code{flyspell}.  @code{ispell} is the older and
899 probably more popular package.  You typically first write the message,
900 and then run the entire thing through @code{ispell} and fix all the
901 typos.  To have this happen automatically when you send a message, put
902 something like the following in your @file{.emacs} file:
903
904 @lisp
905 (add-hook 'message-send-hook 'ispell-message)
906 @end lisp
907
908 @vindex ispell-message-dictionary-alist
909 If you're in the habit of writing in different languages, this can be
910 controlled by the @code{ispell-message-dictionary-alist} variable:
911
912 @lisp
913 (setq ispell-message-dictionary-alist
914       '(("^Newsgroups:.*\\bde\\." . "deutsch8")
915         (".*" . "default")))
916 @end lisp
917
918 @code{ispell} depends on having the external @samp{ispell} command
919 installed.
920
921 The other popular method is using @code{flyspell}.  This package checks
922 your spelling while you're writing, and marks any mis-spelled words in
923 various ways.
924
925 To use @code{flyspell}, put something like the following in your
926 @file{.emacs} file:
927
928 @lisp
929 (defun my-message-setup-routine ()
930   (flyspell-mode 1))
931 (add-hook 'message-setup-hook 'my-message-setup-routine)
932 @end lisp
933
934 @code{flyspell} depends on having the external @samp{ispell} command
935 installed.
936
937
938 @node Variables
939 @chapter Variables
940
941 @menu
942 * Message Headers::             General message header stuff.
943 * Mail Headers::                Customizing mail headers.
944 * Mail Variables::              Other mail variables.
945 * News Headers::                Customizing news headers.
946 * News Variables::              Other news variables.
947 * Various Message Variables::   Other message variables.
948 * Sending Variables::           Variables for sending.
949 * Message Buffers::             How Message names its buffers.
950 * Message Actions::             Actions to be performed when exiting.
951 @end menu
952
953
954 @node Message Headers
955 @section Message Headers
956
957 Message is quite aggressive on the message generation front.  It has to
958 be -- it's a combined news and mail agent.  To be able to send combined
959 messages, it has to generate all headers itself (instead of letting the
960 mail/news system do it) to ensure that mail and news copies of messages
961 look sufficiently similar.
962
963 @table @code
964
965 @item message-generate-headers-first
966 @vindex message-generate-headers-first
967 If non-@code{nil}, generate all required headers before starting to
968 compose the message.
969
970 The variables @code{message-required-mail-headers} and
971 @code{message-required-news-headers} specify which headers are required.
972
973 Note that some headers will be removed and re-generated before posting,
974 because of the variable @code{message-deletable-headers} (see below).
975
976 @item message-from-style
977 @vindex message-from-style
978 Specifies how @code{From} headers should look.  There are four valid
979 values:
980
981 @table @code
982 @item nil
983 Just the address -- @samp{king@@grassland.com}.
984
985 @item parens
986 @samp{king@@grassland.com (Elvis Parsley)}.
987
988 @item angles
989 @samp{Elvis Parsley <king@@grassland.com>}.
990
991 @item default
992 Look like @code{angles} if that doesn't require quoting, and
993 @code{parens} if it does.  If even @code{parens} requires quoting, use
994 @code{angles} anyway.
995
996 @end table
997
998 @item message-deletable-headers
999 @vindex message-deletable-headers
1000 Headers in this list that were previously generated by Message will be
1001 deleted before posting.  Let's say you post an article.  Then you decide
1002 to post it again to some other group, you naughty boy, so you jump back
1003 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
1004 ship it off again.  By default, this variable makes sure that the old
1005 generated @code{Message-ID} is deleted, and a new one generated.  If
1006 this isn't done, the entire empire would probably crumble, anarchy would
1007 prevail, and cats would start walking on two legs and rule the world.
1008 Allegedly.
1009
1010 @item message-default-headers
1011 @vindex message-default-headers
1012 This string is inserted at the end of the headers in all message
1013 buffers.
1014
1015 @item message-subject-re-regexp
1016 @vindex message-subject-re-regexp
1017 Responses to messages have subjects that start with @samp{Re: }.  This
1018 is @emph{not} an abbreviation of the English word ``response'', but is
1019 Latin, and means ``in response to''.  Some illiterate nincompoops have
1020 failed to grasp this fact, and have ``internationalized'' their software
1021 to use abonimations like @samp{Aw: } (``antwort'') or @samp{Sv: }
1022 (``svar'') instead, which is meaningless and evil.  However, you may
1023 have to deal with users that use these evil tools, in which case you may
1024 set this variable to a regexp that matches these prefixes.  Myself, I
1025 just throw away non-compliant mail.
1026
1027 @item message-alternative-emails
1028 @vindex message-alternative-emails
1029 A regexp to match the alternative email addresses.  The first matched
1030 address (not primary one) is used in the @code{From} field.
1031
1032 @end table
1033
1034
1035 @node Mail Headers
1036 @section Mail Headers
1037
1038 @table @code
1039 @item message-required-mail-headers
1040 @vindex message-required-mail-headers
1041 @xref{News Headers}, for the syntax of this variable.  It is
1042 @code{(From Date Subject (optional . In-Reply-To) Message-ID Lines
1043 (optional . User-Agent))} by default.
1044
1045 @item message-ignored-mail-headers
1046 @vindex message-ignored-mail-headers
1047 Regexp of headers to be removed before mailing.  The default is
1048 @samp{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:}.
1049
1050 @item message-default-mail-headers
1051 @vindex message-default-mail-headers
1052 This string is inserted at the end of the headers in all message
1053 buffers that are initialized as mail.
1054
1055 @end table
1056
1057
1058 @node Mail Variables
1059 @section Mail Variables
1060
1061 @table @code
1062 @item message-send-mail-function
1063 @vindex message-send-mail-function
1064 Function used to send the current buffer as mail.  The default is
1065 @code{message-send-mail-with-sendmail}.   If you prefer using MH
1066 instead, set this variable to @code{message-send-mail-with-mh}.
1067
1068 @item message-mh-deletable-headers
1069 @vindex message-mh-deletable-headers
1070 Most versions of MH doesn't like being fed messages that contain the
1071 headers in this variable.  If this variable is non-@code{nil} (which is
1072 the default), these headers will be removed before mailing when sending
1073 messages via MH.  Set it to @code{nil} if your MH can handle these
1074 headers.
1075
1076 @item message-send-mail-partially-limit
1077 @vindex message-send-mail-partially-limit
1078 The limitation of messages sent as message/partial.
1079 The lower bound of message size in characters, beyond which the message 
1080 should be sent in several parts. If it is nil, the size is unlimited.
1081
1082 @end table
1083
1084
1085 @node News Headers
1086 @section News Headers
1087
1088 @vindex message-required-news-headers
1089 @code{message-required-news-headers} a list of header symbols.  These
1090 headers will either be automatically generated, or, if that's
1091 impossible, they will be prompted for.  The following symbols are valid:
1092
1093 @table @code
1094
1095 @item From
1096 @cindex From
1097 @findex user-full-name
1098 @findex user-mail-address
1099 This required header will be filled out with the result of the
1100 @code{message-make-from} function, which depends on the
1101 @code{message-from-style}, @code{user-full-name},
1102 @code{user-mail-address} variables.
1103
1104 @item Subject
1105 @cindex Subject
1106 This required header will be prompted for if not present already.
1107
1108 @item Newsgroups
1109 @cindex Newsgroups
1110 This required header says which newsgroups the article is to be posted
1111 to.  If it isn't present already, it will be prompted for.
1112
1113 @item Organization
1114 @cindex organization
1115 This optional header will be filled out depending on the
1116 @code{message-user-organization} variable.
1117 @code{message-user-organization-file} will be used if this variable is
1118 @code{t}.  This variable can also be a string (in which case this string
1119 will be used), or it can be a function (which will be called with no
1120 parameters and should return a string to be used).
1121
1122 @item Lines
1123 @cindex Lines
1124 This optional header will be computed by Message.
1125
1126 @item Message-ID
1127 @cindex Message-ID
1128 @vindex mail-host-address
1129 @findex system-name
1130 @cindex Sun
1131 This required header will be generated by Message.  A unique ID will be
1132 created based on the date, time, user name and system name.  Message
1133 will use @code{system-name} to determine the name of the system.  If
1134 this isn't a fully qualified domain name (FQDN), Message will use
1135 @code{mail-host-address} as the FQDN of the machine.
1136
1137 @item User-Agent
1138 @cindex User-Agent
1139 This optional header will be filled out according to the
1140 @code{message-newsreader} local variable.
1141
1142 @item In-Reply-To
1143 This optional header is filled out using the @code{Date} and @code{From}
1144 header of the article being replied to.
1145
1146 @item Expires
1147 @cindex Expires
1148 This extremely optional header will be inserted according to the
1149 @code{message-expires} variable.  It is highly deprecated and shouldn't
1150 be used unless you know what you're doing.
1151
1152 @item Distribution
1153 @cindex Distribution
1154 This optional header is filled out according to the
1155 @code{message-distribution-function} variable.  It is a deprecated and
1156 much misunderstood header.
1157
1158 @item Path
1159 @cindex path
1160 This extremely optional header should probably never be used.
1161 However, some @emph{very} old servers require that this header is
1162 present.  @code{message-user-path} further controls how this
1163 @code{Path} header is to look.  If it is @code{nil}, use the server name
1164 as the leaf node.  If it is a string, use the string.  If it is neither
1165 a string nor @code{nil}, use the user name only.  However, it is highly
1166 unlikely that you should need to fiddle with this variable at all.
1167 @end table
1168
1169 @findex yow
1170 @cindex Mime-Version
1171 In addition, you can enter conses into this list.  The car of this cons
1172 should be a symbol.  This symbol's name is the name of the header, and
1173 the cdr can either be a string to be entered verbatim as the value of
1174 this header, or it can be a function to be called.  This function should
1175 return a string to be inserted.  For instance, if you want to insert
1176 @code{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
1177 into the list.  If you want to insert a funny quote, you could enter
1178 something like @code{(X-Yow . yow)} into the list.  The function
1179 @code{yow} will then be called without any arguments.
1180
1181 If the list contains a cons where the car of the cons is
1182 @code{optional}, the cdr of this cons will only be inserted if it is
1183 non-@code{nil}.
1184
1185 Other variables for customizing outgoing news articles:
1186
1187 @table @code
1188
1189 @item message-syntax-checks
1190 @vindex message-syntax-checks
1191 Controls what syntax checks should not be performed on outgoing posts.
1192 To disable checking of long signatures, for instance, add
1193
1194 @lisp
1195 (signature . disabled)
1196 @end lisp
1197
1198 to this list.
1199
1200 Valid checks are:
1201
1202 @table @code
1203 @item subject-cmsg
1204 Check the subject for commands.
1205 @item sender
1206 @cindex Sender
1207 Insert a new @code{Sender} header if the @code{From} header looks odd.
1208 @item multiple-headers
1209 Check for the existence of multiple equal headers.
1210 @item sendsys
1211 @cindex sendsys
1212 Check for the existence of version and sendsys commands.
1213 @item message-id
1214 Check whether the @code{Message-ID} looks ok.
1215 @item from
1216 Check whether the @code{From} header seems nice.
1217 @item long-lines
1218 @cindex long lines
1219 Check for too long lines.
1220 @item control-chars
1221 Check for invalid characters.
1222 @item size
1223 Check for excessive size.
1224 @item new-text
1225 Check whether there is any new text in the messages.
1226 @item signature
1227 Check the length of the signature.
1228 @item approved
1229 @cindex approved
1230 Check whether the article has an @code{Approved} header, which is
1231 something only moderators should include.
1232 @item empty
1233 Check whether the article is empty.
1234 @item invisible-text
1235 Check whether there is any invisible text in the buffer.
1236 @item empty-headers
1237 Check whether any of the headers are empty.
1238 @item existing-newsgroups
1239 Check whether the newsgroups mentioned in the @code{Newsgroups} and
1240 @code{Followup-To} headers exist.
1241 @item valid-newsgroups
1242 Check whether the @code{Newsgroups} and @code{Followup-to} headers
1243 are valid syntactically.
1244 @item repeated-newsgroups
1245 Check whether the @code{Newsgroups} and @code{Followup-to} headers
1246 contains repeated group names.
1247 @item shorten-followup-to
1248 Check whether to add a @code{Followup-to} header to shorten the number
1249 of groups to post to.
1250 @end table
1251
1252 All these conditions are checked by default.
1253
1254 @item message-ignored-news-headers
1255 @vindex message-ignored-news-headers
1256 Regexp of headers to be removed before posting.  The default is@*
1257 @samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|^X-Draft-From:}.
1258
1259 @item message-default-news-headers
1260 @vindex message-default-news-headers
1261 This string is inserted at the end of the headers in all message
1262 buffers that are initialized as news.
1263
1264 @end table
1265
1266
1267 @node News Variables
1268 @section News Variables
1269
1270 @table @code
1271 @item message-send-news-function
1272 @vindex message-send-news-function
1273 Function used to send the current buffer as news.  The default is
1274 @code{message-send-news}.
1275
1276 @item message-post-method
1277 @vindex message-post-method
1278 Gnusish @dfn{select method} (see the Gnus manual for details) used for
1279 posting a prepared news message.
1280
1281 @end table
1282
1283
1284 @node Various Message Variables
1285 @section Various Message Variables
1286
1287 @table @code
1288 @item message-default-charset
1289 @vindex message-default-charset
1290 @cindex charset
1291 Symbol naming a @sc{mime} charset.  Non-ASCII characters in messages are
1292 assumed to be encoded using this charset.  The default is @code{nil},
1293 which means ask the user.  (This variable is used only on non-@sc{mule}
1294 Emacsen.  
1295 @xref{Charset Translation, , Charset Translation, emacs-mime, 
1296       Emacs MIME Manual}, for details on the @sc{mule}-to-@sc{mime}
1297 translation process.
1298
1299 @item message-signature-separator
1300 @vindex message-signature-separator
1301 Regexp matching the signature separator.  It is @samp{^-- *$} by
1302 default.
1303
1304 @item mail-header-separator
1305 @vindex mail-header-separator
1306 String used to separate the headers from the body.  It is @samp{--text
1307 follows this line--} by default.
1308
1309 @item message-directory
1310 @vindex message-directory
1311 Directory used by many mailey things.  The default is @file{~/Mail/}.
1312
1313 @item message-signature-setup-hook
1314 @vindex message-signature-setup-hook
1315 Hook run when initializing the message buffer.  It is run after the
1316 headers have been inserted but before the signature has been inserted.
1317
1318 @item message-setup-hook
1319 @vindex message-setup-hook
1320 Hook run as the last thing when the message buffer has been initialized,
1321 but before yanked text is inserted.
1322
1323 @item message-header-setup-hook
1324 @vindex message-header-setup-hook
1325 Hook called narrowed to the headers after initializing the headers.
1326
1327 For instance, if you're running Gnus and wish to insert a
1328 @samp{Mail-Copies-To} header in all your news articles and all messages
1329 you send to mailing lists, you could do something like the following:
1330
1331 @lisp
1332 (defun my-message-header-setup-hook ()
1333   (let ((group (or gnus-newsgroup-name "")))
1334     (when (or (message-fetch-field "newsgroups")
1335               (gnus-group-find-parameter group 'to-address)
1336               (gnus-group-find-parameter group 'to-list))
1337       (insert "Mail-Copies-To: never\n"))))
1338
1339 (add-hook 'message-header-setup-hook
1340           'my-message-header-setup-hook)
1341 @end lisp
1342
1343 @item message-send-hook
1344 @vindex message-send-hook
1345 Hook run before sending messages.
1346
1347 If you want to add certain headers before sending, you can use the
1348 @code{message-add-header} function in this hook.  For instance:
1349 @findex message-add-header
1350
1351 @lisp
1352 (add-hook 'message-send-hook 'my-message-add-content)
1353 (defun my-message-add-content ()
1354   (message-add-header "X-In-No-Sense: Nonsense")
1355   (message-add-header "X-Whatever: no"))
1356 @end lisp
1357
1358 This function won't add the header if the header is already present.
1359
1360 @item message-send-mail-hook
1361 @vindex message-send-mail-hook
1362 Hook run before sending mail messages.
1363
1364 @item message-send-news-hook
1365 @vindex message-send-news-hook
1366 Hook run before sending news messages.
1367
1368 @item message-sent-hook
1369 @vindex message-sent-hook
1370 Hook run after sending messages.
1371
1372 @item message-mode-syntax-table
1373 @vindex message-mode-syntax-table
1374 Syntax table used in message mode buffers.
1375
1376 @item message-send-method-alist
1377 @vindex message-send-method-alist
1378
1379 Alist of ways to send outgoing messages.  Each element has the form
1380
1381 @lisp
1382 (TYPE PREDICATE FUNCTION)
1383 @end lisp
1384
1385 @table @var
1386 @item type
1387 A symbol that names the method.
1388
1389 @item predicate
1390 A function called without any parameters to determine whether the
1391 message is a message of type @var{type}.
1392
1393 @item function
1394 A function to be called if @var{predicate} returns non-@code{nil}.
1395 @var{function} is called with one parameter -- the prefix.
1396 @end table
1397
1398 @lisp
1399 ((news message-news-p message-send-via-news)
1400  (mail message-mail-p message-send-via-mail))
1401 @end lisp
1402
1403
1404
1405 @end table
1406
1407
1408
1409 @node Sending Variables
1410 @section Sending Variables
1411
1412 @table @code
1413
1414 @item message-fcc-handler-function
1415 @vindex message-fcc-handler-function
1416 A function called to save outgoing articles.  This function will be
1417 called with the name of the file to store the article in.  The default
1418 function is @code{message-output} which saves in Unix mailbox format.
1419
1420 @item message-courtesy-message
1421 @vindex message-courtesy-message
1422 When sending combined messages, this string is inserted at the start of
1423 the mailed copy.  If the string contains the format spec @samp{%s}, the
1424 newsgroups the article has been posted to will be inserted there.  If
1425 this variable is @code{nil}, no such courtesy message will be added.
1426 The default value is @samp{"The following message is a courtesy copy of
1427 an article\nthat has been posted to %s as well.\n\n"}.
1428
1429 @end table
1430
1431
1432 @node Message Buffers
1433 @section Message Buffers
1434
1435 Message will generate new buffers with unique buffer names when you
1436 request a message buffer.  When you send the message, the buffer isn't
1437 normally killed off.  Its name is changed and a certain number of old
1438 message buffers are kept alive.
1439
1440 @table @code
1441 @item message-generate-new-buffers
1442 @vindex message-generate-new-buffers
1443 If non-@code{nil}, generate new buffers.  The default is @code{t}.  If
1444 this is a function, call that function with three parameters: The type,
1445 the to address and the group name.  (Any of these may be @code{nil}.)
1446 The function should return the new buffer name.
1447
1448 @item message-use-multi-frames
1449 @vindex message-use-multi-frames
1450 If non-@code{nil}, generate new frames. The default is @code{nil}.
1451
1452 @item message-delete-frame-on-exit
1453 @vindex message-delete-frame-on-exit
1454 The @code{message-delete-frame-on-exit} variable says whether to delete
1455 the frame after sending the message or killing the message buffer. If it
1456 is @code{nil} (which is the default), don't delete the frame. If it is
1457 @code{ask}, ask wheter to delete the frame. If it is @code{t}, always
1458 delete the frame.
1459
1460 @item message-max-buffers
1461 @vindex message-max-buffers
1462 This variable says how many old message buffers to keep.  If there are
1463 more message buffers than this, the oldest buffer will be killed.  The
1464 default is 10.  If this variable is @code{nil}, no old message buffers
1465 will ever be killed.
1466
1467 @item message-send-rename-function
1468 @vindex message-send-rename-function
1469 After sending a message, the buffer is renamed from, for instance,
1470 @samp{*reply to Lars*} to @samp{*sent reply to Lars*}.  If you don't
1471 like this, set this variable to a function that renames the buffer in a
1472 manner you like.  If you don't want to rename the buffer at all, you can
1473 say:
1474
1475 @lisp
1476 (setq message-send-rename-function 'ignore)
1477 @end lisp
1478
1479 @item message-kill-buffer-on-exit
1480 @findex message-kill-buffer-on-exit
1481 If non-@code{nil}, kill the buffer immediately on exit.
1482
1483 @end table
1484
1485
1486 @node Message Actions
1487 @section Message Actions
1488
1489 When Message is being used from a news/mail reader, the reader is likely
1490 to want to perform some task after the message has been sent.  Perhaps
1491 return to the previous window configuration or mark an article as
1492 replied.
1493
1494 @vindex message-kill-actions
1495 @vindex message-postpone-actions
1496 @vindex message-exit-actions
1497 @vindex message-send-actions
1498 The user may exit from the message buffer in various ways.  The most
1499 common is @kbd{C-c C-c}, which sends the message and exits.  Other
1500 possibilities are @kbd{C-c C-s} which just sends the message, @kbd{C-c
1501 C-d} which postpones the message editing and buries the message buffer,
1502 and @kbd{C-c C-k} which kills the message buffer.  Each of these actions
1503 have lists associated with them that contains actions to be executed:
1504 @code{message-send-actions}, @code{message-exit-actions},
1505 @code{message-postpone-actions}, and @code{message-kill-actions}.
1506
1507 Message provides a function to interface with these lists:
1508 @code{message-add-action}.  The first parameter is the action to be
1509 added, and the rest of the arguments are which lists to add this action
1510 to.  Here's an example from Gnus:
1511
1512 @lisp
1513   (message-add-action
1514    `(set-window-configuration ,(current-window-configuration))
1515    'exit 'postpone 'kill)
1516 @end lisp
1517
1518 This restores the Gnus window configuration when the message buffer is
1519 killed, postponed or exited.
1520
1521 An @dfn{action} can be either: a normal function, or a list where the
1522 @code{car} is a function and the @code{cdr} is the list of arguments, or
1523 a form to be @code{eval}ed.
1524
1525
1526 @node Compatibility
1527 @chapter Compatibility
1528 @cindex compatibility
1529
1530 Message uses virtually only its own variables---older @code{mail-}
1531 variables aren't consulted.  To force Message to take those variables
1532 into account, you can put the following in your @code{.emacs} file:
1533
1534 @lisp
1535 (require 'messcompat)
1536 @end lisp
1537
1538 This will initialize many Message variables from the values in the
1539 corresponding mail variables.
1540
1541
1542 @node Appendices
1543 @chapter Appendices
1544
1545 @menu
1546 * Responses::          Standard rules for determining where responses go.
1547 @end menu
1548
1549
1550 @node Responses
1551 @section Responses
1552
1553 To determine where a message is to go, the following algorithm is used
1554 by default.
1555
1556 @table @dfn
1557 @item reply
1558 A @dfn{reply} is when you want to respond @emph{just} to the person who
1559 sent the message via mail.  There will only be one recipient.  To
1560 determine who the recipient will be, the following headers are
1561 consulted, in turn:
1562
1563 @table @code
1564 @item Reply-To
1565
1566 @item From
1567 @end table
1568
1569
1570 @item wide reply
1571 A @dfn{wide reply} is a mail response that includes @emph{all} entities
1572 mentioned in the message you are responded to.  All mailboxes from the
1573 following headers will be concatenated to form the outgoing
1574 @code{To}/@code{Cc} headers:
1575
1576 @table @code
1577 @item From
1578 (unless there's a @code{Reply-To}, in which case that is used instead).
1579
1580 @item Cc
1581
1582 @item To
1583 @end table
1584
1585 If a @code{Mail-Copies-To} header is present, it will also be included
1586 in the list of mailboxes.  If this header is @samp{never}, that means
1587 that the @code{From} (or @code{Reply-To}) mailbox will be suppressed.
1588
1589
1590 @item followup
1591 A @dfn{followup} is a response sent via news.  The following headers
1592 (listed in order of precedence) determine where the response is to be
1593 sent:
1594
1595 @table @code
1596
1597 @item Followup-To
1598
1599 @item Newsgroups
1600
1601 @end table
1602
1603 If a @code{Mail-Copies-To} header is present, it will be used as the
1604 basis of the new @code{Cc} header, except if this header is
1605 @samp{never}.
1606
1607 @end table
1608
1609
1610
1611 @node Index
1612 @chapter Index
1613 @printindex cp
1614
1615 @node Key Index
1616 @chapter Key Index
1617 @printindex ky
1618
1619 @summarycontents
1620 @contents
1621 @bye
1622
1623 @c End: