MIME

読み:まいむ / 英語表記:Multipurpose Internet Mail Extensions

電子メールで、文字の種類、画像や添付ファイルなどを扱うための拡張規則。本文の種類や転送時の表現をヘッダーで指定し、表示名などの非ASCII文字はencoded-wordによる表記も利用できる。

イマシルちゃんの解説

封筒の中に、手紙と写真を一緒に入れて送りたいとするよ。
何が入っていて、どう開けばよいかという案内を付ければ、受け取った人も困りにくいよね。

読める文字が限られた受付を通すときは、決めた書換え方で控えを作る。
送り先の番地と、見せたい名前を別々に書くことも大切なんだ。

より深い解説

メールを拡張する規則

MIMEはRFC 2045〜2049などで定義される。文字だけのメールを越えて、複数の種類の内容を扱えるようにする。送信や配送そのものはSMTPなどが担当する。

フィールド役割
Content-Typetext/plainやimage/pngなど、内容の種類を示す
Content-Transfer-Encoding本文を転送用にどう表すかを示す
MIME-VersionMIMEの版を示す

文字の符号化方式と、転送時の表現は別の観点である。たとえばUTF-8の文字列を、さらに転送用の符号化へ変換することがある。

バイナリデータを文字で表す

Base64は、バイト列を限定された文字集合で表す方式である。基本的には3バイトを4文字へ変換するため、データ量は概ね4/3倍になる。末尾には長さを整えるためのパディングが付く場合がある。

この変換は暗号化ではない。規則を知っていれば元へ戻せるため、情報を秘密にする目的には使えない。配送のために表現を変えることと、内容を保護することを区別する。

表示名とアドレスの書き方

RFC 5322の名前付きアドレスでは、表示名を先に書き、実際のメールアドレスを山かっこで囲む。独自の例を示す。

From: Support Team <[email protected]>

表示名は人が読むための名前であり、それだけでは送信者の本人確認にならない。メール配送で使われるエンベロープの送信元と、Fromフィールドの値も別である。

ヘッダー内の文字の表現

RFC 2047では、ヘッダーの指定された位置で非ASCII文字を表すencoded-wordを定める。

=?文字セット?符号化方式?符号化した文字列?=
要素意味
文字セット元の文字列をどの文字コードで表したか
BBase64による符号化
Q印字可能な文字を多く残す符号化

この表記は表示名などで使う。メールアドレス全体をこの形へ置き換えるものではない。UTF-8を直接利用する国際化メールの拡張とは、適用する規則が異なる。

複数の部分をまとめる

本文と添付などを一つのメールで扱う場合、multipartの構造を使う。各部分をboundaryで区切り、それぞれに内容の種類などを指定する。

S/MIMEは、メールの署名や暗号化を扱う別の拡張である。MIME形式で表現できることだけで、機密性や送信者の正当性が保証されるわけではない。

HTTPとの関係

Content-Typeで使うメディアタイプやmultipartの構造は、HTTPでも利用される。たとえば、HTTPの応答は受け取った内容の種類をメディアタイプで示し、フォーム送信では複数の部分に分けたデータを扱う場合がある。MIMEの仕組みをメール配送のプロトコルそのものと混同しない。

実際の試験ではここに出る!

この用語が出てくる記事

↑