+2003-10-23 Teodor Zlatanov <tzz@lifelogs.com>
+
+ * gnus.el (spam-process-destination, ham-process-destination):
+ allow multiple groups as a choice
+
+ * spam.el (spam-check-blackholes): remove "[IP address]"
+ requirement, now just "IP address" is enough for detection for
+ blackhole checking
+ (spam-check-blackholes): oops, the dots were not escaped
+ (spam-mark-spam-as-expired-and-move-routine): added multiple group
+ support (multiple copies, then delete)
+ (spam-ham-copy-routine): new function
+ (spam-ham-move-routine): new function
+ (spam-ham-copy-or-move-routine): new function (used to be
+ spam-ham-move-routine), handle multiple groups
+ (spam-summary-prepare-exit): call the new functions
+
2003-10-23 Simon Josefsson <jas@extundo.com>
* flow-fill.el (fill-flowed-encode, fill-flowed): Autoload.
(gnus-define-group-parameter
spam-process
:type list
- :parameter-type '(choice :tag "Spam Summary Exit Processor"
- :value nil
- (list :tag "Spam Summary Exit Processor Choices"
- (set
- (variable-item gnus-group-spam-exit-processor-ifile)
- (variable-item gnus-group-spam-exit-processor-stat)
- (variable-item gnus-group-spam-exit-processor-bogofilter)
- (variable-item gnus-group-spam-exit-processor-blacklist)
- (variable-item gnus-group-spam-exit-processor-report-gmane)
- (variable-item gnus-group-spam-exit-processor-spamoracle)
- (variable-item gnus-group-ham-exit-processor-bogofilter)
- (variable-item gnus-group-ham-exit-processor-ifile)
- (variable-item gnus-group-ham-exit-processor-stat)
- (variable-item gnus-group-ham-exit-processor-whitelist)
- (variable-item gnus-group-ham-exit-processor-BBDB)
- (variable-item gnus-group-ham-exit-processor-copy)
- (variable-item gnus-group-ham-exit-processor-spamoracle))))
+ :parameter-type
+ '(choice
+ :tag "Spam Summary Exit Processor"
+ :value nil
+ (list :tag "Spam Summary Exit Processor Choices"
+ (set
+ (variable-item gnus-group-spam-exit-processor-ifile)
+ (variable-item gnus-group-spam-exit-processor-stat)
+ (variable-item gnus-group-spam-exit-processor-bogofilter)
+ (variable-item gnus-group-spam-exit-processor-blacklist)
+ (variable-item gnus-group-spam-exit-processor-report-gmane)
+ (variable-item gnus-group-spam-exit-processor-spamoracle)
+ (variable-item gnus-group-ham-exit-processor-bogofilter)
+ (variable-item gnus-group-ham-exit-processor-ifile)
+ (variable-item gnus-group-ham-exit-processor-stat)
+ (variable-item gnus-group-ham-exit-processor-whitelist)
+ (variable-item gnus-group-ham-exit-processor-BBDB)
+ (variable-item gnus-group-ham-exit-processor-copy)
+ (variable-item gnus-group-ham-exit-processor-spamoracle))))
:function-document
- "Which spam or ham processors will be applied to the GROUP articles at summary exit."
+ "Which spam or ham processors will be applied when the summary is exited."
:variable gnus-spam-process-newsgroups
:variable-default nil
:variable-document
name regexps that should match all groups in which to do automatic
spam processing, associated with the appropriate processor."
:variable-group spam
- :variable-type '(repeat :tag "Spam/Ham Processors"
- (list :tag "Spam Summary Exit Processor Choices"
- (regexp :tag "Group Regexp")
- (set :tag "Spam/Ham Summary Exit Processor"
- (variable-item gnus-group-spam-exit-processor-ifile)
- (variable-item gnus-group-spam-exit-processor-stat)
- (variable-item gnus-group-spam-exit-processor-bogofilter)
- (variable-item gnus-group-spam-exit-processor-blacklist)
- (variable-item gnus-group-spam-exit-processor-report-gmane)
- (variable-item gnus-group-ham-exit-processor-bogofilter)
- (variable-item gnus-group-ham-exit-processor-ifile)
- (variable-item gnus-group-ham-exit-processor-stat)
- (variable-item gnus-group-ham-exit-processor-whitelist)
- (variable-item gnus-group-ham-exit-processor-BBDB)
- (variable-item gnus-group-ham-exit-processor-copy))))
+ :variable-type
+ '(repeat :tag "Spam/Ham Processors"
+ (list :tag "Spam Summary Exit Processor Choices"
+ (regexp :tag "Group Regexp")
+ (set
+ :tag "Spam/Ham Summary Exit Processor"
+ (variable-item gnus-group-spam-exit-processor-ifile)
+ (variable-item gnus-group-spam-exit-processor-stat)
+ (variable-item gnus-group-spam-exit-processor-bogofilter)
+ (variable-item gnus-group-spam-exit-processor-blacklist)
+ (variable-item gnus-group-spam-exit-processor-report-gmane)
+ (variable-item gnus-group-ham-exit-processor-bogofilter)
+ (variable-item gnus-group-ham-exit-processor-ifile)
+ (variable-item gnus-group-ham-exit-processor-stat)
+ (variable-item gnus-group-ham-exit-processor-whitelist)
+ (variable-item gnus-group-ham-exit-processor-BBDB)
+ (variable-item gnus-group-ham-exit-processor-copy))))
:parameter-document
- "Which spam processors will be applied to the spam or ham GROUP articles at summary exit.")
+ "Which spam or ham processors will be appliedwhen the summary is exited.")
(gnus-define-group-parameter
spam-process-destination
- :parameter-type '(choice :tag "Destination for spam-processed articles at summary exit"
- (string :tag "Move to a group")
- (const :tag "Expire" nil))
+ :parameter-type
+ '(choice :tag "Destination for spam-processed articles at summary exit"
+ (string :tag "Move to a group")
+ (repeat :tag "Move to multiple groups"
+ (string :tag "Destination group"))
+ (const :tag "Expire" nil))
:function-document
"Where spam-processed articles will go at summary exit."
:variable gnus-spam-process-destinations
group or nil for explicit expiration. This only makes sense for
mail groups."
:variable-group spam
- :variable-type '(repeat
- :tag "Spam-processed articles destination"
- (list
- (regexp :tag "Group Regexp")
- (choice
- :tag "Destination for spam-processed articles at summary exit"
- (string :tag "Move to a group")
- (const :tag "Expire" nil))))
+ :variable-type
+ '(repeat
+ :tag "Spam-processed articles destination"
+ (list
+ (regexp :tag "Group Regexp")
+ (choice
+ :tag "Destination for spam-processed articles at summary exit"
+ (string :tag "Move to a group")
+ (repeat :tag "Move to multiple groups"
+ (string :tag "Destination group"))
+ (const :tag "Expire" nil))))
:parameter-document
"Where spam-processed articles will go at summary exit.")
-
+
(gnus-define-group-parameter
ham-process-destination
- :parameter-type '(choice
- :tag "Destination for ham articles at summary exit from a spam group"
- (string :tag "Move to a group")
- (const :tag "Do nothing" nil))
+ :parameter-type
+ '(choice
+ :tag "Destination for ham articles at summary exit from a spam group"
+ (string :tag "Move to a group")
+ (repeat :tag "Move to multiple groups"
+ (string :tag "Destination group"))
+ (const :tag "Do nothing" nil))
:function-document
"Where ham articles will go at summary exit from a spam group."
:variable gnus-ham-process-destinations
group or nil for explicit ignoring. This only makes sense for
mail groups, and only works in spam groups."
:variable-group spam
- :variable-type '(repeat
- :tag "Ham articles destination"
- (list
- (regexp :tag "Group Regexp")
- (choice
- :tag "Destination for ham articles at summary exit from spam group"
- (string :tag "Move to a group")
- (const :tag "Expire" nil))))
+ :variable-type
+ '(repeat
+ :tag "Ham articles destination"
+ (list
+ (regexp :tag "Group Regexp")
+ (choice
+ :tag "Destination for ham articles at summary exit from spam group"
+ (string :tag "Move to a group")
+ (repeat :tag "Move to multiple groups"
+ (string :tag "Destination group"))
+ (const :tag "Expire" nil))))
:parameter-document
"Where ham articles will go at summary exit from a spam group.")
(when (spam-group-ham-processor-copy-p gnus-newsgroup-name)
(gnus-message 5 "Copying ham")
- (spam-ham-move-routine
- (gnus-parameter-ham-process-destination gnus-newsgroup-name) t))
+ (spam-ham-copy-routine
+ (gnus-parameter-ham-process-destination gnus-newsgroup-name)))
;; now move all ham articles out of spam groups
(when (spam-group-spam-contents-p gnus-newsgroup-name)
(dolist (article articles)
(gnus-summary-mark-article article gnus-spam-mark)))))
-(defun spam-mark-spam-as-expired-and-move-routine (&optional group)
+(defun spam-mark-spam-as-expired-and-move-routine (&rest groups)
(gnus-summary-kill-process-mark)
(let ((articles gnus-newsgroup-articles)
article tomove)
(gnus-summary-mark-article article gnus-expirable-mark)
(push article tomove)))
- ;; now do the actual move
- (when (and tomove
- (stringp group))
- (dolist (article tomove)
- (gnus-summary-set-process-mark article))
- (when tomove (gnus-summary-move-article nil group))))
+ ;; now do the actual copies
+ (dolist (group groups)
+ (when (and tomove
+ (stringp group))
+ (dolist (article tomove)
+ (gnus-summary-set-process-mark article))
+ (when tomove
+ (gnus-summary-copy-article nil group))))
+
+ ;; now delete the articles
+ (dolist (article tomove)
+ (gnus-summary-set-process-mark article))
+ (when tomove
+ (gnus-summary-delete-article nil)))
+
(gnus-summary-yank-process-mark))
-(defun spam-ham-move-routine (&optional group copy)
+(defun spam-ham-copy-or-move-routine (copy &rest groups)
(gnus-summary-kill-process-mark)
(let ((articles gnus-newsgroup-articles)
- article mark tomove)
- (when (stringp group) ; this routine will do nothing
- ; without a valid group
- (dolist (article articles)
- (when (spam-group-ham-mark-p gnus-newsgroup-name
- (gnus-summary-article-mark article))
- (push article tomove)))
+ article mark todo)
+ (dolist (article articles)
+ (when (spam-group-ham-mark-p gnus-newsgroup-name
+ (gnus-summary-article-mark article))
+ (push article todo)))
- ;; now do the actual move
- (when tomove
- (dolist (article tomove)
+ ;; now do the actual move
+ (dolist (group groups)
+ (when todo
+ (dolist (article todo)
(when spam-mark-ham-unread-before-move-from-spam-group
- (gnus-summary-mark-article article gnus-unread-mark))
+ (gnus-summary-mark-article article gnus-unread-mark))
(gnus-summary-set-process-mark article))
- (if copy
- (gnus-summary-copy-article nil group)
- (gnus-summary-move-article nil group)))))
+ (gnus-summary-copy-article nil group)))
+
+ ;; now delete the articles
+ (dolist (article todo)
+ (gnus-summary-set-process-mark article))
+ (when todo
+ (gnus-summary-delete-article nil)))
+
(gnus-summary-yank-process-mark))
+(defun spam-ham-copy-routine (&rest groups)
+ (spam-ham-copy-or-move-routine t groups))
+
+(defun spam-ham-move-routine (&rest groups)
+ (spam-ham-copy-or-move-routine nil groups))
+
(defun spam-generic-register-routine (spam-func ham-func)
(let ((articles gnus-newsgroup-articles)
article mark ham-articles spam-articles)
(goto-char (point-min))
(gnus-message 5 "Checking headers for relay addresses")
(while (re-search-forward
- "\\[\\([0-9]+.[0-9]+.[0-9]+.[0-9]+\\)\\]" nil t)
+ "\\([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+\\)" nil t)
(gnus-message 9 "Blackhole search found host IP %s." (match-string 1))
(push (spam-reverse-ip-string (match-string 1))
ips)))
+2003-10-23 Reiner Steib <Reiner.Steib@gmx.de>
+
+ * emacs-mime.texi: Markup: Use @acronym for MML and MIME.
+
+ * message.texi: Ditto.
+
+ * gnus.texi: Ditto.
+
2003-10-23 Simon Josefsson <jas@extundo.com>
* emacs-mime.texi (MML Definition): Add format.
@menu
* Decoding and Viewing:: A framework for decoding and viewing.
-* Composing:: MML; a language for describing @acronym{MIME} parts.
+* Composing:: @acronym{MML}; a language for describing @acronym{MIME} parts.
* Interface Functions:: An abstraction over the basic functions.
* Basic Functions:: Utility and basic parsing functions.
* Standards:: A summary of RFCs and working documents used.
@cindex MML
@cindex MIME Meta Language
-Creating a @acronym{MIME} message is boring and non-trivial. Therefore, a
-library called @code{mml} has been defined that parses a language called
-MML (@acronym{MIME} Meta Language) and generates @acronym{MIME} messages.
+Creating a @acronym{MIME} message is boring and non-trivial. Therefore,
+a library called @code{mml} has been defined that parses a language
+called @acronym{MML} (@acronym{MIME} Meta Language) and generates
+@acronym{MIME} messages.
@findex mml-generate-mime
The main interface function is @code{mml-generate-mime}. It will
string containing the @acronym{MIME} message.
@menu
-* Simple MML Example:: An example MML document.
-* MML Definition:: All valid MML elements.
-* Advanced MML Example:: Another example MML document.
+* Simple MML Example:: An example @acronym{MML} document.
+* MML Definition:: All valid @acronym{MML} elements.
+* Advanced MML Example:: Another example @acronym{MML} document.
* Encoding Customization:: Variables that affect encoding.
* Charset Translation:: How charsets are mapped from @sc{mule} to @acronym{MIME}.
-* Conversion:: Going from @acronym{MIME} to MML and vice versa.
+* Conversion:: Going from @acronym{MIME} to @acronym{MML} and vice versa.
* Flowed text:: Soft and hard newlines.
@end menu
@node MML Definition
@section MML Definition
-The MML language is very simple. It looks a bit like an SGML
+The @acronym{MML} language is very simple. It looks a bit like an SGML
application, but it's not.
-The main concept of MML is the @dfn{part}. Each part can be of a
+The main concept of @acronym{MML} is the @dfn{part}. Each part can be of a
different type or use a different charset. The way to delineate a part
is with a @samp{<#part ...>} tag. Multipart parts can be introduced
with the @samp{<#multipart ...>} tag. Parts are ended by the
but that's not necessary unless the value contains white space. So
@samp{filename=/home/user/#hello$^yes} is perfectly valid.
-The following parameters have meaning in MML; parameters that have no
-meaning are ignored. The MML parameter names are the same as the
+The following parameters have meaning in @acronym{MML}; parameters that have no
+meaning are ignored. The @acronym{MML} parameter names are the same as the
@acronym{MIME} parameter names; the things in the parentheses say which
header it will be used in.
The size (in octets) of the part (@code{Content-Disposition}).
@item sign
-What technology to sign this MML part with (@code{smime}, @code{pgp}
+What technology to sign this @acronym{MML} part with (@code{smime}, @code{pgp}
or @code{pgpmime})
@item encrypt
-What technology to encrypt this MML part with (@code{smime},
+What technology to encrypt this @acronym{MML} part with (@code{smime},
@code{pgp} or @code{pgpmime})
@end table
As an example, if you do not want to have ISO-8859-1 characters
quoted-printable encoded, you may add @code{(iso-8859-1 . 8bit)} to
this variable. You can override this setting on a per-message basis
-by using the @code{encoding} MML tag (@pxref{MML Definition}).
+by using the @code{encoding} @acronym{MML} tag (@pxref{MML Definition}).
@item mm-coding-system-priorities
@vindex mm-coding-system-priorities
to prefer UTF-8, but wish that outgoing messages should be sent in
ISO-8859-1 if possible, you can set this variable to
@code{(iso-latin-1)}. You can override this setting on a per-message
-basis by using the @code{charset} MML tag (@pxref{MML Definition}).
+basis by using the @code{charset} @acronym{MML} tag (@pxref{MML Definition}).
@item mm-content-transfer-encoding-defaults
@vindex mm-content-transfer-encoding-defaults
@acronym{MIME} encodings, @code{qp-or-base64} may be used to indicate that for
each case the most efficient of quoted-printable and base64 should be
used. You can override this setting on a per-message basis by using
-the @code{encoding} MML tag (@pxref{MML Definition}).
+the @code{encoding} @acronym{MML} tag (@pxref{MML Definition}).
@item mm-use-ultra-safe-encoding
@vindex mm-use-ultra-safe-encoding
@section Charset Translation
@cindex charsets
-During translation from MML to @acronym{MIME}, for each @acronym{MIME} part which
-has been composed inside Emacs, an appropriate charset has to be chosen.
+During translation from @acronym{MML} to @acronym{MIME}, for each
+@acronym{MIME} part which has been composed inside Emacs, an appropriate
+charset has to be chosen.
@vindex mail-parse-charset
If you are running a non-@sc{mule} Emacs, this process is simple: If the
Customization}).
The charset to be used can be overridden by setting the @code{charset}
-MML tag (@pxref{MML Definition}) when composing the message.
+@acronym{MML} tag (@pxref{MML Definition}) when composing the message.
The encoding of characters (quoted-printable, 8bit etc) is orthogonal
to the discussion here, and is controlled by the variables
@section Conversion
@findex mime-to-mml
-A (multipart) @acronym{MIME} message can be converted to MML with the
-@code{mime-to-mml} function. It works on the message in the current
-buffer, and substitutes MML markup for @acronym{MIME} boundaries.
-Non-textual parts do not have their contents in the buffer, but instead
-have the contents in separate buffers that are referred to from the MML
-tags.
+A (multipart) @acronym{MIME} message can be converted to @acronym{MML}
+with the @code{mime-to-mml} function. It works on the message in the
+current buffer, and substitutes @acronym{MML} markup for @acronym{MIME}
+boundaries. Non-textual parts do not have their contents in the buffer,
+but instead have the contents in separate buffers that are referred to
+from the @acronym{MML} tags.
@findex mml-to-mime
-An MML message can be converted back to @acronym{MIME} by the
+An @acronym{MML} message can be converted back to @acronym{MIME} by the
@code{mml-to-mime} function.
These functions are in certain senses ``lossy''---you will not get back
@code{gnus-message-replysignencrypted} (on by default) will sign
automatically encrypted messages.
-Instructing 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.
+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
@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
@code{message-forward-show-mml} \e$B$N%G%#%U%)%k%H$,\e(B @code{best} \e$B$KJQ$o$j$^\e(B
\e$B$7$?!#\e(B
-\e$BCM\e(B @code{best} \e$B$N?6$kIq$$$O!"$=$l$,$U$5$o$7$$>l9g$O\e(B MML \e$B$rI=<($9$k\e(B (\e$B$9$J\e(B
-\e$B$o$A\e(B MIME \e$B$r\e(B MML \e$B$KJQ49$9$k\e(B) \e$B$3$H$G$9!#JQ49$,%G%#%8%?%k=pL>$rL58z$K$7$F\e(B
-\e$B$7$^$&$N$G!"=pL>$5$l$?!"$^$?$O0E9f2=$5$l$?%a%C%;!<%8$rE>Aw$9$k$H$-\e(B
-\e$B$O\e(B MML \e$B$O;H$o$l$^$;$s!#\e(B
+\e$BCM\e(B @code{best} \e$B$N?6$kIq$$$O!"$=$l$,$U$5$o$7$$>l9g$O\e(B @acronym{MML} \e$B$rI=<(\e(B
+\e$B$9$k\e(B (\e$B$9$J$o$A\e(B @acronym{MIME} \e$B$KJQ49$9$k\e(B) \e$B$3$H$G$9!#JQ49$,%G%#%8%?%k=pL>\e(B
+\e$B$rL58z$K$7$F$7$^$&$N$G!"=pL>$5$l$?!"$^$?$O0E9f2=$5$l$?%a%C%;!<%8$rE>Aw$9\e(B
+\e$B$k$H$-$O\e(B @acronym{MML} \e$B$O;H$o$l$^$;$s!#\e(B
@end itemize
@iftex
@code{gnus-message-replysignencrypted} (on by default) will sign
automatically encrypted messages.
-Instructing 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.
+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
@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
@code{back-to-indentation}, which is also useful in message mode.
@item
-The default for message-forward-show-mml changed to symbol @code{best}.
+The default for @code{message-forward-show-mml} changed to symbol @code{best}.
-The behaviour for the @code{best} value is to show MML (i.e., convert MIME
-to MML) when appropriate. MML will not be used when forwarding signed
-or encrypted messages, as the conversion invalidate the digital
-signature.
+The behaviour for the @code{best} value is to show @acronym{MML} (i.e.,
+convert to @acronym{MIME}) when appropriate. @acronym{MML} will not be
+used when forwarding signed or encrypted messages, as the conversion
+invalidate the digital signature.
@end itemize
@iftex
be done with the @kbd{C-c C-a} command, which will prompt for a file
name and a @acronym{MIME} type.
-You can also create arbitrarily complex multiparts using the MML
+You can also create arbitrarily complex multiparts using the @acronym{MML}
language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
Manual}).
@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 @acronym{PGP} (RFC 1991), @acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.
-Instructing 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.
+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
@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
-@acronym{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 @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.
+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
modern cryptography, @acronym{S/MIME}, various PKCS standards, OpenSSL and
so on.
-The @acronym{S/MIME} support in Message (and 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.)
+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 @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 (MML) is the first mail agent in the world to support
+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
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.
be done with the @kbd{C-c C-a} command, which will prompt for a file
name and a @acronym{MIME} type.
-You can also create arbitrarily complex multiparts using the MML
+You can also create arbitrarily complex multiparts using the @acronym{MML}
language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
Manual}).
@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 @acronym{PGP} (RFC 1991), @acronym{PGP/MIME} (RFC 2015/3156) and @acronym{S/MIME}.
-Instructing 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.
+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
@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
-@acronym{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 @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.
+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
modern cryptography, @acronym{S/MIME}, various PKCS standards, OpenSSL and
so on.
-The @acronym{S/MIME} support in Message (and 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.)
+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 @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 (MML) is the first mail agent in the world to support
+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
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.