
もともと電子メールは英語圏で開発されたシステムであり、コンピュータが普及して多言語対応になる以前から使われてきた。メッセージの標準文字セットは「US-ASCII」であり、そのメールを扱うプロトコルである「SMTP(Simple Mail Transfer Protocol)」を実装したソフトウェア(メールサーバーやメールクライアント)もまた、US-ASCIIを標準の文字セットとしている。
7ビットを越えるMIMEのヘッダフィールド
記述される文字は、1文字1バイトといっても実際には7ビットの情報である。つまり、7ビットで表現される文字で作られたシステムに、後から入ってきたものが8ビットで表現される文字で動作させようとしてもうまく動作しない可能性がある。
これではヨーロッパの英語以外の文字も日本語もメールで使うことはできず、データファイルなどバイナリデータはまったく扱えない厳しい制約となる。
そこで、7ビットの制約を越えて、多言語及び多様なデータを扱えるように考えられたのが「MIME(Multipurpose Internet Mail Extensions、多目的インターネットメール拡張)」である。基本的には、US-ASCII以外の情報をUS-ASCIIに準じた文字表現に変換して、メールのやりとりを行なうという仕組みである。
MIMEは表1に示すようにPart 1~5に分冊されたRFCで標準化されている。この中でMIMEのメッセージ形式とMIMEのヘッダフィールドを定義しているのが、RFC2045 MIME Part 1である。まずMIMEの代表的な3つのヘッダフィールドについて説明しよう(図1)。

図1●MIMEの代表的な3つのヘッダフィールド
「MIME-Version」フィールドはMIME仕様のバージョンを示している。これは将来の仕様変更にも対応できるようにするために用意されたフィールドである。ソフトウェアの実装を考えた場合、バージョン番号を用いて明示的に仕様の種類を指定できるようにしておけば、後方互換性の問題を生ずる心配がない。万一、大幅な仕様の変更があっても、バージョン番号を識別して処理を使い分けるようにしておけば対応が可能になるわけだ。
次は「Content-Type」フィールドである。このフィールドはMIMEで扱うコンテンツのメディアタイプ(データの種類)とパラメータを定義するフィールドである。フォーマットは、さきの図1に示されているように「type」「subtype」と「parameter」の3つの情報で成り立っている。
この「type」パラメータには、text、image、audio、video、application、model、message、multipartの8種類の大分類が設定され、「subtype」にはそれぞれの大分類の中でさらに細かく分けられた定義を設定する。メディアタイプに指定できるパラメータの種類は多く、これらは、IANA(Internet Assigned Number Authority)で管理されている。詳しいパラメータの情報は、IANAのWebページ「http://www.iana.org/assignments/media-types/」で見ることができる。
3つ目は「Content-Transfer-Encoding」フィールドである。このフィールドは情報の符号化形式を示すフィールドである。設定できる値には7bit、8bit、binary、base64、quoted-printableの5種類がある。最初の3つは識別符号化と呼ばれていて、データが7ビット、8ビット、またはバイナリデータであることを示している。後の2つはデータの値が転送に適した形式に変換されたことを示している。
Content-TypeフィールドとContent-Transfer-Encodingフィールドの設定例を図2に示しているので説明しよう。これは、日本語でメッセージを作成した場合のMIMEヘッダフィールドだ。メディアタイプはテキストで、文字セットが「iso-2022-jp」である。そして、符号化形式が「7bit」となっている。これは日本語を扱うために文字セットにISO-2022-JPを使って文字が符号化されているが、この文字セットはUS-ASCIIと同様に、1バイトに設定される値が1から127の範囲であることを示している。

図2●MIMEヘッダフィールドの設定例(その1、日本語メッセージ)
ISO-2022-JPは、日本語の文字を7ビットで表現するために作られた文字セットである。JIS X 0208で定義されるいわゆる7ビットJISコードを基にして、日本語部分を「ESC$B」と「ESC(B」(または「ESC(J」)ではさむことで表現できるようにしたものだ(図3)。

図3●ISO-2022-JPによる日本語表現
一方、図4はビットマップファイル転送する際のMIMEヘッダフィールドの例である。メディアタイプはimageでビットマップ形式であることが示されている。そしてビットマップファイルはBASE64符号化が行なわれ、US-ASCII文字列のメッセージであることが示されている。

図4●MIMEヘッダフィールドの設定例(その2、ビットマップ)
(次ページ、バイナリデータをUS-ASCIIにBASE64)

この連載の記事
- 第9回 いろいろな場所で同じメールを読めるIMAPの仕組みとは?
- 第8回 メールクライアントの動作からPOPのやりとりを見てみよう
- 第7回 メールの受信用に作られたPOPを学ぶ
- 第6回 SMTPの拡張機能を確かめる「EHLOコマンド」を知ろう!
- 第5回 メールを送る際に使われるSMTPの仕組みとは?
- 第4回 メールの添付ファイルを実現するMIMEのマルチパートとは?
- 第2回 メールの宛名はどこにある?ヘッダを理解する
- 第1回 電子メールを基礎の基礎から学んでいこう
- 電子メールプロトコル再入門<目次>
- この連載の一覧へ