MIME(Multipurpose Internet Mail Extensions)は、E-mailに各種添付ファイルを付けて送信する場合のメール拡張機能の事です。SMTPでは7ビットASCII文字制約があり、問題無く送るためには、8ビットバイナリデータを符号化する必要があります。符号化には何種類かありますが、よく使用さえるのは7-Bit、Base64があります。ここでは主にBASE64について説明します。
Base64エンコードBase64エンコードが8ビットデータの7ビットデータへのエンコードを可能にしている方法を理解するには、エンコードが行われる方法を図にしてみるといいでしょう。図1は、いくつかの異なる方法で表現した5バイトのメッセージの例です。
図1
Base64エンコードを使って図1のメッセージをエンコードするために、メッセージのバイナリ表現が使われます。最初に、24ビットで表された3バイトが取り出されて、6ビットごとの4つのグループに分けられます。(図2参照)。
図2
次に、この6ビットごとのグループが評価され、それをASCII文字に直すために表1に示した対応する値と比較されます。図3は、このような変換メカニズムを使ってエンコードされたメッセージを示しています。
表1 Base64エンコードのアルファベット
左:6ビットの値(10進)/右:対応するASCII文字 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (穴埋め用) = 15 P 32 g 49 x 16 Q 33 h 50 y
図3
24ビットのデータでは完全に割り切れないメッセージのエンコードを可能にするため、末尾のバイトを穴埋めする手法が使われます。図4は、データが8ビット、あるいは16ビットで終わっているときに、穴埋め文字がどのように使われるかを示しています。
図4
インターネット上では、メールメッセージにおさめた数多くのファイルが送られます。
開発するサンプルメールリーダーでは、埋め込まれたファイルを送受信するためにBase64エンコードを利用します。