---
name: "mh-mime"
section: "7mh"
platform: "linux"
package: "nmh"
version: "1.8-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mh-mime"
---

# mh-mime(7mh)

overview of nmh MIME message composition and display

## NAME

mh-mime - overview of nmh MIME message composition and display

## DESCRIPTION

The acronym MIME stands for Multipurpose Internet Mail Extensions, the format of Internet messages used to send multi-media content. The **nmh** command suite has support for the display and composition of MIME messages, but currently MIME support is not completely integrated into all tools.  This document provides an overview as to which tools support MIME message display, storage, and composition.

### Local Character Set Conversion

All of the **nmh** commands convert non-native character sets to the local character set, as specified by the operating system locale settings.  See [*locale*(1)](/locale/1.md) for more details on the environment variables used to set the local character set.  Character set conversion will only take place if **nmh** was built with [*iconv*(3)](/iconv/3.md) support.  See [*mhparam*(1)](/mhparam/1.md) for how to determine whether your **nmh** installation includes [*iconv*(3)](/iconv/3.md) support.

Depending on the source and target character set, it may not be possible to convert all characters to the local character set.  In this case a substitution character will be used for the characters that cannot be converted.

### Message Display

The default format used by [*scan*(1)](/scan/1.md) will automatically decode MIME-encoded headers.  If you have a custom **scan** format, see the examples provided with the **nmh** distribution (found in the “*/etc/nmh*” directory) and [*mh-format*(5)](/mh-format/5.md) for details on how to make sure your MIME headers are properly decoded.

By default, if **show** detects that it is reading a MIME message it will invoke [*mhshow*(1)](/mhshow/1.md). The default behavior of **mhshow** is to only display text parts that are not marked as attachments.  See [*mhshow*(1)](/mhshow/1.md) for details on how to control what **mhshow** will display.

### Message Interrogation and Storage

The [*mhlist*(1)](/mhlist/1.md) command will display a listing of the MIME parts contained within a message.  That information can be used in conjunction with the **mhstore** command to save individual parts or content types of a message.  See [*mhlist*(1)](/mhlist/1.md) and [*mhstore*(1)](/mhstore/1.md) for more details on how these commands work.

### Message Composition and Reply

All messages sent by [*send*(1)](/send/1.md) will automatically be processed by [*mhbuild*(1)](/mhbuild/1.md) before being passed to *post*(1) for message submission. **mhbuild** will use the locale settings to mark text content with the appropriate character set and apply any necessary encoding.  If you wish to include text in your message using a character set that does not match your locale, you will need to specify the character set using an **mhbuild** directive; see [*mhbuild*(1)](/mhbuild/1.md) for more information.

For attaching files or composing other non-text content, there are two options: the attach system and **mhbuild** directives.

The attach system is best suited for content where one or more files are being attached to a message.  You can use the attach system by either using the **attach** command at the “What now?” prompt, or by inserting an “Attach:” header in the message draft containing the name of the file you wish to attach to the message (note that all the **attach** command does is place an “Attach:” header in the message draft). **mhbuild** will then automatically include the specified file(s) in the outgoing message.  See [*send*(1)](/send/1.md) for details on how **mhbuild** determines the proper content type of attached files.

The other method of composing MIME messages is to use **mhbuild** directives.  This allows exact control over the contents and format of the MIME message, but has a more complicated syntax. [*mhbuild*(1)](/mhbuild/1.md) contains details on the directive syntax and examples of directives for different media types.  It is important to note that when using **mhbuild** directives the user must run **mhbuild** outside of **send** to have it process directives; when being run by **send**, **mhbuild** is configured to not process directives so normal user text is not mistaken for a directive.  When using directives a user typically uses the **mime** command at the “What now?” prompt to process them.

When replying to messages using [*repl*(1)](/repl/1.md) the traditional MH method of including the original text in the reply does not interoperate with MIME messages.  The **-convertargs** switch to [*repl*(1)](/repl/1.md) provides one solution.  Another solution:  the contrib directory (*/usr/share/doc/nmh/contrib*) contains a Perl program called **replyfilter** which will decode text parts and present them in an appropriate manner to be included in a message reply.  See the comments at the top of **replyfilter** for instructions on how to configure **nmh** to work with it.

### Message Rewrite

The *mhfixmsg*(1) command can apply various transformations to MIME messages, including decoding of text parts, converting the character set of text parts, and insertion of text/plain parts to correspond to text parts of other subtypes. **mhfixmsg** can also repair defects in MIME messages, such as mismatched top-level boundary indicators and invalid Content-Transfer-Encoding values.

## SEE ALSO

[*comp*(1)](/comp/1.md), [*iconv*(3)](/iconv/3.md), [*mh-format*(5)](/mh-format/5.md), [*mhbuild*(1)](/mhbuild/1.md), *mhfixmsg*(1), [*mhparam*(1)](/mhparam/1.md), [*nmh*(7)](/nmh/7.md), [*repl*(1)](/repl/1.md), [*whatnow*(1)](/whatnow/1.md),\
 */usr/share/doc/nmh/contrib/replyfilter*,\
 */usr/share/doc/nmh/contrib/replaliases*

## BUGS

MIME support should be more integrated into all of the **nmh** tools than it currently is.
