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