Composing Messages

MH 6.8 doesn't provide a visual front end for creating MIME messages. This means that you need to type some simple directives into your message draft, which takes a little getting used to if, for example, you've been using NeXTmail.

Mhn can be invoked from the ``What now?'' prompt to create a MIME message:

What now? edit mhn
Using edit mhn invokes the ``compose'' function of mhn.

It's also possible to instruct whatnow (the MH program responsible for handling your ``What now?'' instructions) to invoke mhn automatically, so that you don't need to type edit mhn. To do that, use an entry like this in your .mh_profile:

automhnproc: mhn

When mhn is invoked to compose a MIME message, each # directive in the message draft causes data from a file or from a command to be inserted.

If a file isn't specified with the directive, then a command is used to generate the data. For example, consider this directive:

#audio/basic [record something here]
Because there's no file specified, mhn looks for this profile entry to record audio/basic data to insert into the draft:
mhn-compose-audio/basic: recorder '%F' -u -pause
This example is for HP 9000/710 workstations. Your audio recording command may differ. Refer to appendix [*] for more information about audio tools.

Two escape codes relevant to composition commands are these:
\begin{comdesc}
\item[\%f]
The \lq\lq \%f'' escape tells {\tt mhn} to supply the nam...
...rd output
(typically so that it's left attached to the terminal).
\end{comdesc}

Other escape codes that may be of use are documented in mhn(1).

In an mhn directive in a message draft, an appropriate program invocation (beginning with the pipe symbol, ``|'') in the place of a file name overrides an mhn-compose- profile entry.

Here is a synopsis of the syntax of mhn directives:


body 		
→		    (content | EOL)+

content directive | plaintext

directive # type / subtype
(; attribute = value)*
[ ( comment ) ]
[ [ description ] ]
[ filename ]
EOL
—For files or programs
|
#@ type / subtype
(; attribute = value)*
[ ( comment ) ]
[ [ description ] ]
external-parameters
EOL
—For external body parts
|
#forw
[ [ description ] ]
[ +folder ] [ msg* ]
EOL
— For message digests
|
#begin
[ [ description ] ]
[ alternative | parallel ]
EOL
body+
#end EOL
—For multipart messages

plaintext → [ Content-Description:
description EOL EOL ]
line+
[ # EOL ]
—Describes and encloses a text/plain part
|
#< type / subtype
(; attribute = value)*
[ ( comment ) ]
[ [ description ] ]
EOL
line+
[ # EOL ]
—Encloses plain text representation of data

line ## text EOL
—Interpreted as #text EOL
|
text EOL

Examples of various forms of mhn directives are scattered throughout this tutorial, particularly in sections [*], [*], and appendix [*].

Section [*] has a list of required attribute=value pairs to apply to external types. The MIME specification, RFC 1341, contains more detailed explanations of required or optional attributes. Type names and attributes used with mhn directives correspond to those used in the MIME specification.