MH & nmh: Email for Users & Programmers

May, 2006

Introduction to MIME

Until 1992, "standard" email was mostly restricted to plain English text. Multimedia email messages (with characters from non-English languages, motion pictures, sound bites, spreadsheets, hypertext links, interactive order forms, and other interesting stuff) are fairly new. With the MIME (Multipurpose Internet Mail Extensions) functions in MH, you can read and send multimedia messages now. Most popular MUAs also have some MIME support. Not everything works seamlessly, but the situation is a lot better than it was just a few years ago.

To appreciate the changes MIME brought and why it works the way it does, here's some email history. Email on UNIX started in the days when a tty was actually a teletype. (A teletype resembles a typewriter. It prints electrically-transmitted text onto paper. I used to run a teletype for Western Union, the telegraph company in the USA, back when people used to send telegrams. Now I do feel old. :-)) Digital pictures and sound, and the high-speed networks needed to carry them, were research curiosities.

Back then, email messages (at least in the United States, where a lot of the UNIX development happened) were ASCII text -- and there was more than one version of ASCII. (Strictly speaking, the version of ASCII used in "standard" email is named US-ASCII or ANSI X3.4-1986. But the acronym most people seem to use for "printable English text" is just "ASCII." At the risk of being inaccurate, I'll use "ASCII" in this book.)

"Networks," for most people, were UUCP links over dialup modems; in many cases, email was transmitted with 7-bit-wide data paths that couldn't carry binary (8-bit, non-ASCII) text. When you needed to email binary text, such as an executable program or a compressed archive file, you preprocessed the binary file through the ASCII converter program uuencode(1). The recipient used uudecode(1) to restore the binary file. This worked pretty well -- as long as you were computer-literate enough to know what to do with the binary text once you'd uudecoded it, and as long as your version of uuencode was compatible with the other person's.

The sidebar ASCII, bits, etc. has more information.

As networks and computing evolved, uuencode wasn't enough. Users wanted easier and more reliable ways to handle binary text automatically. Internet mail transfer still used a 7-bit-wide path. Worse, uuencoded text was munged (changed) by some non-UUCP networks and gateways between networks. Users and vendors found solutions, but these different solutions wouldn't always work with each other. The answer is MIME. This chapter introduces it.

If your MH system is set up correctly, you can probably read incoming mail without reading this chapter: MH will "do the right thing." If you need to send messages that contain anything except ASCII text, though, you'll need to know a little about MIME and how MH handles it. (You'll also need to read the chapters that explain how to read and send mail with MH. This chapter gives background information about MIME that isn't in those chapters.) And if you want to understand what's in the messages you read, or you want to be able to change the way MH treats MIME messages, let's get started!