\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Message (Oort) Manual
+@settitle Message 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
-
-@ifnottex
-
+@copying
This file documents Message, the Emacs message composition mode.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-Free Software Foundation, Inc.
+Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+2004, 2005, 2006 Free Software Foundation, Inc.
+@quotation
Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
+under the terms of the GNU Free Documentation License, Version 1.2 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
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
+@end quotation
+@end copying
-@tex
+@dircategory Emacs
+@direntry
+* Message: (message). Mail and news composition mode that goes with Gnus.
+@end direntry
+@iftex
+@finalout
+@end iftex
+@setchapternewpage odd
@titlepage
-@title Message (Oort) Manual
+@title Message Manual
@author by Lars Magne Ingebrigtsen
@page
@vskip 0pt plus 1filll
-Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002
- 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.
+@insertcopying
@end titlepage
@page
-@end tex
-
@node Top
@top Message
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Oort Message. Message is distributed with
-the Gnus distribution bearing the same version number as this manual.
+@c Adjust ../Makefile.in if you change the following lines:
+Message is distributed with Gnus. The Gnus distribution
+@c
+corresponding to this manual is No Gnus v0.4.
@node Interface
@chapter Interface
-When a program (or a person) wants to respond to a message -- reply,
-follow up, forward, cancel -- the program (or person) should just put
+When a program (or a person) wants to respond to a message---reply,
+follow up, forward, cancel---the program (or person) should just put
point in the buffer where the message is and call the required command.
@code{Message} will then pop up a new @code{message} mode buffer with
appropriate headers filled out, and the user can edit the message before
* Mailing Lists:: Send mail to mailing lists.
@end menu
+You can customize the Message Mode tool bar, see @kbd{M-x
+customize-apropos RET message-tool-bar}. This feature is only available
+in Emacs.
@node New Mail Message
@section New Mail Message
This function will be called narrowed to the head of the article that is
being replied to.
-As you can see, this function should return a string if it has an
-opinion as to what the To header should be. If it does not, it should
-just return @code{nil}, and the normal methods for determining the To
-header will be used.
+As you can see, this function should return a list. In this case, it
+returns @code{((To . "Whom"))} if it has an opinion as to what the To
+header should be. If it does not, it should just return @code{nil}, and
+the normal methods for determining the To header will be used.
-This function can also return a list. In that case, each list element
-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.
+Each list element should be a cons, where the @sc{car} should be the
+name of a header (e.g. @code{Cc}) and the @sc{cdr} should be the header
+value (e.g. @samp{larsi@@ifi.uio.no}). All these headers will be
+inserted into the head of the outgoing mail.
@node Wide Reply
is that if you lose your @file{.emacs} file (which is where Gnus
stores the secret cancel lock password (which is generated
automatically the first time you use this feature)), you won't be
-able to cancel your message.
+able to cancel your message. If you want to manage a password yourself,
+you can put something like the following in your @file{~/.gnus.el} file:
+
+@lisp
+(setq canlock-password "geheimnis"
+ canlock-password-for-verify canlock-password)
+@end lisp
Whether to insert the header or not is controlled by the
@code{message-insert-canlock} variable.
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:\\|^Supersedes:}.
+^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|@*
+Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|@*
+^X-Complaints-To:\\|^Cancel-Lock:\\|^Cancel-Key:\\|^X-Hashcash:\\|@*
+^X-Payment:\\|^Approved:}.
@item message-forward-as-mime
@vindex message-forward-as-mime
If this variable is @code{t} (the default), forwarded messages are
-included as inline @sc{mime} RFC822 parts. If it's @code{nil}, forwarded
+included as inline @acronym{MIME} RFC822 parts. If it's @code{nil}, forwarded
messages will just be copied inline to the new message, like previous,
-non @sc{mime}-savvy versions of gnus would do.
+non @acronym{MIME}-savvy versions of Gnus would do.
@item message-forward-before-signature
@vindex message-forward-before-signature
@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}.
+be removed before sending the message.
@node Bouncing
@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\\|Return-Path\\):}.
+@samp{^\\(Received\\|Return-Path\\|Delivered-To\\):}.
@node Mailing Lists
@section Mailing Lists
+@cindex Mail-Followup-To
Sometimes while posting to mailing lists, the poster needs to direct
followups to the post to specific places. The Mail-Followup-To (MFT)
-was created to enable just this. Two example scenarios where this is
+was created to enable just this. Three example scenarios where this is
useful:
@itemize @bullet
@vindex message-subscribed-addresses
@item message-subscribed-addresses
This should be a list of addresses the user is subscribed to. Its
-default value is @code{nil}. Example:
+default value is @code{nil}. Example:
@lisp
(setq message-subscribed-addresses
'("ding@@gnus.org" "bing@@noose.org"))
There is a pre-defined function in Gnus that is a good candidate for
this variable. @code{gnus-find-subscribed-addresses} is a function
that returns a list of addresses corresponding to the groups that have
-the @code{subscribed} (@pxref{(gnus)subscribed})
-group parameter set to a non-nil value. This is how you would do it.
+the @code{subscribed} (@pxref{Group Parameters, ,Group Parameters,
+gnus, The Gnus Manual}) group parameter set to a non-@code{nil} value.
+This is how you would do it.
@lisp
(setq message-subscribed-address-functions
@vindex message-subscribed-address-file
@item message-subscribed-address-file
-You might be one organised human freak and have a list of addresses of
+You might be one organized human freak and have a list of addresses of
all subscribed mailing lists in a separate file! Then you can just
set this variable to the name of the file and life would be good.
@findex message-generate-unsubscribed-mail-followup-to
@kindex C-c C-f C-m
@findex message-goto-mail-followup-to
-Hm. ``So'', you ask, ``what if I send an email to a list I am not
+Hm. ``So'', you ask, ``what if I send an email to a list I am not
subscribed to? I want my MFT to say that I want an extra copy.'' (This
is supposed to be interpreted by others the same way as if there were no
MFT, but you can use an explicit MFT to override someone else's
@end table
-It is considered good nettiquette to honor MFT, as it is assumed the
+It is considered good netiquette to honor MFT, as it is assumed the
fellow who posted a message knows where the followups need to go
better than you do.
* Header Commands:: Commands for moving headers or changing headers.
* Movement:: Moving around in message buffers.
* Insertion:: Inserting things into message buffers.
-* MIME:: @sc{mime} considerations.
+* MIME:: @acronym{MIME} considerations.
+* IDNA:: Non-@acronym{ASCII} domain name considerations.
* Security:: Signing and encrypting messages.
* Various Commands:: Various things.
* Sending:: Actually sending the message.
fetches the contents of the @samp{To:} header in the current mail
buffer, and appends the current @code{user-mail-address}.
-If the optional argument @code{include-cc} is non-nil, the addresses in
-the @samp{Cc:} header are also put into the @samp{Mail-Followup-To:}
-header.
+If the optional argument @code{include-cc} is non-@code{nil}, the
+addresses in the @samp{Cc:} header are also put into the
+@samp{Mail-Followup-To:} header.
@end table
@kindex C-c M-n
@findex message-insert-disposition-notification-to
Insert a request for a disposition
-notification. (@code{message-insert-disposition-notification-to}).
+notification. (@code{message-insert-disposition-notification-to}).
This means that if the recipient support RFC 2298 she might send you a
notification that she received the message.
@findex message-change-subject
@cindex Subject
Change the current @samp{Subject} header. Ask for new @samp{Subject}
-header and append @code{(was: <Old Subject>)}. The old subject can be
+header and append @samp{(was: <Old Subject>)}. The old subject can be
stripped on replying, see @code{message-subject-trailing-was-query}
(@pxref{Message Headers}).
@kindex C-c C-f x
@findex message-cross-post-followup-to
@vindex message-cross-post-default
+@vindex message-cross-post-note-function
@cindex X-Post
@cindex cross-post
-Ask for an additional @samp{Newsgroups} and @samp{FollowUp-To} for a
-cross-post. @code{message-cross-post-followup-to} mangles
-@samp{FollowUp-To} and @samp{Newsgroups} header to point to group.
-If @code{message-cross-post-default} is @code{nil} or if called with a
-prefix-argument @samp{Follow-Up} is set, but the message is not
-cross-posted.
+Set up the @samp{FollowUp-To} header with a target newsgroup for a
+cross-post, add that target newsgroup to the @samp{Newsgroups} header if
+it is not a member of @samp{Newsgroups}, and insert a note in the body.
+If @code{message-cross-post-default} is @code{nil} or if this command is
+called with a prefix-argument, only the @samp{FollowUp-To} header will
+be set but the the target newsgroup will not be added to the
+@samp{Newsgroups} header. The function to insert a note is controlled
+by the @code{message-cross-post-note-function} variable.
@item C-c C-f t
@kindex C-c C-f t
@findex message-reduce-to-to-cc
Replace contents of @samp{To} header with contents of @samp{Cc} or
-@samp{Bcc} header.
+@samp{Bcc} header. (Iff @samp{Cc} header is not present, @samp{Bcc}
+header will be used instead.)
@item C-c C-f w
@kindex C-c C-f w
@findex message-insert-wide-reply
Insert @samp{To} and @samp{Cc} headers as if you were doing a wide
-reply.
+reply even if the message was not made for a wide reply first.
@item C-c C-f a
@kindex C-c C-f a
@vindex message-beginning-of-line
If at beginning of header value, go to beginning of line, else go to
beginning of header value. (The header value comes after the header
-name and the colon.) This behaviour can be disabled by toggling
+name and the colon.) This behavior can be disabled by toggling
the variable @code{message-beginning-of-line}.
@end table
@item C-c M-m
@kindex C-c M-m
@findex message-mark-inserted-region
-Mark some region in the current article with enclosing tags.
-See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+Mark some region in the current article with enclosing tags. See
+@code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+When called with a prefix argument, use slrn style verbatim marks
+(@samp{#v+} and @samp{#v-}).
@item C-c M-f
@kindex C-c M-f
@findex message-mark-insert-file
Insert a file in the current article with enclosing tags.
See @code{message-mark-insert-begin} and @code{message-mark-insert-end}.
+When called with a prefix argument, use slrn style verbatim marks
+(@samp{#v+} and @samp{#v-}).
@end table
@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
+Message is a @acronym{MIME}-compliant posting agent. The user generally
+doesn't have to do anything to make the @acronym{MIME} happen---Message will
automatically add the @code{Content-Type} and
@code{Content-Transfer-Encoding} headers.
+@findex mml-attach
+@kindex C-c C-a
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 @kbd{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
+@acronym{MIME} for is to add ``attachments'' to mail they send out.
+This can be done with the @kbd{C-c C-a} command (@kbd{M-x mml-attach}),
+which will prompt for a file name and a @acronym{MIME} type.
+
+@vindex mml-dnd-protocol-alist
+@vindex mml-dnd-attach-options
+If your Emacs supports drag and drop, you can also drop the file in the
+Message buffer. The variable @code{mml-dnd-protocol-alist} specifies
+what kind of action is done when you drop a file into the Message
+buffer. The variable @code{mml-dnd-attach-options} controls which
+@acronym{MIME} options you want to specify when dropping a file. If it
+is a list, valid members are @code{type}, @code{description} and
+@code{disposition}. @code{disposition} implies @code{type}. If it is
+@code{nil}, don't ask for options. If it is @code{t}, ask the user
+whether or not to specify options.
+
+You can also create arbitrarily complex multiparts using the @acronym{MML}
language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
Manual}).
+@node IDNA
+@section IDNA
+@cindex IDNA
+@cindex internationalized domain names
+@cindex non-ascii domain names
+
+Message is a @acronym{IDNA}-compliant posting agent. The user
+generally doesn't have to do anything to make the @acronym{IDNA}
+happen---Message will encode non-@acronym{ASCII} domain names in @code{From},
+@code{To}, and @code{Cc} headers automatically.
+
+Until @acronym{IDNA} becomes more well known, Message queries you
+whether @acronym{IDNA} encoding of the domain name really should
+occur. Some users might not be aware that domain names can contain
+non-@acronym{ASCII} now, so this gives them a safety net if they accidently
+typed a non-@acronym{ASCII} domain name.
+
+@vindex message-use-idna
+The @code{message-use-idna} variable control whether @acronym{IDNA} is
+used. If the variable is @code{nil} no @acronym{IDNA} encoding will
+ever happen, if it is set to the symbol @code{ask} the user will be
+queried, and if set to @code{t} (which is the default if @acronym{IDNA}
+is fully available) @acronym{IDNA} encoding happens automatically.
+
+@findex message-idna-to-ascii-rhs
+If you want to experiment with the @acronym{IDNA} encoding, you can
+invoke @kbd{M-x message-idna-to-ascii-rhs RET} in the message buffer
+to have the non-@acronym{ASCII} domain names encoded while you edit
+the message.
+
+Note that you must have @uref{http://www.gnu.org/software/libidn/, GNU
+Libidn} installed in order to use this functionality.
+
@node Security
@section Security
@cindex Security
@cindex encrypt
@cindex secure
-Using the MML language, Message is able to create digitally signed and
-digitally encrypted messages. Message (or rather MML) currently
-support PGP (RFC 1991), @sc{pgp/mime} (RFC 2015/3156) and @sc{s/mime}.
-Instructing MML to perform security operations on a @sc{mime} part is
-done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c
-C-m c} key map for encryption, as follows.
+Using the @acronym{MML} language, Message is able to create digitally
+signed and digitally encrypted messages. Message (or rather
+@acronym{MML}) currently support @acronym{PGP} (RFC 1991),
+@acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}. Instructing
+@acronym{MML} to perform security operations on a @acronym{MIME} part is
+done using the @kbd{C-c C-m s} key map for signing and the @kbd{C-c C-m
+c} key map for encryption, as follows.
@table @kbd
@kindex C-c C-m s s
@findex mml-secure-message-sign-smime
-Digitally sign current message using @sc{s/mime}.
+Digitally sign current message using @acronym{S/MIME}.
@item C-c C-m s o
@kindex C-c C-m s o
@findex mml-secure-message-sign-pgp
-Digitally sign current message using PGP.
+Digitally sign current message using @acronym{PGP}.
@item C-c C-m s p
@kindex C-c C-m s p
@findex mml-secure-message-sign-pgpmime
-Digitally sign current message using @sc{pgp/mime}.
+Digitally sign current message using @acronym{PGP/MIME}.
@item C-c C-m c s
@kindex C-c C-m c s
@findex mml-secure-message-encrypt-smime
-Digitally encrypt current message using @sc{s/mime}.
+Digitally encrypt current message using @acronym{S/MIME}.
@item C-c C-m c o
@kindex C-c C-m c o
@findex mml-secure-message-encrypt-pgp
-Digitally encrypt current message using PGP.
+Digitally encrypt current message using @acronym{PGP}.
@item C-c C-m c p
@kindex C-c C-m c p
@findex mml-secure-message-encrypt-pgpmime
-Digitally encrypt current message using @sc{pgp/mime}.
+Digitally encrypt current message using @acronym{PGP/MIME}.
@item C-c C-m C-n
@kindex C-c C-m C-n
@findex mml-unsecure-message
-Remove security related MML tags from message.
+Remove security related @acronym{MML} tags from message.
@end table
These commands do not immediately sign or encrypt the message, they
-merely insert the proper MML secure tag 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
-@sc{s/mime} certificate of the person you wish to send encrypted mail
-to. When the mml parsing engine converts your MML into a properly
-encoded @sc{mime} message, the secure tag will be replaced with either
-a part or a multipart tag. If your message contains other mml parts,
-a multipart tag will be used; if no other parts are present in your
-message a single part tag will be used. This way, message mode will
-do the Right Thing (TM) with signed/encrypted multipart messages.
-
-@vindex mml-signencrypt-style-alist
-By default, when encrypting a message, Gnus will use the "signencrypt"
-mode. If you would like to disable this for a particular message,
-give the mml-secure-message-encrypt-* command a prefix argument. (for
-example, C-u C-c C-m c p). Additionally, by default Gnus will
-separately sign, then encrypt a message which has the mode
-signencrypt. If you would like to change this behavior you can
-customize the @code{mml-signencrypt-style-alist} variable. For
-example:
-
-
-@lisp
-(setq mml-signencrypt-style-alist '(("smime" combined)
- ("pgp" combined)
- ("pgpmime" combined)))
-@end lisp
-
-Will cause Gnus to sign and encrypt in one pass, thus generating a
-single signed and encrypted part. Note that combined sign and encrypt
-does not work with all supported OpenPGP implementations (in
-particular, PGP version 2 do not support this).
+merely insert the proper @acronym{MML} secure tag to instruct the
+@acronym{MML} engine to perform that operation when the message is
+actually sent. They may perform other operations too, such as locating
+and retrieving a @acronym{S/MIME} certificate of the person you wish to
+send encrypted mail to. When the mml parsing engine converts your
+@acronym{MML} into a properly encoded @acronym{MIME} message, the secure
+tag will be replaced with either a part or a multipart tag. If your
+message contains other mml parts, a multipart tag will be used; if no
+other parts are present in your message a single part tag will be used.
+This way, message mode will do the Right Thing (TM) with
+signed/encrypted multipart messages.
Since signing and especially encryption often is used when sensitive
information is sent, you may want to have some way to ensure that your
whomever actually did with that funny looking person at that strange
party the other night, actually will be sent encrypted.
-@emph{Note!} Neither @sc{pgp/mime} nor @sc{s/mime} encrypt/signs
-RFC822 headers. They only operate on the @sc{mime} object. Keep this
+@emph{Note!} Neither @acronym{PGP/MIME} nor @acronym{S/MIME} encrypt/signs
+RFC822 headers. They only operate on the @acronym{MIME} object. Keep this
in mind before sending mail with a sensitive Subject line.
+By default, when encrypting a message, Gnus will use the
+``signencrypt'' mode, which means the message is both signed and
+encrypted. If you would like to disable this for a particular
+message, give the @code{mml-secure-message-encrypt-*} command a prefix
+argument, e.g., @kbd{C-u C-c C-m c p}.
+
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
@subsection Using S/MIME
@emph{Note!} This section assume you have a basic familiarity with
-modern cryptography, @sc{s/mime}, various PKCS standards, OpenSSL and
+modern cryptography, @acronym{S/MIME}, various PKCS standards, OpenSSL and
so on.
-The @sc{s/mime} support in Message (and MML) require OpenSSL. OpenSSL
-perform the actual @sc{s/mime} sign/encrypt operations. OpenSSL can
-be found at @uref{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 @sc{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
-@sc{s/mime} messages you've probably already lost that contest.)
+The @acronym{S/MIME} support in Message (and @acronym{MML}) require
+OpenSSL. OpenSSL performs the actual @acronym{S/MIME} sign/encrypt
+operations. OpenSSL can be found at @uref{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
+@acronym{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 @acronym{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
+required. Message (@acronym{MML}) need a certificate for the person to whom you
wish to communicate with though. You're asked for this when you type
@kbd{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 @sc{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.)
+file, it need to contain a X.509 certificate in @acronym{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 (@acronym{MML}) is the first mail agent in the world to support
+retrieving @acronym{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
+where your private key and your certificate is stored. @acronym{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
@kbd{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 @sc{s/mime} certificate from one of the big CA's on the
+and got a free @acronym{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.
The @file{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.
+@emph{Note!} Your private key is now stored unencrypted in the file,
+so take care in handling it. Storing encrypted keys on the disk are
+supported, and Gnus will ask you for a passphrase before invoking
+OpenSSL. Read the OpenSSL documentation for how to achieve this. If
+you use unencrypted keys (e.g., if they are on a secure storage, or if
+you are on a secure single user machine) simply press @code{RET} at
+the passphrase prompt.
@subsection Using PGP/MIME
-@sc{pgp/mime} requires an external OpenPGP implementation, such as GNU
-Privacy Guard (@uref{http://www.gnupg.org/}). One Emacs interface to
-OpenPGP implementations, PGG (@pxref{Top, ,PGG, pgg, PGG Manual}), is
-included, but Mailcrypt and Florian Weimer's @code{gpg.el} are also
-supported.
+@acronym{PGP/MIME} requires an external OpenPGP implementation, such
+as @uref{http://www.gnupg.org/, GNU Privacy Guard}. Pre-OpenPGP
+implementations such as PGP 2.x and PGP 5.x are also supported. One
+Emacs interface to the PGP implementations, PGG (@pxref{Top, ,PGG,
+pgg, PGG Manual}), is included, but Mailcrypt and Florian Weimer's
+@code{gpg.el} are also supported.
@vindex gpg-temp-directory
Note, if you are using the @code{gpg.el} you must make sure that the
-directory specified by @code{gpg-temp-directory} have permissions 0700.
+directory specified by @code{gpg-temp-directory} have permissions
+0700.
+
+Creating your own key is described in detail in the documentation of
+your PGP implementation, so we refer to it.
+
+If you have imported your old PGP 2.x key into GnuPG, and want to send
+signed and encrypted messages to your fellow PGP 2.x users, you'll
+discover that the receiver cannot understand what you send. One
+solution is to use PGP 2.x instead (i.e., if you use @code{pgg}, set
+@code{pgg-default-scheme} to @code{pgp}). If you do want to use
+GnuPG, you can use a compatibility script called @code{gpg-2comp}
+available from
+@uref{http://muppet.faveve.uni-stuttgart.de/~gero/gpg-2comp/}. You
+could also convince your fellow PGP 2.x users to convert to GnuPG.
+@vindex mml-signencrypt-style-alist
+As a final workaround, you can make the sign and encryption work in
+two steps; separately sign, then encrypt a message. If you would like
+to change this behavior you can customize the
+@code{mml-signencrypt-style-alist} variable. For example:
-Creating your own OpenPGP key is described in detail in the
-documentation of your OpenPGP implementation, so we refer to it.
+@lisp
+(setq mml-signencrypt-style-alist '(("smime" separate)
+ ("pgp" separate)
+ ("pgpauto" separate)
+ ("pgpmime" separate)))
+@end lisp
+
+This causes to sign and encrypt in two passes, thus generating a
+message that can be understood by PGP version 2.
+
+(Refer to @uref{http://www.gnupg.org/gph/en/pgp2x.html} for more
+information about the problem.)
@node Various Commands
@section Various Commands
@vindex message-elide-ellipsis
Elide the text between point and mark (@code{message-elide-region}).
The text is killed and replaced with the contents of the variable
-@code{message-elide-ellipsis}. The default value is to use an ellipsis
+@code{message-elide-ellipsis}. The default value is to use an ellipsis
(@samp{[...]}).
+@item C-c M-k
+@kindex C-c M-k
+@findex message-kill-address
+Kill the address under point.
+
@item C-c C-z
-@kindex C-c C-x
+@kindex C-c C-z
@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}).
@kindex TAB
@findex message-tab
@vindex message-tab-body-function
-If non-@code{nil} execute the function specified in
-@code{message-tab-body-function}. Otherwise use the function bound to
-@kbd{TAB} in @code{text-mode-map} or @code{global-map}.
+If @code{message-tab-body-function} is non-@code{nil}, execute the
+function it specifies. Otherwise use the function bound to @kbd{TAB} in
+@code{text-mode-map} or @code{global-map}.
@end table
@section Mail Aliases
@cindex mail aliases
@cindex aliases
+@cindex completion
+@cindex ecomplete
@vindex message-mail-alias-type
The @code{message-mail-alias-type} variable controls what type of mail
-alias expansion to use. Currently only one form is supported---Message
-uses @code{mailabbrev} to handle mail aliases. If this variable is
+alias expansion to use. Currently two forms are supported:
+@code{mailabbrev} and @code{ecomplete}. If this variable is
@code{nil}, no mail alias expansion will be performed.
@code{mailabbrev} works by parsing the @file{/etc/mailrc} and
No expansion will be performed upon sending of the message---all
expansions have to be done explicitly.
+If you're using @code{ecomplete}, all addresses from @code{To} and
+@code{Cc} headers will automatically be put into the
+@file{~/.ecompleterc} file. When you enter text in the @code{To} and
+@code{Cc} headers, @code{ecomplete} will check out the values stored
+there and ``electrically'' say what completions are possible. To
+choose one of these completions, use the @kbd{M-n} command to move
+down to the list. Use @kbd{M-n} and @kbd{M-p} to move down and up the
+list, and @kbd{RET} to choose a completion.
@node Spelling
@section Spelling
@lisp
(setq ispell-message-dictionary-alist
'(("^Newsgroups:.*\\bde\\." . "deutsch8")
- (".*" . "default")))
+ (".*" . "default")))
@end lisp
@code{ispell} depends on having the external @samp{ispell} command
@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
+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 nil
-Just the address -- @samp{king@@grassland.com}.
+Just the address---@samp{king@@grassland.com}.
@item parens
@samp{king@@grassland.com (Elvis Parsley)}.
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: }
+to use abominations 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
@lisp
(setq message-subject-re-regexp
- "^\\(\\(\\([Rr][Ee]\\|[Ss][Vv]\\|[Aa][Ww]\\): *\\)+\\)")
+ (concat
+ "^[ \t]*"
+ "\\("
+ "\\("
+ "[Aa][Nn][Tt][Ww]\\.?\\|" ; antw
+ "[Aa][Ww]\\|" ; aw
+ "[Ff][Ww][Dd]?\\|" ; fwd
+ "[Oo][Dd][Pp]\\|" ; odp
+ "[Rr][Ee]\\|" ; re
+ "[Rr][\311\351][Ff]\\.?\\|" ; ref
+ "[Ss][Vv]" ; sv
+ "\\)"
+ "\\(\\[[0-9]*\\]\\)"
+ "*:[ \t]*"
+ "\\)"
+ "*[ \t]*"
+ ))
@end lisp
@item message-subject-trailing-was-query
lines. If @code{nil}, leave the subject unchanged. If it is the symbol
@code{ask}, query the user what do do. In this case, the subject is
matched against @code{message-subject-trailing-was-ask-regexp}. If
-@code{message-subject-trailing-was-query} is t, always strip the
+@code{message-subject-trailing-was-query} is @code{t}, always strip the
trailing old subject. In this case,
@code{message-subject-trailing-was-regexp} is used.
@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.
+Regexp matching alternative email addresses. The first address in the
+To, Cc or From headers of the original article matching this variable is
+used as the From field of outgoing messages, replacing the default From
+value.
+
+For example, if you have two secondary email addresses john@@home.net
+and john.doe@@work.com and want to use them in the From field when
+composing a reply to a message addressed to one of them, you could set
+this variable like this:
+
+@lisp
+(setq message-alternative-emails
+ (regexp-opt '("john@@home.net" "john.doe@@work.com")))
+@end lisp
+
+This variable has precedence over posting styles and anything that runs
+off @code{message-setup-hook}.
@item message-allow-no-recipients
@vindex message-allow-no-recipients
allowed. If it is @code{never}, the posting is not allowed. If it is
@code{ask} (the default), you are prompted.
+@item message-hidden-headers
+@vindex message-hidden-headers
+A regexp, a list of regexps, or a list where the first element is
+@code{not} and the rest are regexps. It says which headers to keep
+hidden when composing a message.
+
+@lisp
+(setq message-hidden-headers
+ '(not "From" "Subject" "To" "Cc" "Newsgroups"))
+@end lisp
+
+Headers are hidden using narrowing, you can use @kbd{M-x widen} to
+expose them in the buffer.
+
+@item message-header-synonyms
+@vindex message-header-synonyms
+A list of lists of header synonyms. E.g., if this list contains a
+member list with elements @code{Cc} and @code{To}, then
+@code{message-carefully-insert-headers} will not insert a @code{To}
+header when the message is already @code{Cc}ed to the recipient.
+
@end table
@item message-required-mail-headers
@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
+@code{(From Subject Date (optional . In-Reply-To) Message-ID
(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{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:}.
+Regexp of headers to be removed before mailing. The default is@*
+@samp{^[GF]cc:\\|^Resent-Fcc:\\|^Xref:\\|^X-Draft-From:\\|@*
+^X-Gnus-Agent-Meta-Information:}.
@item message-default-mail-headers
@vindex message-default-mail-headers
This string is inserted at the end of the headers in all message
buffers that are initialized as mail.
+@item message-generate-hashcash
+@vindex message-generate-hashcash
+Boolean variable that indicate whether @samp{X-Hashcash} headers
+should be computed for the message. @xref{Hashcash, ,Hashcash,gnus,
+The Gnus Manual}.
+
@end table
@findex message-smtpmail-send-it
@findex smtpmail-send-it
@findex feedmail-send-it
-Function used to send the current buffer as mail. The default is
-@code{message-send-mail-with-sendmail}. Other valid values include
+Function used to send the current buffer as mail. The default is
+@code{message-send-mail-with-sendmail}, or @code{smtpmail-send-it}
+according to the system. Other valid values include
@code{message-send-mail-with-mh}, @code{message-send-mail-with-qmail},
-@code{message-smtpmail-send-it}, @code{smtpmail-send-it} and
-@code{feedmail-send-it}.
+@code{message-smtpmail-send-it} and @code{feedmail-send-it}.
@item message-mh-deletable-headers
@vindex message-mh-deletable-headers
Non-@code{nil} means don't add @samp{-f username} to the sendmail
command line. Doing so would be even more evil than leaving it out.
+@item message-sendmail-envelope-from
+@vindex message-sendmail-envelope-from
+When @code{message-sendmail-f-is-evil} is @code{nil}, this specifies
+the address to use in the @acronym{SMTP} envelope. If it is
+@code{nil}, use @code{user-mail-address}. If it is the symbol
+@code{header}, use the @samp{From} header of the message.
+
@item message-mailer-swallows-blank-line
@vindex message-mailer-swallows-blank-line
Set this to non-@code{nil} if the system's mailer runs the header and
-body together. (This problem exists on Sunos 4 when sendmail is run
+body together. (This problem exists on SunOS 4 when sendmail is run
in remote mode.) The value should be an expression to test whether
the problem will actually occur.
@cindex Sun
@cindex i-did-not-set--mail-host-address--so-tickle-me
This required header will be generated by Message. A unique ID will be
-created based on the date, time, user name and system name. For the
-domain part, message will look (in this order) at
+created based on the date, time, user name (for the local part) and the
+domain part. For the domain part, message will look (in this order) at
@code{message-user-fqdn}, @code{system-name}, @code{mail-host-address}
and @code{message-user-mail-address} (i.e. @code{user-mail-address})
until a probably valid fully qualified domain name (FQDN) was found.
@findex yow
@cindex Mime-Version
-In addition, you can enter conses into this list. The car of this cons
+In addition, you can enter conses into this list. The @sc{car} of this cons
should be a symbol. This symbol's name is the name of the header, and
-the cdr can either be a string to be entered verbatim as the value of
+the @sc{cdr} can either be a string to be entered verbatim as the value of
this header, or it can be a function to be called. This function should
return a string to be inserted. For instance, if you want to insert
@code{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
something like @code{(X-Yow . yow)} into the list. The function
@code{yow} will then be called without any arguments.
-If the list contains a cons where the car of the cons is
-@code{optional}, the cdr of this cons will only be inserted if it is
+If the list contains a cons where the @sc{car} of the cons is
+@code{optional}, the @sc{cdr} of this cons will only be inserted if it is
non-@code{nil}.
If you want to delete an entry from this list, the following Lisp
@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:\\|^[BGF]cc:\\|^Resent-Fcc:\\|^X-Draft-From:}.
+@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:\\|@*
+^X-Draft-From:\\|^X-Gnus-Agent-Meta-Information:}.
@item message-default-news-headers
@vindex message-default-news-headers
Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
@end example
+@c FIXME: Add `message-insert-formated-citation-line' and
+@c `message-citation-line-format'
+
Point will be at the beginning of the body of the message when this
function is called.
cited text. If you change the citation line too much, readers of your
messages will have to adjust their Gnus, too. See the variable
@code{gnus-cite-attribution-suffix}. @xref{Article Highlighting, ,
-Article Highlighting, gnus}, for details.
+Article Highlighting, gnus, The Gnus Manual}, for details.
@item message-yank-prefix
@vindex message-yank-prefix
@cindex yanking
@cindex quoting
When you are replying to or following up an article, you normally want
-to quote the person you are answering. Inserting quoted text is done
-by @dfn{yanking}, and each line you yank will have
-@code{message-yank-prefix} prepended to it (except for quoted and
-empty lines which uses @code{message-yank-cited-prefix}). The default
-is @samp{> }.
+to quote the person you are answering. Inserting quoted text is done by
+@dfn{yanking}, and each line you yank will have
+@code{message-yank-prefix} prepended to it (except for quoted lines
+which use @code{message-yank-cited-prefix} and empty lines which use
+@code{message-yank-empty-prefix}). The default is @samp{> }.
@item message-yank-cited-prefix
@vindex message-yank-cited-prefix
@cindex yanking
@cindex cited
@cindex quoting
-When yanking text from a article which contains no text or already
-cited text, each line will be prefixed with the contents of this
-variable. The default is @samp{>}. See also
-@code{message-yank-prefix}.
+When yanking text from an article which contains already cited text,
+each line will be prefixed with the contents of this variable. The
+default is @samp{>}. See also @code{message-yank-prefix}.
+
+@item message-yank-empty-prefix
+@vindex message-yank-empty-prefix
+@cindex yanking
+@cindex quoting
+When yanking text from an article, each empty line will be prefixed with
+the contents of this variable. The default is @samp{>}. You can set
+this variable to an empty string to split the cited text into paragraphs
+automatically. See also @code{message-yank-prefix}.
@item message-indentation-spaces
@vindex message-indentation-spaces
that they ruin your beautiful design, like, totally.
Also note that no signature should be more than four lines long.
-Including ASCII graphics is an efficient way to get everybody to believe
-that you are silly and have nothing important to say.
+Including @acronym{ASCII} graphics is an efficient way to get
+everybody to believe that you are silly and have nothing important to
+say.
@node Various Message Variables
@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},
+Symbol naming a @acronym{MIME} charset. Non-@acronym{ASCII} characters
+in messages are assumed to be encoded using this charset. The default
+is @code{iso-8859-1} on non-@sc{mule} Emacsen; otherwise @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}
+Emacsen.) @xref{Charset Translation, , Charset Translation, emacs-mime,
+Emacs MIME Manual}, for details on the @sc{mule}-to-@acronym{MIME}
translation process.
@item message-signature-separator
@item message-directory
@vindex message-directory
Directory used by many mailey things. The default is @file{~/Mail/}.
+All other mail file variables are derived from @code{message-directory}.
@item message-auto-save-directory
@vindex message-auto-save-directory
@item message-cancel-hook
@vindex message-cancel-hook
-Hook run when cancelling news articles.
+Hook run when canceling news articles.
@item message-mode-syntax-table
@vindex message-mode-syntax-table
Syntax table used in message mode buffers.
+@item message-cite-articles-with-x-no-archive
+@vindex message-cite-articles-with-x-no-archive
+If non-@code{nil}, don't strip quoted text from articles that have
+@samp{X-No-Archive} set. Even if this variable isn't set, you can
+undo the stripping by hitting the @code{undo} keystroke.
+
@item message-strip-special-text-properties
@vindex message-strip-special-text-properties
Emacs has a number of special text properties which can break message
@item message-send-method-alist
@vindex message-send-method-alist
-
-Alist of ways to send outgoing messages. Each element has the form
+@findex message-mail-p
+@findex message-news-p
+@findex message-send-via-mail
+@findex message-send-via-news
+Alist of ways to send outgoing messages. Each element has the form:
@lisp
-(TYPE PREDICATE FUNCTION)
+(@var{type} @var{predicate} @var{function})
@end lisp
@table @var
@item predicate
A function called without any parameters to determine whether the
-message is a message of type @var{type}.
+message is a message of type @var{type}. The function will be called in
+the buffer where the message is.
@item function
A function to be called if @var{predicate} returns non-@code{nil}.
-@var{function} is called with one parameter -- the prefix.
+@var{function} is called with one parameter---the prefix.
@end table
+The default is:
+
@lisp
((news message-news-p message-send-via-news)
(mail message-mail-p message-send-via-mail))
@end lisp
-
-
+The @code{message-news-p} function returns non-@code{nil} if the message
+looks like news, and the @code{message-send-via-news} function sends the
+message according to the @code{message-send-news-function} variable
+(@pxref{News Variables}). The @code{message-mail-p} function returns
+non-@code{nil} if the message looks like mail, and the
+@code{message-send-via-mail} function sends the message according to the
+@code{message-send-mail-function} variable (@pxref{Mail Variables}).
+
+All the elements in this alist will be tried in order, so a message
+containing both a valid @samp{Newsgroups} header and a valid @samp{To}
+header, for example, will be sent as news, and then as mail.
@end table
killed, postponed or exited.
An @dfn{action} can be either: a normal function, or a list where the
-@code{car} is a function and the @code{cdr} is the list of arguments, or
+@sc{car} is a function and the @sc{cdr} is the list of arguments, or
a form to be @code{eval}ed.
@bye
@c End:
+
+@ignore
+ arch-tag: 16ab76af-a281-4e34-aed6-5624569f7601
+@end ignore