電子メールの送信手段であるSMTP(Simple Mail Transfer Protocol)では、8ビット(バイナリ)の送信は原則として禁止されている。ESMTP(Enhanced SMTP)を使うことで8ビット送信が可能になるとのことだが、互換性の問題もあるため、送信側で7ビットのキャラクタに変換(エンコード)され、受信側で元の8ビットデータに復元(デコード)することが必要である。
8ビットデータを7ビットキャラクタに変換する方法はいくつかあるが、インターネットでの電子メールを使う場合は、BASE64とQuoted-Printableが標準的である。その他の方法としては、Macintoshで標準的に用いられるBinHEXや、UNIXで多く用いられるuuencodeなどがある。
BASE64は、3バイトのデータ毎に、4つの文字に変換していく方法である。Quoted-Printableは、1バイトの文字を、イコール記号と16進数表示であらわす(例:「=0D」)方法である。エンコーディングにより、BASE64では元のデータの3分の4に容量が増え、Quoted-Printableでは3倍になってしまう。以下に、BASE64エンコードについて、解説する。
BASE64のエンコードは下記のステップで行われる。
ここでエンコードするデータは、「Hello」をあらわす「48 , 65 ,6C , 6C , 6F」という5バイトである。(本来はエンコードする必要は無いが..)
変換ステップ | データ | |||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
元データ(16進表示) | 48 , 65 , 6C | 6C , 6F | ||||||||||||||||||||||||||||||||||||||||
48 | 65 | 6C | 6C | 6F | ||||||||||||||||||||||||||||||||||||||
ビット毎の認識 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
6ビット毎データ(10進表示) | 18 | 6 | 21 | 44 | 27 | 6 | 60 | |||||||||||||||||||||||||||||||||||
文字での置き換え | S | G | V | s | b | G | 8 | |||||||||||||||||||||||||||||||||||
端数を埋める | SGVsbG8= |
メールリーダの機能を制限して良いのであれば、これらのデコード機能を実装する必要もなくなる。つまり、MIME機能を持たせないという意味であり、ヘッダ部に日本語表記した場合の表示機能と、ファイル添付機能が実現できなくなる。(諦めてしまうのもひとつの手)
Protocol | Name | RFC |
---|---|---|
MIME | Multipurpose Internet Mail Extensions | 2045 |