\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message 0.110 Manual
+@settitle Message (Oort) Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
+@dircategory Emacs
+@direntry
+* Message: (message). Mail and news composition mode that goes with Gnus.
+@end direntry
@iftex
@finalout
@end iftex
@setchapternewpage odd
-@ifinfo
+@ifnottex
This file documents Message, the Emacs message composition mode.
-Copyright (C) 1996 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
+@end ifnottex
@tex
@titlepage
-@title Message 0.110 Manual
+@title Message (Oort) Manual
@author by Lars Magne Ingebrigtsen
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1996 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-
+Copyright @copyright{} 1996, 1997, 1998, 1999, 2000
+ Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being none, with the Front-Cover texts being ``A GNU
+Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License'' in the Emacs manual.
+
+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+
+This document is part of a collection distributed under the GNU Free
+Documentation License. If you want to distribute this document
+separately from the collection, you can do so by adding a copy of the
+license to the document, as described in section 6 of the license.
@end titlepage
@page
@node Top
@top Message
-All message composition (both mail and news) takes place in Message mode
-buffers.
+All message composition from Gnus (both mail and news) takes place in
+Message mode buffers.
@menu
* Interface:: Setting up message buffers.
* Commands:: Commands you can execute in message mode buffers.
* Variables:: Customizing the message buffers.
* Compatibility:: Making Message backwards compatible.
+* Appendices:: More technical things.
* Index:: Variable, function and concept index.
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Message 0.110. Message is distributed with
-the Gnus distribution bearing the same version number as this manual
-has.
+This manual corresponds to Oort Message. Message is distributed with
+the Gnus distribution bearing the same version number as this manual.
@node Interface
@section New Mail Message
@findex message-mail
-The @code{message-mail} command pops up a new message buffer.
+The @code{message-mail} command pops up a new message buffer.
Two optional parameters are accepted: The first will be used as the
@code{To} header and the second as the @code{Subject} header. If these
-aren't present, those two headers will be empty.
+are @code{nil}, those two headers will be empty.
@node New News Message
@section New News Message
@findex message-news
-The @code{message-news} command pops up a new message buffer.
+The @code{message-news} command pops up a new message buffer.
This function accepts two optional parameters. The first will be used
as the @code{Newsgroups} header and the second as the @code{Subject}
-header. If these aren't present, those two headers will be empty.
+header. If these are @code{nil}, those two headers will be empty.
@node Reply
reply to the message in the current buffer.
@vindex message-reply-to-function
-Message uses the normal methods to determine where replies are to go,
-but you can change the behavior to suit your needs by fiddling with the
-@code{message-reply-to-function} variable.
+Message uses the normal methods to determine where replies are to go
+(@pxref{Responses}), but you can change the behavior to suit your needs
+by fiddling with the @code{message-reply-to-function} variable.
If you want the replies to go to the @code{Sender} instead of the
@code{From}, you could do something like this:
(setq message-reply-to-function
(lambda ()
(cond ((equal (mail-fetch-field "from") "somebody")
- (mail-fetch-field "sender"))
- (t
+ (list (cons 'To (mail-fetch-field "sender"))))
+ (t
nil))))
@end lisp
should be a cons, where the car should be the name of an header
(eg. @code{Cc}) and the cdr should be the header value
(eg. @samp{larsi@@ifi.uio.no}). All these headers will be inserted into
-the head of the outgoing mail.
+the head of the outgoing mail.
@node Wide Reply
Message uses the normal methods to determine where wide replies are to go,
but you can change the behavior to suit your needs by fiddling with the
@code{message-wide-reply-to-function}. It is used in the same way as
-@code{message-reply-to-function} (@pxref{Reply}).
+@code{message-reply-to-function} (@pxref{Reply}).
-@findex rmail-dont-reply-to-names
-Addresses that match the @code{rmail-dont-reply-to-names} regular
+@findex message-dont-reply-to-names
+Addresses that match the @code{message-dont-reply-to-names} regular
expression will be removed from the @code{Cc} header.
Headers matching the @code{message-ignored-supersedes-headers} are
removed before popping up the new message buffer. The default is@*
@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
-^Received:\\|^X-From-Line:\\|Return-Path:}.
+^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:}.
news.
@table @code
-@item message-forward-start-separator
-@vindex message-forward-start-separator
-Delimiter inserted before forwarded messages. The default is@*
-@samp{------- Start of forwarded message -------\n}.
-
-@vindex message-forward-end-separator
-@item message-forward-end-separator
-@vindex message-forward-end-separator
-Delimiter inserted after forwarded messages. The default is@*
-@samp{------- End of forwarded message -------\n}.
-
-@item message-signature-before-forwarded-message
-@vindex message-signature-before-forwarded-message
-If this variable is @code{t}, which it is by default, your personal
-signature will be inserted before the forwarded message. If not, the
-forwarded message will be inserted first in the new mail.
-
-@item message-included-forward-headers
-@vindex message-included-forward-headers
-Regexp matching header lines to be included in forwarded messages.
+@item message-forward-ignored-headers
+@vindex message-forward-ignored-headers
+All headers that match this regexp will be deleted when forwarding a message.
+
+@item message-make-forward-subject-function
+@vindex message-make-forward-subject-function
+A list of functions that are called to generate a subject header for
+forwarded messages. The subject generated by the previous function is
+passed into each successive function.
+
+The provided functions are:
+
+@table @code
+@item message-forward-subject-author-subject
+@findex message-forward-subject-author-subject
+Source of article (author or newsgroup), in brackets followed by the
+subject.
+
+@item message-forward-subject-fwd
+Subject of article with @samp{Fwd:} prepended to it.
+@end table
+@item message-wash-forwarded-subjects
+@vindex message-wash-forwarded-subjects
+If this variable is @code{t}, the subjects of forwarded messages have
+the evidence of previous forwards (such as @samp{Fwd:}, @samp{Re:},
+@samp{(fwd)}) removed before the new subject is
+constructed. The default value is @code{nil}.
+
+@item message-forward-as-mime
+@vindex message-forward-as-mime
+If this variable is @code{t} (the default), forwarded messages are
+included as inline MIME RFC822 parts. If it's @code{nil}, forwarded
+messages will just be copied inline to the new message, like previous,
+non MIME-savvy versions of gnus would do.
@end table
@vindex message-ignored-resent-headers
Headers that match the @code{message-ignored-resent-headers} regexp will
be removed before sending the message. The default is
-@samp{^Return-receipt}.
+@samp{^Return-receipt}.
@node Bouncing
bounced mail message, pop up a message buffer stripped of the bounce
information. A @dfn{bounced message} is typically a mail you've sent
out that has been returned by some @code{mailer-daemon} as
-undeliverable.
+undeliverable.
@vindex message-ignored-bounced-headers
Headers that match the @code{message-ignored-bounced-headers} regexp
will be removed before popping up the buffer. The default is
-@samp{^Received:}.
+@samp{^\\(Received\\|Return-Path\\):}.
@node Commands
@chapter Commands
@menu
+* Buffer Entry:: Commands after entering a Message buffer.
* Header Commands:: Commands for moving to headers.
* Movement:: Moving around in message buffers.
* Insertion:: Inserting things into message buffers.
+* MIME:: @sc{mime} considerations.
+* Security:: Signing and encrypting messages.
* Various Commands:: Various things.
* Sending:: Actually sending the message.
* Mail Aliases:: How to use mail aliases.
+* Spelling:: Having Emacs check your spelling.
@end menu
+@node Buffer Entry
+@section Buffer Entry
+@cindex undo
+@kindex C-_
+
+You most often end up in a Message buffer when responding to some other
+message of some sort. Message does lots of handling of quoted text, and
+may remove signatures, reformat the text, or the like---depending on
+which used settings you're using. Message usually gets things right,
+but sometimes it stumbles. To help the user unwind these stumblings,
+Message sets the undo boundary before each major automatic action it
+takes. If you press the undo key (usually located at @kbd{C-_}) a few
+times, you will get back the un-edited message you're responding to.
+
+
@node Header Commands
@section Header Commands
Describe the message mode.
@item C-c C-f C-t
-@kindex C-c C-f C-t
+@kindex C-c C-f C-t
@findex message-goto-to
Go to the @code{To} header (@code{message-goto-to}).
@item C-c C-f C-b
-@kindex C-c C-f C-b
+@kindex C-c C-f C-b
@findex message-goto-bcc
Go to the @code{Bcc} header (@code{message-goto-bcc}).
@item C-c C-f C-f
-@kindex C-c C-f C-f
+@kindex C-c C-f C-f
@findex message-goto-fcc
Go to the @code{Fcc} header (@code{message-goto-fcc}).
@item C-c C-f C-c
-@kindex C-c C-f C-c
+@kindex C-c C-f C-c
@findex message-goto-cc
Go to the @code{Cc} header (@code{message-goto-cc}).
@item C-c C-f C-s
-@kindex C-c C-f C-s
+@kindex C-c C-f C-s
@findex message-goto-subject
Go to the @code{Subject} header (@code{message-goto-subject}).
@item C-c C-f C-r
-@kindex C-c C-f C-r
+@kindex C-c C-f C-r
@findex message-goto-reply-to
Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
@item C-c C-f C-n
-@kindex C-c C-f C-n
+@kindex C-c C-f C-n
@findex message-goto-newsgroups
Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
@item C-c C-f C-d
-@kindex C-c C-f C-d
+@kindex C-c C-f C-d
@findex message-goto-distribution
Go to the @code{Distribution} header (@code{message-goto-distribution}).
@item C-c C-f C-o
-@kindex C-c C-f C-o
+@kindex C-c C-f C-o
@findex message-goto-followup-to
Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
@item C-c C-f C-k
-@kindex C-c C-f C-k
+@kindex C-c C-f C-k
@findex message-goto-keywords
Go to the @code{Keywords} header (@code{message-goto-keywords}).
@item C-c C-f C-u
-@kindex C-c C-f C-u
+@kindex C-c C-f C-u
@findex message-goto-summary
Go to the @code{Summary} header (@code{message-goto-summary}).
@table @kbd
@item C-c C-b
-@kindex C-c C-b
+@kindex C-c C-b
@findex message-goto-body
Move to the beginning of the body of the message
-(@code{message-goto-body}).
+(@code{message-goto-body}).
@item C-c C-i
-@kindex C-c C-i
+@kindex C-c C-i
@findex message-goto-signature
Move to the signature of the message (@code{message-goto-signature}).
@table @kbd
@item C-c C-y
-@kindex C-c C-y
+@kindex C-c C-y
@findex message-yank-original
Yank the message that's being replied to into the message buffer
-(@code{message-yank-original}).
+(@code{message-yank-original}).
+
+@item C-c M-C-y
+@kindex C-c M-C-y
+@findex message-yank-buffer
+Prompt for a buffer name and yank the contents of that buffer into the
+message buffer (@code{message-yank-buffer}).
@item C-c C-q
-@kindex C-c C-q
+@kindex C-c C-q
@findex message-fill-yanked-message
-Fill the yanked message (@code{message-fill-yanked-message}).
+Fill the yanked message (@code{message-fill-yanked-message}). Warning:
+Can severely mess up the yanked text if its quoting conventions are
+strange. You'll quickly get a feel for when it's safe, though. Anyway,
+just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
+all right.
@item C-c C-w
-@kindex C-c C-w
+@kindex C-c C-w
@findex message-insert-signature
Insert a signature at the end of the buffer
-(@code{message-insert-signature}).
+(@code{message-insert-signature}).
+
+@item C-c M-h
+@kindex C-c M-h
+@findex message-insert-headers
+Insert the message headers (@code{message-insert-headers}).
@end table
messages. The default is @samp{.}, which means that all headers will be
removed.
+@item message-cite-prefix-regexp
+@vindex message-cite-prefix-regexp
+Regexp matching the longest possible citation prefix on a line.
+
@item message-citation-line-function
@vindex message-citation-line-function
Function called to insert the citation line. The default is
-@code{message-insert-citation-line}.
+@code{message-insert-citation-line}, which will lead to citation lines
+that look like:
+
+@example
+Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
+@end example
+
+Point will be at the beginning of the body of the message when this
+function is called.
@item message-yank-prefix
@vindex message-yank-prefix
to quote the person you are answering. Inserting quoted text is done by
@dfn{yanking}, and each quoted line you yank will have
@code{message-yank-prefix} prepended to it. The default is @samp{> }.
-If it is @code{nil}, just indent the message.
@item message-indentation-spaces
@vindex message-indentation-spaces
@vindex message-cite-function
@findex message-cite-original
@findex sc-cite-original
+@findex message-cite-original-without-signature
@cindex Supercite
Function for citing an original message. The default is
-@code{message-cite-original}. You can also set it to
-@code{sc-cite-original} to use Supercite.
+@code{message-cite-original}, which simply inserts the original message
+and prepends @samp{> } to each line.
+@code{message-cite-original-without-signature} does the same, but elides
+the signature. You can also set it to @code{sc-cite-original} to use
+Supercite.
@item message-indent-citation-function
@vindex message-indent-citation-function
@end table
-Note that RFC1036 says that a signature should be preceded by the three
+Note that RFC1036bis says that a signature should be preceded by the three
characters @samp{-- } on a line by themselves. This is to make it
easier for the recipient to automatically recognize and process the
signature. So don't remove those characters, even though you might feel
that you are silly and have nothing important to say.
+@node MIME
+@section MIME
+@cindex MML
+@cindex MIME
+@cindex multipart
+@cindex attachment
+
+Message is a @sc{mime}-compliant posting agent. The user generally
+doesn't have to do anything to make the @sc{mime} happen---Message will
+automatically add the @code{Content-Type} and
+@code{Content-Transfer-Encoding} headers.
+
+The most typical thing users want to use the multipart things in
+@sc{mime} for is to add ``attachments'' to mail they send out. This can
+be done with the @code{C-c C-a} command, which will prompt for a file
+name and a @sc{mime} type.
+
+You can also create arbitrarily complex multiparts using the MML
+language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
+Manual}).
+
+@node Security
+@section Security
+@cindex Security
+@cindex S/MIME
+@cindex PGP/MIME
+@cindex sign
+@cindex encrypt
+
+Using the MML language, Message is able to create digitally signed and
+digitally encrypted messages. Message (or rather MML) currently support
+PGP/MIME and S/MIME. Instructing MML to perform security operations on
+a MIME part is done using the @code{C-c C-m s} key map for signing and the
+@code{C-c C-m c} key map for encryption, as follows.
+
+@table @kbd
+
+@item C-c C-m s s
+@kindex C-c C-m s s
+@findex mml-secure-sign-smime
+
+Digitally sign current MIME part using S/MIME.
+
+@item C-c C-m s p
+@kindex C-c C-m s p
+@findex mml-secure-sign-pgp
+
+Digitally sign current MIME part using PGP/MIME.
+
+@item C-c C-m c s
+@kindex C-c C-m c s
+@findex mml-secure-encrypt-smime
+
+Digitally encrypt current MIME part using S/MIME.
+
+@item C-c C-m c p
+@kindex C-c C-m c p
+@findex mml-secure-encrypt-pgpmime
+
+Digitally encrypt current MIME part using PGP/MIME.
+
+@end table
+
+These commands do not immediately sign or encrypt the message, they
+merely insert proper MML tags to instruct the MML engine to perform that
+operation when the message is actually sent. They may perform other
+operations too, such as locating and retrieving a S/MIME certificate of
+the person you wish to send encrypted mail to.
+
+Since signing and especially encryption often is used when sensitive
+information is sent, you may want to have some way to ensure that your
+mail is actually signed or encrypted. After invoking the above
+sign/encrypt commands, it is possible to preview the raw article by
+using @code{C-u C-m P} (@code{mml-preview}). Then you can verify that
+your long rant about what your ex-significant other or whomever actually
+did with that funny looking person at that strange party the other
+night, actually will be sent encrypted.
+
+@emph{Note!} Neither PGP/MIME nor S/MIME encrypt/signs RFC822 headers.
+They only operate on the MIME object. Keep this in mind before sending
+mail with a sensitive Subject line.
+
+Actually using the security commands above is not very difficult. At
+least not compared with making sure all involved programs talk with each
+other properly. Thus, we now describe what external libraries or
+programs are required to make things work, and some small general hints.
+
+@subsection Using S/MIME
+
+@emph{Note!} This section assume you have a basic familiarity with
+modern cryptography, S/MIME, various PKCS standards, OpenSSL and so on.
+
+The S/MIME support in Message (and MML) require OpenSSL. OpenSSL
+perform the actual S/MIME sign/encrypt operations. OpenSSL can be found
+at @code{http://www.openssl.org/}. OpenSSL 0.9.6 and later should work.
+Version 0.9.5a cannot extract mail addresses from certificates, and it
+insert a spurious CR character into MIME separators so you may wish to
+avoid it if you would like to avoid being regarded as someone who send
+strange mail. (Although by sending S/MIME messages you've probably
+already lost that contest.)
+
+To be able to send encrypted mail, a personal certificate is not
+required. Message (MML) need a certificate for the person to whom you
+wish to communicate with though. You're asked for this when you type
+@code{C-c C-m c s}. Currently there are two ways to retrieve this
+certificate, from a local file or from DNS. If you chose a local file,
+it need to contain a X.509 certificate in PEM format. If you chose DNS,
+you're asked for the domain name where the certificate is stored, the
+default is a good guess. To my belief, Message (MML) is the first mail
+agent in the world to support retrieving S/MIME certificates from DNS,
+so you're not likely to find very many certificates out there. At least
+there should be one, stored at the domain @code{simon.josefsson.org}.
+LDAP is a more popular method of distributing certificates, support for
+it is planned. (Meanwhile, you can use @code{ldapsearch} from the
+command line to retrieve a certificate into a file and use it.)
+
+As for signing messages, OpenSSL can't perform signing operations
+without some kind of configuration. Especially, you need to tell it
+where your private key and your certificate is stored. MML uses an
+Emacs interface to OpenSSL, aptly named @code{smime.el}, and it contain
+a @code{custom} group used for this configuration. So, try @code{M-x
+customize-group RET smime RET} and look around.
+
+Currently there is no support for talking to a CA (or RA) to create your
+own certificate. None is planned either. You need to do this manually
+with OpenSSL or using some other program. I used Netscape and got a
+free S/MIME certificate from one of the big CA's on the net. Netscape
+is able to export your private key and certificate in PKCS #12 format.
+Use OpenSSL to convert this into a plain X.509 certificate in PEM format
+as follows.
+
+@example
+$ openssl pkcs12 -in ns.p12 -clcerts -nodes > key+cert.pem
+@end example
+
+The @code{key+cert.pem} file should be pointed to from the
+@code{smime-keys} variable. You should now be able to send signed mail.
+
+@emph{Note!} Your private key is store unencrypted in the file, so take
+care in handling it.
+
+@subsection Using PGP/MIME
+
+PGP/MIME requires an external OpenPGP implementation, such as GNU
+Privacy Guard (@code{http://www.gnupg.org/}). It also requires an Emacs
+interface to it, such as Mailcrypt (available from
+@code{http://www.nb.net/~lbudney/linux/software/mailcrypt.html}) or
+Florian Weimer's @code{gpg.el}.
+
+Creating your own OpenPGP key is described in detail in the
+documentation of your OpenPGP implementation, so we refer to it.
@node Various Commands
@section Various Commands
@table @kbd
@item C-c C-r
-@kindex C-c C-r
+@kindex C-c C-r
@findex message-caesar-buffer-body
Caesar rotate (aka. rot13) the current message
(@code{message-caesar-buffer-body}). If narrowing is in effect, just
@kindex C-c C-e
@findex message-elide-region
Elide the text between point and mark (@code{message-elide-region}).
-The text is killed and an ellipsis (@samp{[...]}) will be inserted in
-its place.
+The text is killed and replaced with the contents of the variable
+@code{message-elide-ellipsis}. The default value is to use an ellipsis
+(@samp{[...]}).
+
+@item C-c C-z
+@kindex C-c C-x
+@findex message-kill-to-signature
+Kill all the text up to the signature, or if that's missing, up to the
+end of the message (@code{message-kill-to-signature}).
@item C-c C-v
@kindex C-c C-v
> And here's more quoted text.
@end example
-@samp{*} says where point will be placed.
+@samp{*} says where point will be placed.
@item C-c C-t
-@kindex C-c C-t
+@kindex C-c C-t
@findex message-insert-to
Insert a @code{To} header that contains the @code{Reply-To} or
@code{From} header of the message you're following up
-(@code{message-insert-to}).
+(@code{message-insert-to}).
@item C-c C-n
-@kindex C-c C-n
+@kindex C-c C-n
@findex message-insert-newsgroups
Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
or @code{Newsgroups} header of the article you're replying to
@table @kbd
@item C-c C-c
-@kindex C-c C-c
+@kindex C-c C-c
@findex message-send-and-exit
Send the message and bury the current buffer
-(@code{message-send-and-exit}).
+(@code{message-send-and-exit}).
@item C-c C-s
-@kindex C-c C-s
+@kindex C-c C-s
@findex message-send
-Send the message (@code{message-send}).
+Send the message (@code{message-send}).
@item C-c C-d
@kindex C-c C-d
expansions have to be done explicitly.
+@node Spelling
+@section Spelling
+@cindex spelling
+@findex ispell-message
+
+There are two popular ways to have Emacs spell-check your messages:
+@code{ispell} and @code{flyspell}. @code{ispell} is the older and
+probably more popular package. You typically first write the message,
+and then run the entire thing through @code{ispell} and fix all the
+typos. To have this happen automatically when you send a message, put
+something like the following in your @file{.emacs} file:
+
+@lisp
+(add-hook 'message-send-hook 'ispell-message)
+@end lisp
+
+@vindex ispell-message-dictionary-alist
+If you're in the habit of writing in different languages, this can be
+controlled by the @code{ispell-message-dictionary-alist} variable:
+
+@lisp
+(setq ispell-message-dictionary-alist
+ '(("^Newsgroups:.*\\bde\\." . "deutsch8")
+ (".*" . "default")))
+@end lisp
+
+@code{ispell} depends on having the external @samp{ispell} command
+installed.
+
+The other popular method is using @code{flyspell}. This package checks
+your spelling while you're writing, and marks any mis-spelled words in
+various ways.
+
+To use @code{flyspell}, put something like the following in your
+@file{.emacs} file:
+
+@lisp
+(defun my-message-setup-routine ()
+ (flyspell-mode 1))
+(add-hook 'message-setup-hook 'my-message-setup-routine)
+@end lisp
+
+@code{flyspell} depends on having the external @samp{ispell} command
+installed.
+
@node Variables
@chapter Variables
@node Message Headers
@section Message Headers
-Message is quite aggressive on the message generation front. It has
-to be -- it's a combined news and mail agent. To be able to send
-combined messages, it has to generate all headers itself to ensure that
-mail and news copies of messages look sufficiently similar.
+Message is quite aggressive on the message generation front. It has to
+be -- it's a combined news and mail agent. To be able to send combined
+messages, it has to generate all headers itself (instead of letting the
+mail/news system do it) to ensure that mail and news copies of messages
+look sufficiently similar.
@table @code
@item message-generate-headers-first
@vindex message-generate-headers-first
-If non-@code{nil}, generate all headers before starting to compose the
-message.
+If non-@code{nil}, generate all required headers before starting to
+compose the message.
+
+The variables @code{message-required-mail-headers} and
+@code{message-required-news-headers} specify which headers are required.
+
+Note that some headers will be removed and re-generated before posting,
+because of the variable @code{message-deletable-headers} (see below).
@item message-from-style
@vindex message-from-style
-Specifies how @code{From} headers should look. There are four legal
+Specifies how @code{From} headers should look. There are four valid
values:
@table @code
generated @code{Message-ID} is deleted, and a new one generated. If
this isn't done, the entire empire would probably crumble, anarchy would
prevail, and cats would start walking on two legs and rule the world.
-Allegedly.
+Allegedly.
@item message-default-headers
@vindex message-default-headers
This string is inserted at the end of the headers in all message
buffers.
+@item message-subject-re-regexp
+@vindex message-subject-re-regexp
+Responses to messages have subjects that start with @samp{Re: }. This
+is @emph{not} an abbreviation of the English word ``response'', but is
+Latin, and means ``in response to''. Some illiterate nincompoops have
+failed to grasp this fact, and have ``internationalized'' their software
+to use abonimations like @samp{Aw: } (``antwort'') or @samp{Sv: }
+(``svar'') instead, which is meaningless and evil. However, you may
+have to deal with users that use these evil tools, in which case you may
+set this variable to a regexp that matches these prefixes. Myself, I
+just throw away non-compliant mail.
+
+@item message-alternative-emails
+@vindex message-alternative-emails
+A regexp to match the alternative email addresses. The first matched
+address (not primary one) is used in the @code{From} field.
+
@end table
@vindex message-required-mail-headers
@xref{News Headers}, for the syntax of this variable. It is
@code{(From Date Subject (optional . In-Reply-To) Message-ID Lines
-(optional . X-Mailer))} by default.
+(optional . User-Agent))} by default.
@item message-ignored-mail-headers
@vindex message-ignored-mail-headers
Regexp of headers to be removed before mailing. The default is
-@samp{^Gcc:\\|^Fcc:}.
+@samp{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:}.
@item message-default-mail-headers
@vindex message-default-mail-headers
@node Mail Variables
-@section Mail Variables
+@section Mail Variables
@table @code
@item message-send-mail-function
@vindex message-mh-deletable-headers
Most versions of MH doesn't like being fed messages that contain the
headers in this variable. If this variable is non-@code{nil} (which is
-the default), these headers will be removed before mailing. Set it to
-@code{nil} if your MH can handle these headers.
+the default), these headers will be removed before mailing when sending
+messages via MH. Set it to @code{nil} if your MH can handle these
+headers.
+
+@item message-send-mail-partially-limit
+@vindex message-send-mail-partially-limit
+The limitation of messages sent as message/partial.
+The lower bound of message size in characters, beyond which the message
+should be sent in several parts. If it is nil, the size is unlimited.
@end table
@vindex message-required-news-headers
@code{message-required-news-headers} a list of header symbols. These
headers will either be automatically generated, or, if that's
-impossible, they will be prompted for. The following symbols are legal:
+impossible, they will be prompted for. The following symbols are valid:
@table @code
@item Subject
@cindex Subject
-This required header will be prompted for if not present already.
+This required header will be prompted for if not present already.
@item Newsgroups
@cindex Newsgroups
@findex system-name
@cindex Sun
This required header will be generated by Message. A unique ID will be
-created based on the date, time, user name and system name. Message will
-use @code{mail-host-address} as the fully qualified domain name (FQDN)
-of the machine if that variable is defined. If not, it will use
-@code{system-name}, which doesn't report a FQDN on some machines --
-notably Suns.
-
-@item X-Newsreader
-@cindex X-Newsreader
-This optional header will be filled out according to the
-@code{message-newsreader} local variable.
+created based on the date, time, user name and system name. Message
+will use @code{system-name} to determine the name of the system. If
+this isn't a fully qualified domain name (FQDN), Message will use
+@code{mail-host-address} as the FQDN of the machine.
-@item X-Mailer
+@item User-Agent
+@cindex User-Agent
This optional header will be filled out according to the
-@code{message-mailer} local variable, unless there already is an
-@code{X-Newsreader} header present.
+@code{message-newsreader} local variable.
@item In-Reply-To
This optional header is filled out using the @code{Date} and @code{From}
@item message-syntax-checks
@vindex message-syntax-checks
-If non-@code{nil}, Message will attempt to check the legality of the
-headers, as well as some other stuff, before posting. You can control
-the granularity of the check by adding or removing elements from this
-list. Legal elements are:
+Controls what syntax checks should not be performed on outgoing posts.
+To disable checking of long signatures, for instance, add
+
+@lisp
+(signature . disabled)
+@end lisp
+
+to this list.
+
+Valid checks are:
@table @code
-@item subject-cmsg
+@item subject-cmsg
Check the subject for commands.
@item sender
@cindex Sender
-Insert a new @code{Sender} header if the @code{From} header looks odd.
-@item multiple-headers
+Insert a new @code{Sender} header if the @code{From} header looks odd.
+@item multiple-headers
Check for the existence of multiple equal headers.
-@item sendsys
+@item sendsys
@cindex sendsys
Check for the existence of version and sendsys commands.
@item message-id
Check whether the @code{Message-ID} looks ok.
@item from
Check whether the @code{From} header seems nice.
-@item long-lines
+@item long-lines
@cindex long lines
Check for too long lines.
@item control-chars
-Check for illegal characters.
+Check for invalid characters.
@item size
Check for excessive size.
@item new-text
something only moderators should include.
@item empty
Check whether the article is empty.
+@item invisible-text
+Check whether there is any invisible text in the buffer.
@item empty-headers
Check whether any of the headers are empty.
@item existing-newsgroups
-Check whether the newsgroups mentioned in the @code{Newsgroups} and
+Check whether the newsgroups mentioned in the @code{Newsgroups} and
@code{Followup-To} headers exist.
@item valid-newsgroups
Check whether the @code{Newsgroups} and @code{Followup-to} headers
@item message-ignored-news-headers
@vindex message-ignored-news-headers
Regexp of headers to be removed before posting. The default is@*
-@samp{^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:}.
+@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|^X-Draft-From:}.
@item message-default-news-headers
@vindex message-default-news-headers
@item message-send-news-function
@vindex message-send-news-function
Function used to send the current buffer as news. The default is
-@code{message-send-news}.
+@code{message-send-news}.
@item message-post-method
@vindex message-post-method
-Method used for posting a prepared news message.
+Gnusish @dfn{select method} (see the Gnus manual for details) used for
+posting a prepared news message.
@end table
@section Various Message Variables
@table @code
+@item message-default-charset
+@vindex message-default-charset
+@cindex charset
+Symbol naming a @sc{mime} charset. Non-ASCII characters in messages are
+assumed to be encoded using this charset. The default is @code{nil},
+which means ask the user. (This variable is used only on non-@sc{mule}
+Emacsen.
+@xref{Charset Translation, , Charset Translation, emacs-mime,
+ Emacs MIME Manual}, for details on the @sc{mule}-to-@sc{mime}
+translation process.
+
@item message-signature-separator
@vindex message-signature-separator
Regexp matching the signature separator. It is @samp{^-- *$} by
-default.
+default.
@item mail-header-separator
@vindex mail-header-separator
@item message-directory
@vindex message-directory
-Directory used by many mailey things. The default is @file{~/Mail/}.
-
-@item message-autosave-directory
-@vindex message-autosave-directory
-Directory where message buffers will be autosaved to.
+Directory used by many mailey things. The default is @file{~/Mail/}.
@item message-signature-setup-hook
@vindex message-signature-setup-hook
Hook run when initializing the message buffer. It is run after the
-headers have been inserted but before the signature has been inserted.
+headers have been inserted but before the signature has been inserted.
@item message-setup-hook
@vindex message-setup-hook
@item message-header-setup-hook
@vindex message-header-setup-hook
-Hook called narrowed to the headers after initializing the headers.
+Hook called narrowed to the headers after initializing the headers.
For instance, if you're running Gnus and wish to insert a
@samp{Mail-Copies-To} header in all your news articles and all messages
(gnus-group-find-parameter group 'to-list))
(insert "Mail-Copies-To: never\n"))))
-(add-hook 'message-header-setup-hook 'my-message-header-setup-hook)
+(add-hook 'message-header-setup-hook
+ 'my-message-header-setup-hook)
@end lisp
@item message-send-hook
@lisp
(add-hook 'message-send-hook 'my-message-add-content)
(defun my-message-add-content ()
- (message-add-header
- "Mime-Version: 1.0"
- "Content-Type: text/plain"
- "Content-Transfer-Encoding: 7bit"))
+ (message-add-header "X-In-No-Sense: Nonsense")
+ (message-add-header "X-Whatever: no"))
@end lisp
This function won't add the header if the header is already present.
@table @code
-@item message-fcc-handler-function
-@vindex message-fcc-handler-function
+@item message-fcc-handler-function
+@vindex message-fcc-handler-function
A function called to save outgoing articles. This function will be
-called with the name of the file to store the article in. The default
-function is @code{rmail-output} which saves in Unix mailbox format.
+called with the name of the file to store the article in. The default
+function is @code{message-output} which saves in Unix mailbox format.
@item message-courtesy-message
@vindex message-courtesy-message
newsgroups the article has been posted to will be inserted there. If
this variable is @code{nil}, no such courtesy message will be added.
The default value is @samp{"The following message is a courtesy copy of
-an article\nthat has been posted to %s as well.\n\n"}.
+an article\nthat has been posted to %s as well.\n\n"}.
@end table
When Message is being used from a news/mail reader, the reader is likely
to want to perform some task after the message has been sent. Perhaps
return to the previous window configuration or mark an article as
-replied.
+replied.
@vindex message-kill-actions
@vindex message-postpone-actions
and @kbd{C-c C-k} which kills the message buffer. Each of these actions
have lists associated with them that contains actions to be executed:
@code{message-send-actions}, @code{message-exit-actions},
-@code{message-postpone-actions}, and @code{message-kill-actions}.
+@code{message-postpone-actions}, and @code{message-kill-actions}.
Message provides a function to interface with these lists:
@code{message-add-action}. The first parameter is the action to be
corresponding mail variables.
+@node Appendices
+@chapter Appendices
+
+@menu
+* Responses:: Standard rules for determining where responses go.
+@end menu
+
+
+@node Responses
+@section Responses
+
+To determine where a message is to go, the following algorithm is used
+by default.
+
+@table @dfn
+@item reply
+A @dfn{reply} is when you want to respond @emph{just} to the person who
+sent the message via mail. There will only be one recipient. To
+determine who the recipient will be, the following headers are
+consulted, in turn:
+
+@table @code
+@item Reply-To
+
+@item From
+@end table
+
+
+@item wide reply
+A @dfn{wide reply} is a mail response that includes @emph{all} entities
+mentioned in the message you are responded to. All mailboxes from the
+following headers will be concatenated to form the outgoing
+@code{To}/@code{Cc} headers:
+
+@table @code
+@item From
+(unless there's a @code{Reply-To}, in which case that is used instead).
+
+@item Cc
+
+@item To
+@end table
+
+If a @code{Mail-Copies-To} header is present, it will also be included
+in the list of mailboxes. If this header is @samp{never}, that means
+that the @code{From} (or @code{Reply-To}) mailbox will be suppressed.
+
+
+@item followup
+A @dfn{followup} is a response sent via news. The following headers
+(listed in order of precedence) determine where the response is to be
+sent:
+
+@table @code
+
+@item Followup-To
+
+@item Newsgroups
+
+@end table
+
+If a @code{Mail-Copies-To} header is present, it will be used as the
+basis of the new @code{Cc} header, except if this header is
+@samp{never}.
+
+@end table
+
+
@node Index
@chapter Index