Update.
[elisp/gnus.git-] / texi / message.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename message
4 @settitle Message 6.10.038 Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @c @direntry
9 @c * Message: (message).   Mail and news composition mode that goes with Gnus.
10 @c @end direntry
11 @iftex
12 @finalout
13 @end iftex
14 @setchapternewpage odd
15
16 @ifinfo
17
18 This file documents Message, the Emacs message composition mode.
19
20 Copyright (C) 1996,97,98 Free Software Foundation, Inc.
21
22 Permission is granted to make and distribute verbatim copies of
23 this manual provided the copyright notice and this permission notice
24 are preserved on all copies.
25
26 @ignore
27 Permission is granted to process this file through Tex and print the
28 results, provided the printed document carries copying permission
29 notice identical to this one except for the removal of this paragraph
30 (this paragraph not being relevant to the printed manual).
31
32 @end ignore
33 Permission is granted to copy and distribute modified versions of this
34 manual under the conditions for verbatim copying, provided also that the
35 entire resulting derived work is distributed under the terms of a
36 permission notice identical to this one.
37
38 Permission is granted to copy and distribute translations of this manual
39 into another language, under the above conditions for modified versions.
40 @end ifinfo
41
42 @tex
43
44 @titlepage
45 @title Message 6.10.038 Manual
46
47 @author by Lars Magne Ingebrigtsen
48 @page
49
50 @vskip 0pt plus 1filll
51 Copyright @copyright{} 1996 Free Software Foundation, Inc. 
52
53 Permission is granted to make and distribute verbatim copies of
54 this manual provided the copyright notice and this permission notice
55 are preserved on all copies.
56
57 Permission is granted to copy and distribute modified versions of this
58 manual under the conditions for verbatim copying, provided that the
59 entire resulting derived work is distributed under the terms of a
60 permission notice identical to this one.
61
62 Permission is granted to copy and distribute translations of this manual
63 into another language, under the above conditions for modified versions.
64
65 @end titlepage
66 @page
67
68 @end tex
69
70 @node Top
71 @top Message
72
73 All message composition from Gnus (both mail and news) takes place in
74 Message mode buffers.
75
76 @menu
77 * Interface::         Setting up message buffers.
78 * Commands::          Commands you can execute in message mode buffers.
79 * Variables::         Customizing the message buffers.
80 * Compatibility::     Making Message backwards compatible.
81 * Appendices::        More technical things.
82 * Index::             Variable, function and concept index.
83 * Key Index::         List of Message mode keys.
84 @end menu
85
86 This manual corresponds to Message 6.10.038.  Message is
87 distributed with the Gnus distribution bearing the same version number
88 as this manual.
89
90
91 @node Interface
92 @chapter Interface
93
94 When a program (or a person) wants to respond to a message -- reply,
95 follow up, forward, cancel -- the program (or person) should just put
96 point in the buffer where the message is and call the required command.
97 @code{Message} will then pop up a new @code{message} mode buffer with
98 appropriate headers filled out, and the user can edit the message before
99 sending it.
100
101 @menu
102 * New Mail Message::     Editing a brand new mail message.
103 * New News Message::     Editing a brand new news message.
104 * Reply::                Replying via mail.
105 * Wide Reply::           Responding to all people via mail.
106 * Followup::             Following up via news.
107 * Canceling News::       Canceling a news article.
108 * Superseding::          Superseding a message.
109 * Forwarding::           Forwarding a message via news or mail.
110 * Resending::            Resending a mail message.
111 * Bouncing::             Bouncing a mail message.
112 @end menu
113
114
115 @node New Mail Message
116 @section New Mail Message
117
118 @findex message-mail
119 The @code{message-mail} command pops up a new message buffer.  
120
121 Two optional parameters are accepted: The first will be used as the
122 @code{To} header and the second as the @code{Subject} header.  If these
123 are @code{nil}, those two headers will be empty.
124
125
126 @node New News Message
127 @section New News Message
128
129 @findex message-news
130 The @code{message-news} command pops up a new message buffer.  
131
132 This function accepts two optional parameters.  The first will be used
133 as the @code{Newsgroups} header and the second as the @code{Subject}
134 header.  If these are @code{nil}, those two headers will be empty.
135
136
137 @node Reply
138 @section Reply
139
140 @findex message-reply
141 The @code{message-reply} function pops up a message buffer that's a
142 reply to the message in the current buffer.
143
144 @vindex message-reply-to-function
145 Message uses the normal methods to determine where replies are to go
146 (@pxref{Responses}), but you can change the behavior to suit your needs
147 by fiddling with the @code{message-reply-to-function} variable.
148
149 If you want the replies to go to the @code{Sender} instead of the
150 @code{From}, you could do something like this:
151
152 @lisp
153 (setq message-reply-to-function
154       (lambda ()
155        (cond ((equal (mail-fetch-field "from") "somebody")
156                (mail-fetch-field "sender"))     
157              (t 
158               nil))))
159 @end lisp
160
161 This function will be called narrowed to the head of the article that is
162 being replied to.
163
164 As you can see, this function should return a string if it has an
165 opinion as to what the To header should be.  If it does not, it should
166 just return @code{nil}, and the normal methods for determining the To
167 header will be used.
168
169 This function can also return a list.  In that case, each list element
170 should be a cons, where the car should be the name of an header
171 (eg. @code{Cc}) and the cdr should be the header value
172 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
173 the head of the outgoing mail. 
174
175
176 @node Wide Reply
177 @section Wide Reply
178
179 @findex message-wide-reply
180 The @code{message-wide-reply} pops up a message buffer that's a wide
181 reply to the message in the current buffer.  A @dfn{wide reply} is a
182 reply that goes out to all people listed in the @code{To}, @code{From}
183 (or @code{Reply-to}) and @code{Cc} headers.
184
185 @vindex message-wide-reply-to-function
186 Message uses the normal methods to determine where wide replies are to go,
187 but you can change the behavior to suit your needs by fiddling with the
188 @code{message-wide-reply-to-function}.  It is used in the same way as
189 @code{message-reply-to-function} (@pxref{Reply}). 
190
191 @findex rmail-dont-reply-to-names
192 Addresses that match the @code{rmail-dont-reply-to-names} regular
193 expression will be removed from the @code{Cc} header.
194
195
196 @node Followup
197 @section Followup
198
199 @findex message-followup
200 The @code{message-followup} command pops up a message buffer that's a
201 followup to the message in the current buffer.
202
203 @vindex message-followup-to-function
204 Message uses the normal methods to determine where followups are to go,
205 but you can change the behavior to suit your needs by fiddling with the
206 @code{message-followup-to-function}.  It is used in the same way as
207 @code{message-reply-to-function} (@pxref{Reply}).
208
209 @vindex message-use-followup-to
210 The @code{message-use-followup-to} variable says what to do about
211 @code{Followup-To} headers.  If it is @code{use}, always use the value.
212 If it is @code{ask} (which is the default), ask whether to use the
213 value.  If it is @code{t}, use the value unless it is @samp{poster}.  If
214 it is @code{nil}, don't use the value.
215
216
217 @node Canceling News
218 @section Canceling News
219
220 @findex message-cancel-news
221 The @code{message-cancel-news} command cancels the article in the
222 current buffer.
223
224
225 @node Superseding
226 @section Superseding
227
228 @findex message-supersede
229 The @code{message-supersede} command pops up a message buffer that will
230 supersede the message in the current buffer.
231
232 @vindex message-ignored-supersedes-headers
233 Headers matching the @code{message-ignored-supersedes-headers} are
234 removed before popping up the new message buffer.  The default is@*
235 @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
236 ^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:}.
237
238
239
240 @node Forwarding
241 @section Forwarding
242
243 @findex message-forward
244 The @code{message-forward} command pops up a message buffer to forward
245 the message in the current buffer.  If given a prefix, forward using
246 news.
247
248 @table @code
249 @item message-forward-start-separator
250 @vindex message-forward-start-separator
251 Delimiter inserted before forwarded messages.  The default is@*
252 @samp{------- Start of forwarded message -------\n}. 
253
254 @vindex message-forward-end-separator
255 @item message-forward-end-separator
256 @vindex message-forward-end-separator
257 Delimiter inserted after forwarded messages.  The default is@*
258 @samp{------- End of forwarded message -------\n}. 
259
260 @item message-signature-before-forwarded-message
261 @vindex message-signature-before-forwarded-message
262 If this variable is @code{t}, which it is by default, your personal
263 signature will be inserted before the forwarded message.  If not, the
264 forwarded message will be inserted first in the new mail.
265
266 @item message-included-forward-headers
267 @vindex message-included-forward-headers
268 Regexp matching header lines to be included in forwarded messages.  
269
270 @item message-make-forward-subject-function
271 @vindex message-make-forward-subject-function
272 A list of functions that are called to generate a subject header for
273 forwarded messages.  The subject generated by the previous function is
274 passed into each successive function.
275
276 The provided functions are:
277
278 @table @code
279 @item message-forward-subject-author-subject
280 @findex message-forward-subject-author-subject
281 Source of article (author or newsgroup), in brackets followed by the
282 subject.
283
284 @item message-forward-subject-fwd
285 Subject of article with @samp{Fwd:} prepended to it.
286 @end table
287
288 @item message-wash-forwarded-subjects
289 @vindex message-wash-forwarded-subjects
290 If this variable is @code{t}, the subjects of forwarded messages have
291 the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:}, 
292 @samp{(fwd)}) removed before the new subject is
293 constructed.  The default value is @code{nil}.
294
295 @end table
296
297
298 @node Resending
299 @section Resending
300
301 @findex message-resend
302 The @code{message-resend} command will prompt the user for an address
303 and resend the message in the current buffer to that address.
304
305 @vindex message-ignored-resent-headers
306 Headers that match the @code{message-ignored-resent-headers} regexp will
307 be removed before sending the message.  The default is
308 @samp{^Return-receipt}. 
309
310
311 @node Bouncing
312 @section Bouncing
313
314 @findex message-bounce
315 The @code{message-bounce} command will, if the current buffer contains a
316 bounced mail message, pop up a message buffer stripped of the bounce
317 information.  A @dfn{bounced message} is typically a mail you've sent
318 out that has been returned by some @code{mailer-daemon} as
319 undeliverable. 
320
321 @vindex message-ignored-bounced-headers
322 Headers that match the @code{message-ignored-bounced-headers} regexp
323 will be removed before popping up the buffer.  The default is
324 @samp{^\\(Received\\|Return-Path\\):}.
325
326
327 @node Commands
328 @chapter Commands
329
330 @menu
331 * Header Commands::     Commands for moving to headers.
332 * Movement::            Moving around in message buffers.
333 * Insertion::           Inserting things into message buffers.
334 * Various Commands::    Various things.
335 * Sending::             Actually sending the message.
336 * Mail Aliases::        How to use mail aliases.
337 @end menu
338
339
340 @node Header Commands
341 @section Header Commands
342
343 All these commands move to the header in question.  If it doesn't exist,
344 it will be inserted.
345
346 @table @kbd
347
348 @item C-c ?
349 @kindex C-c ?
350 @findex message-goto-to
351 Describe the message mode.
352
353 @item C-c C-f C-t
354 @kindex C-c C-f C-t 
355 @findex message-goto-to
356 Go to the @code{To} header (@code{message-goto-to}).
357
358 @item C-c C-f C-b
359 @kindex C-c C-f C-b 
360 @findex message-goto-bcc
361 Go to the @code{Bcc} header (@code{message-goto-bcc}).
362
363 @item C-c C-f C-f
364 @kindex C-c C-f C-f 
365 @findex message-goto-fcc
366 Go to the @code{Fcc} header (@code{message-goto-fcc}).
367
368 @item C-c C-f C-c
369 @kindex C-c C-f C-c 
370 @findex message-goto-cc
371 Go to the @code{Cc} header (@code{message-goto-cc}).
372
373 @item C-c C-f C-s
374 @kindex C-c C-f C-s 
375 @findex message-goto-subject
376 Go to the @code{Subject} header (@code{message-goto-subject}).
377
378 @item C-c C-f C-r
379 @kindex C-c C-f C-r 
380 @findex message-goto-reply-to
381 Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
382
383 @item C-c C-f C-n
384 @kindex C-c C-f C-n 
385 @findex message-goto-newsgroups
386 Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
387
388 @item C-c C-f C-d
389 @kindex C-c C-f C-d 
390 @findex message-goto-distribution
391 Go to the @code{Distribution} header (@code{message-goto-distribution}).
392
393 @item C-c C-f C-o
394 @kindex C-c C-f C-o 
395 @findex message-goto-followup-to
396 Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
397
398 @item C-c C-f C-k
399 @kindex C-c C-f C-k 
400 @findex message-goto-keywords
401 Go to the @code{Keywords} header (@code{message-goto-keywords}).
402
403 @item C-c C-f C-u
404 @kindex C-c C-f C-u 
405 @findex message-goto-summary
406 Go to the @code{Summary} header (@code{message-goto-summary}).
407
408 @end table
409
410
411 @node Movement
412 @section Movement
413
414 @table @kbd
415 @item C-c C-b
416 @kindex C-c C-b 
417 @findex message-goto-body
418 Move to the beginning of the body of the message
419 (@code{message-goto-body}). 
420
421 @item C-c C-i
422 @kindex C-c C-i 
423 @findex message-goto-signature
424 Move to the signature of the message (@code{message-goto-signature}).
425
426 @end table
427
428
429 @node Insertion
430 @section Insertion
431
432 @table @kbd
433
434 @item C-c C-y
435 @kindex C-c C-y 
436 @findex message-yank-original
437 Yank the message in the buffer @code{gnus-article-copy} into the message
438 buffer. Normally @code{gnus-article-copy} is what you are replying to
439 (@code{message-yank-original}).
440
441 @item C-c C-q
442 @kindex C-c C-q 
443 @findex message-fill-yanked-message
444 Fill the yanked message (@code{message-fill-yanked-message}).  Warning:
445 Can severely mess up the yanked text if its quoting conventions are
446 strange.  You'll quickly get a feel for when it's safe, though.  Anyway,
447 just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
448 all right.
449
450
451 @item C-c C-w
452 @kindex C-c C-w 
453 @findex message-insert-signature
454 Insert a signature at the end of the buffer
455 (@code{message-insert-signature}).  
456
457 @end table
458
459 @table @code
460 @item message-ignored-cited-headers
461 @vindex message-ignored-cited-headers
462 All headers that match this regexp will be removed from yanked
463 messages.  The default is @samp{.}, which means that all headers will be
464 removed.
465
466 @item message-citation-line-function
467 @vindex message-citation-line-function
468 Function called to insert the citation line.  The default is
469 @code{message-insert-citation-line}, which will lead to citation lines
470 that look like:
471
472 @example
473 Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
474 @end example
475
476 Point will be at the beginning of the body of the message when this
477 function is called.
478
479 @item message-yank-prefix
480 @vindex message-yank-prefix
481 @cindex yanking
482 @cindex quoting
483 When you are replying to or following up an article, you normally want
484 to quote the person you are answering.  Inserting quoted text is done by
485 @dfn{yanking}, and each quoted line you yank will have
486 @code{message-yank-prefix} prepended to it.  The default is @samp{> }.
487 If it is @code{nil}, just indent the message.
488
489 @item message-indentation-spaces
490 @vindex message-indentation-spaces
491 Number of spaces to indent yanked messages.
492
493 @item message-cite-function
494 @vindex message-cite-function
495 @findex message-cite-original
496 @findex sc-cite-original
497 @findex message-cite-original-without-signature
498 @cindex Supercite
499 Function for citing an original message.  The default is
500 @code{message-cite-original}, which simply inserts the original message
501 and prepends @samp{> } to each line.
502 @code{message-cite-original-without-signature} does the same, but elides
503 the signature.  You can also set it to @code{sc-cite-original} to use
504 Supercite.
505
506 @item message-indent-citation-function
507 @vindex message-indent-citation-function
508 Function for modifying a citation just inserted in the mail buffer.
509 This can also be a list of functions.  Each function can find the
510 citation between @code{(point)} and @code{(mark t)}.  And each function
511 should leave point and mark around the citation text as modified.
512
513 @item message-signature
514 @vindex message-signature
515 String to be inserted at the end of the message buffer.  If @code{t}
516 (which is the default), the @code{message-signature-file} file will be
517 inserted instead.  If a function, the result from the function will be
518 used instead.  If a form, the result from the form will be used instead.
519 If this variable is @code{nil}, no signature will be inserted at all.
520
521 @item message-signature-file
522 @vindex message-signature-file
523 File containing the signature to be inserted at the end of the buffer.
524 The default is @samp{~/.signature}.
525
526 @end table
527
528 Note that RFC1036bis says that a signature should be preceded by the three
529 characters @samp{-- } on a line by themselves.  This is to make it
530 easier for the recipient to automatically recognize and process the
531 signature.  So don't remove those characters, even though you might feel
532 that they ruin your beautiful design, like, totally.
533
534 Also note that no signature should be more than four lines long.
535 Including ASCII graphics is an efficient way to get everybody to believe
536 that you are silly and have nothing important to say.
537
538
539
540 @node Various Commands
541 @section Various Commands
542
543 @table @kbd
544
545 @item C-c C-r
546 @kindex C-c C-r 
547 @findex message-caesar-buffer-body
548 Caesar rotate (aka. rot13) the current message
549 (@code{message-caesar-buffer-body}).  If narrowing is in effect, just
550 rotate the visible portion of the buffer.  A numerical prefix says how
551 many places to rotate the text.  The default is 13.
552
553 @item C-c C-e
554 @kindex C-c C-e
555 @findex message-elide-region
556 Elide the text between point and mark (@code{message-elide-region}).
557 The text is killed and an ellipsis (@samp{[...]}) will be inserted in
558 its place.
559
560 @item C-c C-z
561 @kindex C-c C-x
562 @findex message-kill-to-signature
563 Kill all the text up to the signature, or if that's missing, up to the
564 end of the message (@code{message-kill-to-signature}).
565
566 @item C-c C-v
567 @kindex C-c C-v
568 @findex message-delete-not-region
569 Delete all text in the body of the message that is outside the region
570 (@code{message-delete-not-region}).
571
572 @item M-RET
573 @kindex M-RET
574 @kindex message-newline-and-reformat
575 Insert four newlines, and then reformat if inside quoted text.
576
577 Here's an example:
578
579 @example
580 > This is some quoted text.  And here's more quoted text.
581 @end example
582
583 If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
584
585 @example
586 > This is some quoted text.
587
588 *
589
590 > And here's more quoted text.
591 @end example
592
593 @samp{*} says where point will be placed.  
594
595 @item C-c C-t
596 @kindex C-c C-t 
597 @findex message-insert-to
598 Insert a @code{To} header that contains the @code{Reply-To} or
599 @code{From} header of the message you're following up
600 (@code{message-insert-to}). 
601
602 @item C-c C-n
603 @kindex C-c C-n 
604 @findex message-insert-newsgroups
605 Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
606 or @code{Newsgroups} header of the article you're replying to
607 (@code{message-insert-newsgroups}).
608
609 @item C-c M-r
610 @kindex C-c M-r
611 @findex message-rename-buffer
612 Rename the buffer (@code{message-rename-buffer}).  If given a prefix,
613 prompt for a new buffer name.
614
615 @end table
616
617
618 @node Sending
619 @section Sending
620
621 @table @kbd
622 @item C-c C-c
623 @kindex C-c C-c 
624 @findex message-send-and-exit
625 Send the message and bury the current buffer
626 (@code{message-send-and-exit}). 
627
628 @item C-c C-s
629 @kindex C-c C-s 
630 @findex message-send
631 Send the message (@code{message-send}). 
632
633 @item C-c C-d
634 @kindex C-c C-d
635 @findex message-dont-send
636 Bury the message buffer and exit (@code{message-dont-send}).
637
638 @item C-c C-k
639 @kindex C-c C-k
640 @findex message-kill-buffer
641 Kill the message buffer and exit (@code{message-kill-buffer}).
642
643 @end table
644
645
646
647 @node Mail Aliases
648 @section Mail Aliases
649 @cindex mail aliases
650 @cindex aliases
651
652 @vindex message-mail-alias-type
653 The @code{message-mail-alias-type} variable controls what type of mail
654 alias expansion to use.  Currently only one form is supported---Message
655 uses @code{mailabbrev} to handle mail aliases.  If this variable is
656 @code{nil}, no mail alias expansion will be performed.
657
658 @code{mailabbrev} works by parsing the @file{/etc/mailrc} and
659 @file{~/.mailrc} files.  These files look like:
660
661 @example
662 alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
663 alias ding "ding@@ifi.uio.no (ding mailing list)"
664 @end example
665
666 After adding lines like this to your @file{~/.mailrc} file, you should
667 be able to just write @samp{lmi} in the @code{To} or @code{Cc} (and so
668 on) headers and press @kbd{SPC} to expand the alias.
669
670 No expansion will be performed upon sending of the message---all
671 expansions have to be done explicitly.
672
673
674
675 @node Variables
676 @chapter Variables
677
678 @menu
679 * Message Headers::             General message header stuff.
680 * Mail Headers::                Customizing mail headers.
681 * Mail Variables::              Other mail variables.
682 * News Headers::                Customizing news headers.
683 * News Variables::              Other news variables.
684 * Various Message Variables::   Other message variables.
685 * Sending Variables::           Variables for sending.
686 * Message Buffers::             How Message names its buffers.
687 * Message Actions::             Actions to be performed when exiting.
688 @end menu
689
690
691 @node Message Headers
692 @section Message Headers
693
694 Message is quite aggressive on the message generation front.  It has to
695 be -- it's a combined news and mail agent.  To be able to send combined
696 messages, it has to generate all headers itself (instead of letting the
697 mail/news system do it) to ensure that mail and news copies of messages
698 look sufficiently similar.
699
700 @table @code
701
702 @item message-generate-headers-first
703 @vindex message-generate-headers-first
704 If non-@code{nil}, generate all headers before starting to compose the
705 message.  
706
707 @item message-from-style
708 @vindex message-from-style
709 Specifies how @code{From} headers should look.  There are four valid
710 values:
711
712 @table @code
713 @item nil
714 Just the address -- @samp{king@@grassland.com}.
715
716 @item parens
717 @samp{king@@grassland.com (Elvis Parsley)}.
718
719 @item angles
720 @samp{Elvis Parsley <king@@grassland.com>}.
721
722 @item default
723 Look like @code{angles} if that doesn't require quoting, and
724 @code{parens} if it does.  If even @code{parens} requires quoting, use
725 @code{angles} anyway.
726
727 @end table
728
729 @item message-deletable-headers
730 @vindex message-deletable-headers
731 Headers in this list that were previously generated by Message will be
732 deleted before posting.  Let's say you post an article.  Then you decide
733 to post it again to some other group, you naughty boy, so you jump back
734 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
735 ship it off again.  By default, this variable makes sure that the old
736 generated @code{Message-ID} is deleted, and a new one generated.  If
737 this isn't done, the entire empire would probably crumble, anarchy would
738 prevail, and cats would start walking on two legs and rule the world.
739 Allegedly.  
740
741 @item message-default-headers
742 @vindex message-default-headers
743 This string is inserted at the end of the headers in all message
744 buffers.
745
746 @item message-subject-re-regexp
747 @vindex message-subject-re-regexp
748 Responses to messages have subjects that start with @samp{Re: }.  This
749 is @emph{not} an abbreviation of the English word ``response'', but in
750 Latin, and means ``in response to''.  Some illiterate nincompoops have
751 failed to grasp this fact, and have ``internationalized'' their software
752 to use abonimations like @samp{Aw: } (``antwort'') or @samp{Sv: }
753 (``svar'') instead, which is meaningless and evil.  However, you may
754 have to deal with users that use these evil tools, in which case you may
755 set this variable to a regexp that matches these prefixes.  Myself, I
756 just throw away non-compliant mail.
757
758 @end table
759
760
761 @node Mail Headers
762 @section Mail Headers
763
764 @table @code
765 @item message-required-mail-headers
766 @vindex message-required-mail-headers
767 @xref{News Headers}, for the syntax of this variable.  It is
768 @code{(From Date Subject (optional . In-Reply-To) Message-ID Lines
769 (optional . X-Mailer))} by default.
770
771 @item message-ignored-mail-headers
772 @vindex message-ignored-mail-headers
773 Regexp of headers to be removed before mailing.  The default is
774 @samp{^[GF]cc:\\|^Resent-Fcc:}.
775
776 @item message-default-mail-headers
777 @vindex message-default-mail-headers
778 This string is inserted at the end of the headers in all message
779 buffers that are initialized as mail.
780
781 @end table
782
783
784 @node Mail Variables
785 @section Mail Variables 
786
787 @table @code
788 @item message-send-mail-function
789 @vindex message-send-mail-function
790 Function used to send the current buffer as mail.  The default is
791 @code{message-send-mail-with-sendmail}.   If you prefer using MH
792 instead, set this variable to @code{message-send-mail-with-mh}.
793
794 @item message-mh-deletable-headers
795 @vindex message-mh-deletable-headers
796 Most versions of MH doesn't like being fed messages that contain the
797 headers in this variable.  If this variable is non-@code{nil} (which is
798 the default), these headers will be removed before mailing when sending
799 messages via MH.  Set it to @code{nil} if your MH can handle these
800 headers.
801
802 @end table
803
804
805 @node News Headers
806 @section News Headers
807
808 @vindex message-required-news-headers
809 @code{message-required-news-headers} a list of header symbols.  These
810 headers will either be automatically generated, or, if that's
811 impossible, they will be prompted for.  The following symbols are valid:
812
813 @table @code
814
815 @item From
816 @cindex From
817 @findex user-full-name
818 @findex user-mail-address
819 This required header will be filled out with the result of the
820 @code{message-make-from} function, which depends on the
821 @code{message-from-style}, @code{user-full-name},
822 @code{user-mail-address} variables.
823
824 @item Subject
825 @cindex Subject
826 This required header will be prompted for if not present already. 
827
828 @item Newsgroups
829 @cindex Newsgroups
830 This required header says which newsgroups the article is to be posted
831 to.  If it isn't present already, it will be prompted for.
832
833 @item Organization
834 @cindex organization
835 This optional header will be filled out depending on the
836 @code{message-user-organization} variable.
837 @code{message-user-organization-file} will be used if this variable is
838 @code{t}.  This variable can also be a string (in which case this string
839 will be used), or it can be a function (which will be called with no
840 parameters and should return a string to be used).
841
842 @item Lines
843 @cindex Lines
844 This optional header will be computed by Message.
845
846 @item Message-ID
847 @cindex Message-ID
848 @vindex mail-host-address
849 @findex system-name
850 @cindex Sun
851 This required header will be generated by Message.  A unique ID will be
852 created based on the date, time, user name and system name.  Message will
853 use @code{mail-host-address} as the fully qualified domain name (FQDN)
854 of the machine if that variable is defined.  If not, it will use
855 @code{system-name}, which doesn't report a FQDN on some machines --
856 notably Suns.
857
858 @item X-Newsreader
859 @cindex X-Newsreader
860 This optional header will be filled out according to the
861 @code{message-newsreader} local variable.
862
863 @item X-Mailer
864 This optional header will be filled out according to the
865 @code{message-mailer} local variable, unless there already is an
866 @code{X-Newsreader} header present.
867
868 @item In-Reply-To
869 This optional header is filled out using the @code{Date} and @code{From}
870 header of the article being replied to.
871
872 @item Expires
873 @cindex Expires
874 This extremely optional header will be inserted according to the
875 @code{message-expires} variable.  It is highly deprecated and shouldn't
876 be used unless you know what you're doing.
877
878 @item Distribution
879 @cindex Distribution
880 This optional header is filled out according to the
881 @code{message-distribution-function} variable.  It is a deprecated and
882 much misunderstood header.
883
884 @item Path
885 @cindex path
886 This extremely optional header should probably never be used.
887 However, some @emph{very} old servers require that this header is
888 present.  @code{message-user-path} further controls how this
889 @code{Path} header is to look.  If it is @code{nil}, use the server name
890 as the leaf node.  If it is a string, use the string.  If it is neither
891 a string nor @code{nil}, use the user name only.  However, it is highly
892 unlikely that you should need to fiddle with this variable at all.
893 @end table
894
895 @findex yow
896 @cindex Mime-Version
897 In addition, you can enter conses into this list.  The car of this cons
898 should be a symbol.  This symbol's name is the name of the header, and
899 the cdr can either be a string to be entered verbatim as the value of
900 this header, or it can be a function to be called.  This function should
901 return a string to be inserted.  For instance, if you want to insert
902 @code{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
903 into the list.  If you want to insert a funny quote, you could enter
904 something like @code{(X-Yow . yow)} into the list.  The function
905 @code{yow} will then be called without any arguments.
906
907 If the list contains a cons where the car of the cons is
908 @code{optional}, the cdr of this cons will only be inserted if it is
909 non-@code{nil}.
910
911 Other variables for customizing outgoing news articles:
912
913 @table @code
914
915 @item message-syntax-checks
916 @vindex message-syntax-checks
917 Controls what syntax checks should not be performed on outgoing posts.
918 To disable checking of long signatures, for instance, add
919
920 @lisp
921 (signature . disabled)
922 @end lisp
923
924 to this list.
925
926 Valid checks are:
927
928 @table @code
929 @item subject-cmsg 
930 Check the subject for commands.
931 @item sender
932 @cindex Sender
933 Insert a new @code{Sender} header if the @code{From} header looks odd. 
934 @item multiple-headers 
935 Check for the existence of multiple equal headers.
936 @item sendsys 
937 @cindex sendsys
938 Check for the existence of version and sendsys commands.
939 @item message-id
940 Check whether the @code{Message-ID} looks ok.
941 @item from
942 Check whether the @code{From} header seems nice.
943 @item long-lines 
944 @cindex long lines
945 Check for too long lines.
946 @item control-chars
947 Check for invalid characters.
948 @item size
949 Check for excessive size.
950 @item new-text
951 Check whether there is any new text in the messages.
952 @item signature
953 Check the length of the signature.
954 @item approved
955 @cindex approved
956 Check whether the article has an @code{Approved} header, which is
957 something only moderators should include.
958 @item empty
959 Check whether the article is empty.
960 @item invisible-text
961 Check whether there is any invisible text in the buffer.
962 @item empty-headers
963 Check whether any of the headers are empty.
964 @item existing-newsgroups
965 Check whether the newsgroups mentioned in the @code{Newsgroups} and 
966 @code{Followup-To} headers exist.
967 @item valid-newsgroups
968 Check whether the @code{Newsgroups} and @code{Followup-to} headers
969 are valid syntactically.
970 @item repeated-newsgroups
971 Check whether the @code{Newsgroups} and @code{Followup-to} headers
972 contains repeated group names.
973 @item shorten-followup-to
974 Check whether to add a @code{Followup-to} header to shorten the number
975 of groups to post to.
976 @end table
977
978 All these conditions are checked by default.
979
980 @item message-ignored-news-headers
981 @vindex message-ignored-news-headers
982 Regexp of headers to be removed before posting.  The default is@*
983 @samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:}.
984
985 @item message-default-news-headers
986 @vindex message-default-news-headers
987 This string is inserted at the end of the headers in all message
988 buffers that are initialized as news.
989
990 @end table
991
992
993 @node News Variables
994 @section News Variables
995
996 @table @code
997 @item message-send-news-function
998 @vindex message-send-news-function
999 Function used to send the current buffer as news.  The default is
1000 @code{message-send-news}. 
1001
1002 @item message-post-method
1003 @vindex message-post-method
1004 Gnusish @dfn{select method} (see the Gnus manual for details) used for
1005 posting a prepared news message.
1006
1007 @end table
1008
1009
1010 @node Various Message Variables
1011 @section Various Message Variables
1012
1013 @table @code
1014 @item message-signature-separator
1015 @vindex message-signature-separator
1016 Regexp matching the signature separator.  It is @samp{^-- *$} by
1017 default. 
1018
1019 @item mail-header-separator
1020 @vindex mail-header-separator
1021 String used to separate the headers from the body.  It is @samp{--text
1022 follows this line--} by default.
1023
1024 @item message-directory
1025 @vindex message-directory
1026 Directory used by many mailey things.  The default is @file{~/Mail/}. 
1027
1028 @item message-signature-setup-hook
1029 @vindex message-signature-setup-hook
1030 Hook run when initializing the message buffer.  It is run after the
1031 headers have been inserted but before the signature has been inserted. 
1032
1033 @item message-setup-hook
1034 @vindex message-setup-hook
1035 Hook run as the last thing when the message buffer has been initialized,
1036 but before yanked text is inserted.
1037
1038 @item message-header-setup-hook
1039 @vindex message-header-setup-hook
1040 Hook called narrowed to the headers after initializing the headers. 
1041
1042 For instance, if you're running Gnus and wish to insert a
1043 @samp{Mail-Copies-To} header in all your news articles and all messages
1044 you send to mailing lists, you could do something like the following:
1045
1046 @lisp
1047 (defun my-message-header-setup-hook ()
1048   (let ((group (or gnus-newsgroup-name "")))
1049     (when (or (message-fetch-field "newsgroups")
1050               (gnus-group-find-parameter group 'to-address)
1051               (gnus-group-find-parameter group 'to-list))
1052       (insert "Mail-Copies-To: never\n"))))
1053
1054 (add-hook 'message-header-setup-hook
1055           'my-message-header-setup-hook)
1056 @end lisp
1057
1058 @item message-send-hook
1059 @vindex message-send-hook
1060 Hook run before sending messages.
1061
1062 If you want to add certain headers before sending, you can use the
1063 @code{message-add-header} function in this hook.  For instance:
1064 @findex message-add-header
1065
1066 @lisp
1067 (add-hook 'message-send-hook 'my-message-add-content)
1068 (defun my-message-add-content ()
1069   (message-add-header
1070    "Mime-Version: 1.0"
1071    "Content-Type: text/plain"
1072    "Content-Transfer-Encoding: 7bit"))
1073 @end lisp
1074
1075 This function won't add the header if the header is already present.
1076
1077 @item message-send-mail-hook
1078 @vindex message-send-mail-hook
1079 Hook run before sending mail messages.
1080
1081 @item message-send-news-hook
1082 @vindex message-send-news-hook
1083 Hook run before sending news messages.
1084
1085 @item message-sent-hook
1086 @vindex message-sent-hook
1087 Hook run after sending messages.
1088
1089 @item message-mode-syntax-table
1090 @vindex message-mode-syntax-table
1091 Syntax table used in message mode buffers.
1092
1093 @item message-send-method-alist
1094 @vindex message-send-method-alist
1095
1096 Alist of ways to send outgoing messages.  Each element has the form
1097
1098 @lisp
1099 (TYPE PREDICATE FUNCTION)
1100 @end lisp
1101
1102 @table @var
1103 @item type
1104 A symbol that names the method.
1105
1106 @item predicate
1107 A function called without any parameters to determine whether the
1108 message is a message of type @var{type}.
1109
1110 @item function
1111 A function to be called if @var{predicate} returns non-@code{nil}.
1112 @var{function} is called with one parameter -- the prefix.
1113 @end table
1114
1115 @lisp
1116 ((news message-news-p message-send-via-news)
1117  (mail message-mail-p message-send-via-mail))
1118 @end lisp
1119
1120
1121
1122 @end table
1123
1124
1125
1126 @node Sending Variables
1127 @section Sending Variables
1128
1129 @table @code
1130
1131 @item message-fcc-handler-function 
1132 @vindex message-fcc-handler-function 
1133 A function called to save outgoing articles.  This function will be
1134 called with the name of the file to store the article in. The default
1135 function is @code{message-output} which saves in Unix mailbox format.
1136
1137 @item message-courtesy-message
1138 @vindex message-courtesy-message
1139 When sending combined messages, this string is inserted at the start of
1140 the mailed copy.  If the string contains the format spec @samp{%s}, the
1141 newsgroups the article has been posted to will be inserted there.  If
1142 this variable is @code{nil}, no such courtesy message will be added.
1143 The default value is @samp{"The following message is a courtesy copy of
1144 an article\nthat has been posted to %s as well.\n\n"}. 
1145
1146 @end table
1147
1148
1149 @node Message Buffers
1150 @section Message Buffers
1151
1152 Message will generate new buffers with unique buffer names when you
1153 request a message buffer.  When you send the message, the buffer isn't
1154 normally killed off.  Its name is changed and a certain number of old
1155 message buffers are kept alive.
1156
1157 @table @code
1158 @item message-generate-new-buffers
1159 @vindex message-generate-new-buffers
1160 If non-@code{nil}, generate new buffers.  The default is @code{t}.  If
1161 this is a function, call that function with three parameters: The type,
1162 the to address and the group name.  (Any of these may be @code{nil}.)
1163 The function should return the new buffer name.
1164
1165 @item message-use-multi-frames
1166 @vindex message-use-multi-frames
1167 If non-@code{nil}, generate new frames. The default is @code{nil}.
1168
1169 @item message-delete-frame-on-exit
1170 @vindex message-delete-frame-on-exit
1171 The @code{message-delete-frame-on-exit} variable says whether to delete
1172 the frame after sending the message or killing the message buffer. If it
1173 is @code{nil} (which is the default), don't delete the frame. If it is
1174 @code{ask}, ask wheter to delete the frame. If it is @code{t}, always
1175 delete the frame.
1176
1177 @item message-max-buffers
1178 @vindex message-max-buffers
1179 This variable says how many old message buffers to keep.  If there are
1180 more message buffers than this, the oldest buffer will be killed.  The
1181 default is 10.  If this variable is @code{nil}, no old message buffers
1182 will ever be killed.
1183
1184 @item message-send-rename-function
1185 @vindex message-send-rename-function
1186 After sending a message, the buffer is renamed from, for instance,
1187 @samp{*reply to Lars*} to @samp{*sent reply to Lars*}.  If you don't
1188 like this, set this variable to a function that renames the buffer in a
1189 manner you like.  If you don't want to rename the buffer at all, you can
1190 say:
1191
1192 @lisp
1193 (setq message-send-rename-function 'ignore)
1194 @end lisp
1195
1196 @item message-kill-buffer-on-exit
1197 @findex message-kill-buffer-on-exit
1198 If non-@code{nil}, kill the buffer immediately on exit.
1199
1200 @end table
1201
1202
1203 @node Message Actions
1204 @section Message Actions
1205
1206 When Message is being used from a news/mail reader, the reader is likely
1207 to want to perform some task after the message has been sent.  Perhaps
1208 return to the previous window configuration or mark an article as
1209 replied.  
1210
1211 @vindex message-kill-actions
1212 @vindex message-postpone-actions
1213 @vindex message-exit-actions
1214 @vindex message-send-actions
1215 The user may exit from the message buffer in various ways.  The most
1216 common is @kbd{C-c C-c}, which sends the message and exits.  Other
1217 possibilities are @kbd{C-c C-s} which just sends the message, @kbd{C-c
1218 C-d} which postpones the message editing and buries the message buffer,
1219 and @kbd{C-c C-k} which kills the message buffer.  Each of these actions
1220 have lists associated with them that contains actions to be executed:
1221 @code{message-send-actions}, @code{message-exit-actions},
1222 @code{message-postpone-actions}, and @code{message-kill-actions}.  
1223
1224 Message provides a function to interface with these lists:
1225 @code{message-add-action}.  The first parameter is the action to be
1226 added, and the rest of the arguments are which lists to add this action
1227 to.  Here's an example from Gnus:
1228
1229 @lisp
1230   (message-add-action
1231    `(set-window-configuration ,(current-window-configuration))
1232    'exit 'postpone 'kill)
1233 @end lisp
1234
1235 This restores the Gnus window configuration when the message buffer is
1236 killed, postponed or exited.
1237
1238 An @dfn{action} can be either: a normal function, or a list where the
1239 @code{car} is a function and the @code{cdr} is the list of arguments, or
1240 a form to be @code{eval}ed.
1241
1242
1243 @node Compatibility
1244 @chapter Compatibility
1245 @cindex compatibility
1246
1247 Message uses virtually only its own variables---older @code{mail-}
1248 variables aren't consulted.  To force Message to take those variables
1249 into account, you can put the following in your @code{.emacs} file:
1250
1251 @lisp
1252 (require 'messcompat)
1253 @end lisp
1254
1255 This will initialize many Message variables from the values in the
1256 corresponding mail variables.
1257
1258
1259 @node Appendices
1260 @chapter Appendices
1261
1262 @menu
1263 * Responses::          Standard rules for determining where responses go.
1264 @end menu
1265
1266
1267 @node Responses
1268 @section Responses
1269
1270 To determine where a message is to go, the following algorithm is used
1271 by default.
1272
1273 @table @dfn
1274 @item reply
1275 A @dfn{reply} is when you want to respond @emph{just} to the person who
1276 sent the message via mail.  There will only be one recipient.  To
1277 determine who the recipient will be, the following headers are
1278 consulted, in turn:
1279
1280 @table @code
1281 @item Reply-To
1282
1283 @item From
1284 @end table
1285
1286
1287 @item wide reply
1288 A @dfn{wide reply} is a mail response that includes @emph{all} entities
1289 mentioned in the message you are responded to.  All mailboxes from the
1290 following headers will be concatenated to form the outgoing
1291 @code{To}/@code{Cc} headers:
1292
1293 @table @code
1294 @item From
1295 (unless there's a @code{Reply-To}, in which case that is used instead).
1296
1297 @item Cc
1298
1299 @item To
1300 @end table
1301
1302 If a @code{Mail-Copies-To} header is present, it will also be included
1303 in the list of mailboxes.  If this header is @samp{never}, that means
1304 that the @code{From} (or @code{Reply-To}) mailbox will be suppressed.
1305
1306
1307 @item followup
1308 A @dfn{followup} is a response sent via news.  The following headers
1309 (listed in order of precedence) determine where the response is to be
1310 sent:
1311
1312 @table @code
1313
1314 @item Followup-To
1315
1316 @item Newsgroups
1317
1318 @end table
1319
1320 If a @code{Mail-Copies-To} header is present, it will be used as the
1321 basis of the new @code{Cc} header, except if this header is
1322 @samp{never}.
1323
1324 @end table
1325
1326
1327
1328 @node Index
1329 @chapter Index
1330 @printindex cp
1331
1332 @node Key Index
1333 @chapter Key Index
1334 @printindex ky
1335
1336 @summarycontents
1337 @contents
1338 @bye
1339
1340 @c End: