= Multipurpose Internet Mail Extensions
:navtitle: MIME

== Overview

The base format of an email message is xref:messages/imf.adoc[Internet Message Format"],
but most contemporary messages use a format called
https://en.wikipedia.org/wiki/MIME["Multipurpose Internet Mail Extensions"].
MIME specifies how to extend a valid IMF message, dealing with character encodings, 
various file formats, and many other odds and ends that make email what it is today.

A user of email rarely has to be concerned with the MIME specifications. Usually the
communications system should take care of all the nitty gritty, and even then MIME 
processing is usually at a very low level. For this reason, the blissfully simple 
conception of a simple "email" is usually just fine from the perspective of a user
and even in most cases for a developer.




== Specifications

Multipurpose Internet Mail Extensions, or just MIME, functions much like an extension
to IMF in order to:

 * Add different character sets for internationalization
 * Allow for processing of media types other than plain text

=== RFC2045

https://tools.ietf.org/html/rfc2045[RFC2045] ("Multipurpose Internet Mail Extensions
Part One: Format of Internet Message Bodies")
describes the message body format of an email. It is part of a serious of MIME
specifications including <<RFC2046>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.
This particular document in the series specifies the various headers that
are used to describe the structure of a MIME message.



=== RFC2046

https://tools.ietf.org/html/rfc2046[RFC2046] ("Multipurpose Internet Mail Extensions
Part Two: Media Types") describes the various MIME media types, such as
plain text, images, videos, etc. It is part of the serious of MIME specifications
that includes <<RFC2045>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.




=== RFC2047

https://tools.ietf.org/html/rfc2047[RFC2047] ("MIME Part Three:
Message Header Extensions for Non-ASCII Text") describes, as the
title indicates, header extensions for non-ASCII text. It is part
of the series of MIME specifications that includes
<<RFC2045>>, <<RFC2046>>, <<RFC2048>>, and <<RFC2049>>.




=== RFC2048

https://tools.ietf.org/html/rfc2048[RFC2048] ("Multipurpose Internet Mail Extensions
Part Four: Registration Procedures") describes the procedure for registering a MIME
type. It is not directly relevant to James, but is part of the MIME series that includes
<<RFC2045>>, <<RFC2046>>, <<RFC2047>>, and <<RFC2049>>.

This specification was obsoleted by https://tools.ietf.org/html/rfc4288[RFC4288]
(which itself was obsoleted by https://tools.ietf.org/html/rfc6838[RFC6838]) and
https://tools.ietf.org/html/rfc4289[RFC4289].



=== RFC2049

https://tools.ietf.org/html/rfc2049[RFC2049] ("Multipurpose Internet Mail Extensions
Part Five: Conformance Criteria and Examples") mainly describes what portions of MIME
must be supported by a conformant MIME implementation. It is part of the series that includes
<<RFC2045>>, <<RFC2046>>, <<RFC2047>>, and <<RFC2049>>.



== James Model

While a general, non-technical description of MIME is useful for most users
and developers, it is not sufficient for building a complex system like James. Meanwhile,
the technical specifications are unfortunately very messy and overly-complex due to 
their history and the context in which they were developed. To make dealing with 
emails possible and practical, James has defined its own version of what it means 
to be an email.

(TODO need a reference, please!)
