Release commit
[gnus] / texi / message.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename message
4 @settitle 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 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 Message v5.10.6.  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.
<