]> diplodocus.org Git - nmh/blobdiff - man/mhbuild.man
new.c: Order two return statements to match comment.
[nmh] / man / mhbuild.man
index 4b261f33def3d05d61551ca2901f9d8d7ac6d1b4..5fdf7c2785b6f2c0de472bcb8ffa55a2e2c50266 100644 (file)
@@ -1,13 +1,15 @@
-.TH MHBUILD %manext1% "March 13, 2014" "%nmhversion%"
-.\"
+.TH MHBUILD %manext1% 2016-10-15 "%nmhversion%"
+.
 .\" %nmhwarning%
-.\"
+.
 .SH NAME
-mhbuild \- translate MIME composition draft
+mhbuild \- translate MIME composition drafts for nmh messages
 .SH SYNOPSIS
 .na
 .HP 5
 .B mhbuild
+.RB [ \-help ]
+.RB [ \-version ]
 .I file
 .RB [ \-auto " | " \-noauto ]
 .RB [ \-list " | " \-nolist ]
@@ -19,45 +21,40 @@ mhbuild \- translate MIME composition draft
 .RB [ \-verbose " | " \-noverbose ]
 .RB [ \-disposition " | " \-nodisposition ]
 .RB [ \-check " | " \-nocheck ]
-.RB [ \-headerencoding 
-.IR encoding\-algorithm
+.RB [ \-headerencoding
+.I encoding-algorithm
 .RB " | " \-autoheaderencoding ]
 .RB [ \-maxunencoded
-.IR line\-length ]
+.IR line-length ]
 .RB [ \-dist ]
-.RB [ \-version ]
-.RB [ \-help ]
 .ad
 .SH DESCRIPTION
 The
 .B mhbuild
-command will translate a MIME composition draft into
-a valid MIME message.
+command will translate a MIME composition draft into a valid MIME message.
 .PP
 .B mhbuild
-creates multi-media messages as specified in RFC 2045
-to RFC 2049.  This includes the encoding of message headers as specified
-by RFC 2047, and the encoding of MIME parameters as specified in RFC 2231.
+creates multi-media messages as specified in RFCs 2045 through 2049.
+This includes the encoding of message headers as specified by RFC 2047,
+and, additionally, the encoding of MIME parameters as specified in RFC 2231.
 .PP
-If you specify the name of the composition file as \*(lq-\*(rq,
-then
+If you specify the name of the composition file as \*(lq-\*(rq, then
 .B mhbuild
-will accept the composition draft on the standard
-input.  If the translation of this input is successful,
+will accept the composition draft on the standard input.
+If the translation of this input is successful,
 .B mhbuild
-will output the new MIME message to the standard output.  This argument
-must be the last argument on the command line.
+will output the new MIME message to the standard output.
+This argument must be the last argument on the command line.
 .PP
-Otherwise if the file argument to
+Otherwise, if the file argument to
 .B mhbuild
-is the name of a valid
-composition file, and the translation is successful,
+is the name of a valid composition file, and the translation is successful,
 .B mhbuild
-will replace the original file with the new MIME message.  It will rename
-the original file to start with the \*(lq,\*(rq character and end with the
-string \*(lq.orig\*(rq, e.g., if you are editing the file \*(lqdraft\*(rq,
-it will be renamed to \*(lq,draft.orig\*(rq.  This allows you to easily
-recover the
+will replace the original file with the new MIME message.
+It will rename the original file to start with the \*(lq,\*(rq character
+and end with the string \*(lq.orig\*(rq, e.g., if you are editing the file
+\*(lqdraft\*(rq, it will be renamed to \*(lq,draft.orig\*(rq.
+This allows you to easily recover the
 .B mhbuild
 input file.
 .SS "Listing the Contents"
@@ -69,14 +66,14 @@ to list the table of contents associated with the MIME message that is created.
 .PP
 The
 .B \-headers
-switch indicates
-that a one-line banner should be displayed above the listing.  The
+switch indicates that a one-line banner should be displayed above the listing.
+The
 .B \-realsize
 switch tells
 .B mhbuild
-to evaluate the \*(lqnative\*(rq
-(decoded) format of each content prior to listing.  This provides an
-accurate count at the expense of a small delay.  If the
+to evaluate the \*(lqnative\*(rq (decoded) format of each content prior to listing.
+This provides an accurate count at the expense of a small delay.
+If the
 .B \-verbose
 switch
 is present, then the listing will show any \*(lqextra\*(rq information
@@ -90,11 +87,11 @@ the \*(lqContent-Disposition\*(rq header.
 .SS "Simplified Attachment Interface"
 For users who wish to simply attach files to text content,
 .B mhbuild
-will scan the composition file for \*(lqAttach\*(rq headers.  An
-\*(lqAttach\*(rq header contains a filename that will be appended to the
+will scan the composition file for \*(lqAttach\*(rq headers.
+An \*(lqAttach\*(rq header contains a filename that will be appended to the
 message using normal MIME encapsulation rules.  One filename is allowed
 per \*(lqAttach\*(rq header, but multiple \*(lqAttach\*(rq headers are
-allowed ber composition file.
+allowed per composition file.
 .PP
 These files will be appended after any other MIME content, including any
 content specified by
@@ -105,50 +102,219 @@ for more details.
 .PP
 By default, the Content-Disposition will be \*(lqattachment\*(rq.
 .B mhbuild
-looks for user profile and mhn.defaults entries of the form
+looks for user profile and
+.I mhn.defaults
+entries of the form
 .PP
 .RS 5
-mhbuild-disposition-<type>/<subtype>
+.BI mhbuild-disposition- type / subtype
 .RE
 or
 .RS 5
-mhbuild-disposition-<type>
+.BI mhbuild-disposition- type
 .RE
 .PP
 to supply the disposition value.  The only supported values are
-.I attachment
+\*(lqattachment\*(rq
 and
-.IR inline.
+\*(lqinline\*(rq.
+.SS "Convert Interface"
+The convert interface is a powerful mechanism that supports
+replying to MIME messages.
+These placeholders are used in the following description:
+.RS 5
+.TP 15
+.PD 0
+TYPE
+content type/subtype
+.TP
+CONVERTER
+external program, and any fixed arguments, to convert content, such as
+from a request to a reply
+.TP
+ARGSTRING
+arguments to pass from
+.B repl
+to
+.I CONVERTER
+.TP
+FILE
+full path of message being replied to
+.PD
+.RE
+The convert support is based on pseudoheaders of the form
+.PP
+.RS 5
+.nf
+.BI Nmh-mhbuild-file- TYPE : \0FILE
+.BI Nmh-mhbuild-args- TYPE : \0ARGSTRING
+.fi
+.RE
+.PP
+in the draft.
+For each such pseudoheader, mhbuild looks in the profile and
+.I mhn.defaults
+for the corresponding
+.I TYPE
+entry to find the converter that supports it:
+.PP
+.RS 5
+.BI mhbuild-convert- TYPE : \0CONVERTER
+.RE
+.PP
+It's a fatal error if no such entry is found for
+.IR TYPE .
+An empty entry, e.g.,
+.PP
+.RS 5
+.B mhbuild-convert-text/html:
+.RE
+.PP
+excludes parts of that
+.I TYPE
+from the draft.
+.PP
+The
+.I mhn.defaults
+file contains default
+.B mhbuild-convert-text/html
+and
+.B mhbuild-convert-text/plain
+entries.  Profile entries can be used to override corresponding
+.I mhn.defaults
+entries, as usual.  Text converters should limit text line lengths
+to a maximum of 78 characters, and must limit them to a maximum of 998
+characters, per RFC 5322 Sec.\& 2.1.1.
+.PP
+For each
+.I TYPE
+part in
+.IR FILE ,
+.B mhbuild
+runs
+.I CONVERTER ARGSTRING
+on the content of the part.
+Each part in
+.I FILE
+that has no corresponding TYPE entry in the profile or
+.I mhn.defaults
+is
+excluded from the draft; the user can include them using mhbuild directives.
+.PP
+.B repl
+inserts
+.B Nmh-mhbuild-text/html:
+and
+.B Nmh-mhbuild-text/plain:
+pseudoheaders in every draft.  The user can prevent insertion of
+content parts of either of those types by putting corresponding empty
+entries in their profile.
+.PP
+Only the highest precedence alternative with a supported
+.I TYPE
+of a multipart/alternative part is used.
+.PP
+mhn.defaults.sh selects the text/html-to-text/plain converter at
+install time.  It includes
+.B iconv
+and
+.BR par ,
+or
+.BR fmt ,
+in the pipeline only if they are found.
+.PP
+Some content types require the addition of parameters to the
+Content-Type header, such as \*(lqmethod=REPLY\*(rq
+for text/calendar.
+.B mhbuild
+looks for a Content-Type header, followed
+by a blank line, at the beginning of the converter output.
+If one is found, it is used for the corresponding part in the reply draft.
+.PP
+The convert interface doesn't support different
+.IR ARGSTRING s
+or different converters for different parts of the same
+.IR  TYPE .
+That would require associating parts by part number with the
+.IR ARGSTRING s
+or converters.  Instead, that can be done (currently, without using
+the convert support), with
+.B mhbuild
+directives as described below, e.g.,
+.PP
+.RS 5
+#text/html; charset=utf-8 *8bit | mhstore -noverbose -part 42.7 -outfile - | w3m -dump -cols 64 -T text/html -O utf-8
+.RE
+.PP
+The only way to mix convert pseudoheaders and
+.B mhbuild
+directives is to insert the directives before
+.B mhbuild
+is run, which is typically done by entering
+.I mime
+at the \*(lqWhat now?\*(rq prompt, or with an
+.B \-editor mhbuild
+switch.
+.PP
+These (optional) setup steps can make the convert support
+easier to use:
+.TP 5
+1)
+If the
+.B par
+program is installed on your system, it will be set by default
+(in
+.IR mhn.defaults )
+to filter the converter output.  It helps to set the PARINIT
+environment variable, as described in
+.IR par (1).
+.TP 5
+2)
+Add this line to your profile:
+.IP "" 10
+mhbuild-next: $EDITOR
+.IP "" 5
+assuming that your EDITOR environment variable is set; if not, replace
+EDITOR with the name of your editor.  Without that profile entry, a
+response of \*(lqe[dit]\*(rq at the What now? prompt will require
+specification of your editor if an
+.B \-editor mhbuild
+switch is used.
+.TP 5
+3)
+If using
+.BR repl ,
+source the Bourne-shell compatible functions in
+.IR %docdir%/contrib/replaliases .
+.br
+That script also sets the PARINIT environment variable if it was not set.
 .SS "Translating the Composition File"
 .B mhbuild
-is essentially a filter to aid in the composition of MIME
-messages.
+is essentially a filter to aid in the composition of MIME messages.
 .B mhbuild
 will convert an
 .B mhbuild
-\*(lqcomposition file\*(rq
-into a valid MIME message.  A
+\*(lqcomposition file\*(rq into a valid MIME message.
+An
 .B mhbuild
-\*(lqcomposition file\*(rq
-is just a file containing plain text that is interspersed
-with various
+\*(lqcomposition file\*(rq is just a file containing plain text that is
+interspersed with various
 .B mhbuild
-directives.  When this file is processed
-by
+directives.  When this file is processed by
 .BR mhbuild ,
-the various directives will be expanded to the
-appropriate content, and will be encoded according to the MIME standards.
+the various directives will be expanded to the appropriate content, and
+will be encoded according to the MIME standards.
 The resulting MIME message can then be sent by electronic mail.
 .PP
 The formal syntax for a
 .B mhbuild
-composition file is defined at the
-end of this document, but the ideas behind this format are not complex.
+composition file is defined at the end of this document, but the ideas
+behind this format are not complex.
 Basically, the body contains one or more contents.  A content consists of
 either a directive, indicated with a \*(lq#\*(rq as the first character
-of a line; or, plaintext (one or more lines of text).  The continuation
-character, \*(lq\\\*(lq, may be used to enter a single directive on more
-than one line, e.g.,
+of a line; or, plaintext (one or more lines of text).
+The continuation character, \*(lq\\\*(lq, may be used to enter a single
+directive on more than one line, e.g.,
 .PP
 .RS 5
 .nf
@@ -169,18 +335,18 @@ directives are honored at all.
 The
 .B \-directives
 switch allows control over whether mhbuild will honor any of the
-\*(lq#\*(rq-directives.  This can also be affected with the #on or
-#off directives, and #pop, which restores the state of processing to
-that preceding the most recent #on or #off.  (The #on, #off, and #pop
-directives are always honored, of course.) This allows inclusion of
-plain text which looks like mhbuild directives, without causing
-errors:
+\*(lq#\*(rq-directives.
+This can also be affected with the #on or #off directives, and #pop,
+which restores the state of processing to that preceding the most recent
+#on or #off.  (The #on, #off, and #pop directives are always honored,
+of course.) This allows inclusion of plain text which looks like mhbuild
+directives, without causing errors:
 .PP
 .RS 5
 .nf
 #off
 #include <stdio.h>
-printf("Hello, World!);
+printf("Hello, World!");
 #pop
 .fi
 .RE
@@ -191,9 +357,9 @@ The \*(lqtype\*(rq directive is used to directly specify the type and
 subtype of a content.  You may only specify discrete types in this manner
 (can't specify the types multipart or message with this directive).
 You may optionally specify the name of a file containing the contents
-in \*(lqnative\*(rq (decoded) format.  If this filename starts with the
-\*(lq|\*(rq character, then it represents a command to execute whose
-output is captured accordingly.
+in \*(lqnative\*(rq (decoded) format.
+If this filename starts with the \*(lq|\*(rq character, then it represents
+a command to execute whose output is captured accordingly.
 For example,
 .PP
 .RS 5
@@ -209,8 +375,7 @@ user's profile to determine how the different contents should be composed.
 This is accomplished by consulting a composition string, and executing
 it under
 .BR /bin/sh ,
-with the standard output set to the content.
-If the
+with the standard output set to the content.  If the
 .B \-verbose
 switch is given,
 .B mhbuild
@@ -219,14 +384,18 @@ will echo any commands that are used to create contents in this way.
 The composition string may contain the following escapes:
 .PP
 .RS 5
-.nf
-.ta \w'%P  'u
-%a     Insert parameters from directive
-%f     Insert filename containing content
-%F     %f, and stdout is not re-directed
-%s     Insert content subtype
-%%     Insert character %
-.fi
+.PD 0
+.IP %a
+Insert parameters from directive
+.IP %f
+Insert filename containing content
+.IP %F
+%f, and stdout is not re-directed
+.IP %s
+Insert content subtype
+.IP %%
+Insert character %
+.PD
 .RE
 .PP
 First,
@@ -234,19 +403,19 @@ First,
 will look for an entry of the form:
 .PP
 .RS 5
-mhbuild-compose-<type>/<subtype>
+.BI mhbuild-compose- type / subtype
 .RE
 .PP
-to determine the command to use to compose the content.  If this isn't
-found,
+to determine the command to use to compose the content.
+If this isn't found,
 .B mhbuild
 will look for an entry of the form:
 .PP
 .RS 5
-mhbuild-compose-<type>
+.BI mhbuild-compose- type
 .RE
 .PP
-to determine the composition command. If this isn't found,
+to determine the composition command.  If this isn't found,
 .B mhbuild
 will complain.
 .PP
@@ -259,16 +428,16 @@ mhbuild-compose-audio/basic: record | raw2audio -F
 Because commands like these will vary, depending on the display
 environment used for login, composition strings for different
 contents should probably be put in the file specified by the
-.B $MHBUILD
-environment variable, instead of directly in your
+MHBUILD environment variable, instead of directly in your
 user profile.
 .PP
 The \*(lqexternal-type\*(rq directives are used to provide a MIME
 reference to a content, rather than enclosing the contents itself
-(for instance, by specifying an ftp site).  Hence, instead of
-providing a filename as with the type directives, external-parameters
-are supplied.  These look like regular parameters, so they must be
-separated accordingly.  For example,
+(for instance, by specifying an ftp site).
+Hence, instead of providing a filename as with the type directives,
+external-parameters are supplied.
+These look like regular parameters, so they must be separated accordingly.
+For example,
 .PP
 .RS 5
 .nf
@@ -288,7 +457,8 @@ separated accordingly.  For example,
 You must give a description string to separate the content parameters
 from the external-parameters (although this string may be empty).
 This description string is specified by enclosing it within
-\*(lq[]\*(rq.  A disposition string, to appear in a
+\*(lq[]\*(rq.
+A disposition string, to appear in a
 \*(lqContent-Disposition\*(rq header, may appear in the optional
 \*(lq{}\*(rq.
 .PP
@@ -297,12 +467,12 @@ These parameters are of the form:
 .RS 5
 .nf
 .ta \w'access-type=  'u
-access-type=   usually \fIanon-ftp\fR, \fImail-server\fR, or \fIurl\fR
+access-type=   usually \*(lqanon-ftp\*(rq, \*(lqmail-server\*(rq, or \*(lqurl\*(rq
 name=  filename
 permission=    read-only or read-write
 site=  hostname
 directory=     directoryname (optional)
-mode=  usually \fIascii\fR or \fIimage\fR (optional)
+mode=  usually \*(lqascii\*(rq or \*(lqimage\*(rq (optional)
 size=  number of octets
 server=        mailbox
 subject=       subject to send
@@ -311,9 +481,9 @@ url=        URL of content
 .fi
 .RE
 .PP
-A mimimum \*(lqexternal\-type\*(rq directive for the
+A minimum \*(lqexternal\-type\*(rq directive for the
 .B url
-.I access\-type
+.I access-type
 would be as follows:
 .PP
 .RS 3
@@ -327,13 +497,13 @@ Any long URLs will be wrapped according to RFC 2231 rules.
 .PP
 The \*(lqmessage\*(rq directive (#forw) is used to specify a message or
 group of messages to include.  You may optionally specify the name of
-the folder and which messages are to be forwarded.  If a folder is not
-given, it defaults to the current folder.  Similarly, if a message is not
-given, it defaults to the current message.  Hence, the message directive
-is similar to the
+the folder and which messages are to be forwarded.
+If a folder is not given, it defaults to the current folder.
+Similarly, if a message is not given, it defaults to the current message.
+Hence, the message directive is similar to the
 .B forw
-command, except that the former uses
-the MIME rules for encapsulation rather than those specified in RFC 934.
+command, except that the former uses the MIME rules for encapsulation
+rather than those specified in RFC 934.
 For example,
 .PP
 .RS 5
@@ -343,8 +513,8 @@ For example,
 .RE
 .PP
 If you include a single message, it will be included directly as a content
-of type \*(lqmessage/rfc822\*(rq.  If you include more than one message,
-then
+of type \*(lqmessage/rfc822\*(rq.
+If you include more than one message, then
 .B mhbuild
 will add a content of type \*(lqmultipart/digest\*(rq
 and include each message as a subpart of this content.
@@ -354,14 +524,14 @@ may use the
 .B \-rfc934mode
 switch.  This switch will indicate that
 .B mhbuild
-should attempt to utilize the MIME encapsulation rules
-in such a way that the \*(lqmultipart/digest\*(rq that is created
-is (mostly) compatible with the encapsulation specified in RFC 934.
+should attempt to utilize the MIME encapsulation rules in such a way
+that the \*(lqmultipart/digest\*(rq that is created is (mostly) compatible
+with the encapsulation specified in RFC 934.
 If given, then RFC 934 compliant user-agents should be able to burst the
 message on reception\0--\0providing that the messages being encapsulated
-do not contain encapsulated messages themselves.  The drawback of this
-approach is that the encapsulations are generated by placing an extra
-newline at the end of the body of each message.
+do not contain encapsulated messages themselves.
+The drawback of this approach is that the encapsulations are generated by
+placing an extra newline at the end of the body of each message.
 .PP
 The \*(lqbegin\*(rq directive is used to create a multipart content.
 When using the \*(lqbegin\*(rq directive, you must specify at least one
@@ -377,15 +547,15 @@ This will be a multipart with only one part.
 .PP
 If you use multiple directives in a composition draft,
 .B mhbuild
-will
-automatically encapsulate them inside a multipart content.  Therefore the
-\*(lqbegin\*(rq directive is only necessary if you wish to use nested
-multiparts, or create a multipart message containing only one part.
+will automatically encapsulate them inside a multipart content.
+Therefore the \*(lqbegin\*(rq directive is only necessary if you wish to
+use nested multiparts, or create a multipart message containing only one part.
 .PP
 For all of these directives, the user may include a brief description
 of the content between the \*(lq[\*(rq character and the \*(lq]\*(rq
-character.  This description will be copied into the
-\*(lqContent-Description\*(rq header when the directive is processed.
+character.
+This description will be copied into the \*(lqContent-Description\*(rq header
+when the directive is processed.
 .PP
 .RS 5
 .nf
@@ -398,8 +568,8 @@ Similarly, a disposition string may optionally be provided between
 \*(lqContent-Disposition\*(rq header when the directive is processed.
 If a disposition string is provided that does not contain a filename
 parameter, and a filename is provided in the directive, it will be
-added to the \*(lqContent-Disposition\*(rq header.  For example, the
-following directive:
+added to the \*(lqContent-Disposition\*(rq header.
+For example, the following directive:
 .PP
 .RS 5
 .nf
@@ -429,19 +599,21 @@ even in the top level of the message.
 Normally
 .B mhbuild
 will choose an appropriate Content\-Transfer\-Encoding based on the content
-and the MIME Content\-Type.  However, you can override that in an
+and the MIME Content\-Type.
+However, you can override that in an
 .B mhbuild
-directive by specifying \*(lq*\*(rq and the encoding.  Acceptable encoding
-values are \*(lq8bit\*(rq, \*(lqqp\*(rq (for quoted\-printable), and
-\*(lqb64\*(rq (for base64 encoding).  It should be noted that undesired
-results may occur if 8bit or quoted\-printable is selected for binary
-content, due to the translation between Unix line endings and the line
-endings use by the mail transport system.
+directive by specifying \*(lq*\*(rq and the encoding.
+Acceptable encoding values are \*(lq8bit\*(rq, \*(lqqp\*(rq
+(for quoted-printable), and \*(lqb64\*(rq (for base64 encoding).
+It should be noted that undesired results may occur if 8bit or quoted-printable
+is selected for binary content, due to the translation between Unix line endings
+and the line endings use by the mail transport system.
 .PP
 In addition to the various directives, plaintext can be present.
 Plaintext is gathered, until a directive is found or the draft is
-exhausted, and this is made to form a text content.  If the plaintext
-must contain a \*(lq#\*(rq at the beginning of a line, simply double it,
+exhausted, and this is made to form a text content.
+If the plaintext must contain a \*(lq#\*(rq at the beginning of a line,
+simply double it,
 e.g.,
 .PP
 .RS 5
@@ -467,12 +639,11 @@ Content-Description: text
 .RE
 .PP
 then this will be used to describe the plaintext content.
-You MUST follow this line with a blank line before starting
-your text.
+You MUST follow this line with a blank line before starting your text.
 .PP
-By default, plaintext is captured as a text/plain content.  You can
-override this by starting the plaintext with \*(lq#<\*(rq followed by
-a content-type specification.  For example, e.g.,
+By default, plaintext is captured as a text/plain content.
+You can override this by starting the plaintext with \*(lq#<\*(rq followed
+by a content-type specification.  For example, e.g.,
 .PP
 .RS 5
 .nf
@@ -497,43 +668,48 @@ set by adding the \*(lqcharset\*(rq parameter to the directive.
 #<text/plain; charset=iso-8859-5
 .RE
 .PP
-If a text content contains any 8\-bit characters (characters with the
+If a text content contains any 8-bit characters (characters with the
 high bit set) and the character set is not specified as above, then
 .B mhbuild
-will assume the character set is of the type given by the
-standard
+will assume the character set is of the type given by the standard
 .IR locale (1)
-environment variables.  If these environment variables are not
-set, then the character set will be labeled as \*(lqx-unknown\*(rq.
+environment variables.
+If these environment variables are not set, then the character set
+will be labeled as \*(lqx-unknown\*(rq.
 .PP
-If a text content contains only 7\-bit characters and the character set
+If a text content contains only 7-bit characters and the character set
 is not specified as above, then the character set will be labeled as
 \*(lqus-ascii\*(rq.
 .PP
-By default text content with the high bit set is encoded with a 8bit
-Content\-Transfer\-Encoding.  If the text has lines longer than the value
-of
+By default text content with the high bit set is encoded with an 8-bit
+Content-Transfer-Encoding.
+If the text has lines longer than the value of
 .B \-maxunencoded
-(which defaults to 78) then the text is encoded using the quoted\-printable
+(which defaults to 78) then the text is encoded using the quoted-printable
 encoding.
 .PP
 The
 .B \-headerencoding
 switch will indicate which algorithm to use when encoding any message headers
-that contain 8\-bit characters.  The valid arguments are
+that contain 8-bit characters.
+The valid arguments are
 .I base64
-for based\-64 encoding and 
+for base-64 encoding,
 .I quoted
-for quoted\-printable encoding.  The
+for quoted-printable encoding, and
+.I utf\-8
+which requires that all 8-bit header field bodies be encoded as UTF-8
+(RFC 6530) and that the message be sent to a SMTP server that supports
+SMTPUTF8 (RFC 6531).
+The
 .B \-autoheaderencoding
-switch will instruct
+switch instructs
 .B mhbuild
-to automatically pick the algorithm that results in a shorter encoded string.
+to automatically pick the encoding, either base64 or quoted-printable,
+that results in a shorter encoded string.
 .PP
-Putting this all together,
-here is an example of a more complicated message draft.  The
-following draft will expand into a multipart/mixed message
-containing five parts:
+Putting this all together, here is an example of a more complex message draft,
+which will expand into a multipart/mixed message containing five parts:
 .PP
 .RS 5
 .nf
@@ -558,18 +734,19 @@ If
 is given the
 .B \-check
 switch, then it will also associate an integrity check with each
-\*(lqleaf\*(rq content.  This will add a Content-MD5 header field to
-the content, along with the md5 sum of the unencoded contents, per RFC
-1864.  This may be used by the receiver of the message to verify that
-the contents of the message were not changed in transport.
+\*(lqleaf\*(rq content.
+This will add a Content-MD5 header field to the content, along with the md5
+sum of the unencoded contents, per RFC 1864.
+This may be used by the receiver of the message to verify that the contents
+of the message were not changed in transport.
 .SS "Transfer Encodings"
 After
 .B mhbuild
-constructs the new MIME message by parsing directives,
-including files, etc., it scans the contents of the message to determine
-which transfer encoding to use.  It will check for 8bit data, long lines,
-spaces at the end of lines, and clashes with multipart boundaries.  It will
-then choose a transfer encoding appropriate for each content type.
+constructs the new MIME message by parsing directives, including files, etc.,
+it scans the contents of the message to determine which transfer encoding to use.
+It will check for 8-bit data, long lines, spaces at the end of lines, and
+clashes with multipart boundaries.
+It will then choose a transfer encoding appropriate for each content type.
 .PP
 If an integrity check is being associated with each content by using
 the
@@ -577,23 +754,23 @@ the
 switch, then
 .B mhbuild
 will encode each content with
-a transfer encoding, even it the content contains only 7\-bit data.  This
-is to increase the likelihood that the content is not changed while in
+a transfer encoding, even if the content contains only 7-bit data.
+This is to increase the likelihood that the content is not changed while in
 transport.
 .SS "Invoking mhbuild"
 Typically,
 .B mhbuild
 is invoked by the
 .B whatnow
-program.  This
-command will expect the body of the draft to be formatted as an
+program.
+This command will expect the body of the draft to be formatted as an
 .B mhbuild
-composition file.  Once you have composed this input file
-using a command such as
+composition file.
+Once you have composed this input file using a command such as
 .BR comp ,
-.BR repl ,
-or
 .BR forw ,
+or
+.BR repl ,
 you invoke
 .B mhbuild
 at the \*(lqWhat now\*(rq prompt with
@@ -602,7 +779,8 @@ at the \*(lqWhat now\*(rq prompt with
 What now? mime
 .RE
 .PP
-prior to sending the draft.  This will cause
+prior to sending the draft.
+This will cause
 .B whatnow
 to execute
 .B mhbuild
@@ -610,7 +788,8 @@ to translate the composition file into MIME format.
 .PP
 Normally it is an error to invoke
 .B mhbuild
-on file that already in MIME format.  The 
+on a file that is already in MIME format.
+The
 .B \-auto
 switch will cause
 .B mhbuild
@@ -649,15 +828,14 @@ will still encode message headers according to RFC 2047.
 .SS "User Environment"
 Because the environment in which
 .B mhbuild
-operates may vary for a
-user,
+operates may vary for a user,
 .B mhbuild
-will look for the environment variable
-.BR $MHBUILD .
+will look for the environment variable MHBUILD.
 If present, this specifies the name of an additional user profile which
-should be read.  Hence, when a user logs in on a particular machine,
-this environment variable should be set to refer to a file containing
-definitions useful for that machine.
+should be read.
+Hence, when a user logs in on a particular machine, this environment
+variable should be set to refer to a file containing definitions useful
+on that machine.
 .PP
 Finally,
 .B mhbuild
@@ -689,7 +867,7 @@ directive    ::=     "#" type "/" subtype
                          [ "<" id ">" ]
                          [ "[" description "]" ]
                          [ "{" disposition "}" ]
-                        [ "*8bit" | "*qp" | "*b64" ]
+                         [ "*8bit" | "*qp" | "*b64" ]
                          [ filename ]
                          EOL
 
@@ -699,7 +877,7 @@ directive    ::=     "#" type "/" subtype
                          [ "<" id ">" ]
                          [ "[" description "]" ]
                          [ "{" disposition "}" ]
-                        [ "*8bit" | "*qp" | "*b64" ]
+                         [ "*8bit" | "*qp" | "*b64" ]
                          external-parameters
                          EOL
 
@@ -731,7 +909,7 @@ plaintext    ::=     [ "Content-Description:"
                          [ "(" comment ")" ]
                          [ "[" description "]" ]
                          [ "{" disposition "}" ]
-                        [ "*8bit" | "*qp" | "*b64" ]
+                         [ "*8bit" | "*qp" | "*b64" ]
                          EOL
                          1*line
                      [ "#" EOL ]
@@ -743,70 +921,82 @@ line         ::=     "##" text EOL
 .RE
 .SH FILES
 .B mhbuild
-looks for additional user profile files and mhn.defaults in multiple
-locations: absolute pathnames are accessed directly, tilde expansion
-is done on usernames, and files are searched for in the user's
+looks for additional user profile files and
+.I mhn.defaults
+in multiple locations: absolute pathnames are accessed directly, tilde
+expansion is done on usernames, and files are searched for in the user's
 .I Mail
-directory as specified in their profile.  If not found there, the directory
+directory as specified in their profile.
+If not found there, the directory
 .RI \*(lq %nmhetcdir% \*(rq
 is checked.
 .PP
-.fc ^ ~
-.nf
-.ta \w'%nmhetcdir%/ExtraBigFileName  'u
-^$HOME/\&.mh\(ruprofile~^The user profile
-^$MHBUILD~^Additional profile entries
-^%nmhetcdir%/mhn.defaults~^System default MIME profile entries
-.fi
+.PD 0
+.TP 20
+$HOME/.mh_profile
+The user's profile.
+.TP
+$MHBUILD
+Additional profile entries.
+.TP
+%nmhetcdir%/mhn.defaults
+System default MIME profile entries.
+.PD
 .SH "PROFILE COMPONENTS"
-.fc ^ ~
-.nf
-.ta 2.4i
-.ta \w'ExtraBigProfileName  'u
-^Path:~^To determine the user's nmh directory
-^Current\-Folder:~^To find the default current folder
-^mhbuild-compose-<type>*~^Template for composing contents
-.fi
+.PD 0
+.TP 20
+Path:
+To determine the user's nmh directory.
+.TP
+Current\-Folder:
+To find the default current folder.
+.TP
+.RI mhbuild-compose- type* :
+Template for composing contents.
+.PD
 .SH "SEE ALSO"
 .IR mhlist (1),
 .IR mhshow (1),
 .IR mhstore (1)
 .PP
-.I "Proposed Standard for Message Encapsulation"
-(RFC 934),
-.PP
-.I "The Content-MD5 Header Field"
-(RFC 1864),
-.PP
 .I "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies"
-(RFC 2045),
+(RFC 2045)
 .PP
 .I "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types"
-(RFC 2046),
+(RFC 2046)
 .PP
 .I "Multipurpose Internet Mail Extensions (MIME) Part Three: Message Header Extensions for Non-ASCII Text"
-(RFC 2047),
+(RFC 2047)
 .PP
-.I "Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures"
-(RFC 2048),
+.I "Internet Message Format"
+(RFC 5322)
 .PP
-.I "Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples"
-(RFC 2049),
+.I "MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations"
+(RFC 2231)
+.PP
+.I "Proposed Standard for Message Encapsulation"
+(RFC 934)
+.PP
+.I "The Content-MD5 Header Field"
+(RFC 1864)
 .PP
 .I "Definition of the URL MIME External-Body Access-Type"
-(RFC 2017),
+(RFC 2017)
 .PP
-.I "MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations"
-(RFC 2231)
+.I "Overview and Framework for Internationalized Email"
+(RFC 6530)
+.PP
+.I "SMTP Extension for Internationalized Email"
+(RFC 6531)
 .SH DEFAULTS
 .nf
-.RB ` \-headers '
-.RB ` \-realsize '
-.RB ` \-norfc934mode '
-.RB ` \-contentid '
-.RB ` \-nocheck '
-.RB ` \-noverbose '
-.RB ` \-nodisposition '
-.RB ` \-autoheaderencoding '
-.RB ` "\-maxunencoded\ 78"'
+\-autoheaderencoding
+\-contentid
+\-headers
+\-maxunencoded 78
+\-nocheck
+\-nodisposition
+\-norfc934mode
+\-noverbose
+\-realsize
 .fi