MIME(Multipurpose Internet Mail Extensions)

MIME が開発される以前、UUENCODE や Base64 などの符号化が一般的になる前は、電子メールでやり取りできる データはUS-ASCIIにかぎられていました。

しかし、テキスト以外のデータも存在し、画像、アプリケーションのデータ、動画など様々なデータを送受する 必要も出てきました。

そこで、旧来からの仕組みをほとんど変えることなく、さまざまなデータをやり取りするための MIME が開発されました。

MIMEの規格は RFC1521 と RFC1522 に文書化され、最新は RFC2045〜RFC2049 に文書化されています。

MIMEの主な特徴

  • Base64 などの符号化を標準にしてバイナリデータの転送を可能にする。それにより日本語などの 8ビットデータの送信が可能になった。
  • いくつかのデータをまとめて添付でき、コンテンツをアプリケーションや言語と関連付けて格納できる。

MIME の設定のほとんどは、ヘッダ部分で行われ、メールを取り出すソフトはそれを解析して内容を表示します。

MIMEのフィールド

MIME-Version
MIME で使用されているバージョン番号を示します。 現在の MIME バージョンは 1.0 になっています。 (例 : MIME-Version: 1.0)
Content-Type
Content-Type フィールドには、このメールに添付されているデータの種類が指定されています。 通常メールでは、 text/plain が指定され、プレーンテキスト形式であることがわかります。 画像をデータとして添付されたメールでは image/gif や image/jpeg が指定され、処理すべき アプリケーションを判断することができます。
Content-Description
Content-Descriptionは、コメントなどが記述されるヘッダフィールドです。
Content-Disposition
Content-Dispositionは、ボディに含まれるファイルなどのデータの属性を指定します 。 例えば、メッセージの本文(inline)と添付ファイル(attachment)の区別や、ファイルに 保存する場合のデフォルトファイル名が記されます。
Content-Transfer-Encoding
Content-Transfer-Encoding フィールドは、MIMEエンティティのボディがどのようにエンコード されているかを示します。

マルチパート

複数添付する場合、マルチパートメディアタイプというものをに利用します。

1つのパートは、「バウンダリ」と呼ばれる任意の文字列で区切られ、Content-Typeのboundaryパラメータで、 あらかじめヘッダに示されます。

マルチパートのサブタイプは、次のようなものがあります。

multipart/mixed
個々のパートはそれぞれ別のデータを示します。 メッセージを受け取った側では、任意の順番でデータを取り出すことができます。
multipart/alternative
含まれるメッセージのすべてのパートが同じ内容であることを示します。 例えば、同じ内容のテキストとHTMが含まれる場合などに使用される。
multipart/parallel
含まれるパートを複合して同時に表示させる必要があることを示します。
multipart/digest
主にニュースやメール・メッセージを複数含めることを目的としています。

バウンダリーの例

Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_003E_01C5A7F5.E54B9890"

//バウンダリ
------=_NextPart_000_003E_01C5A7F5.E54B9890