● ファイルに関する情報を送るしくみ
 BASE64エンコーディングを使うと,画像やWordファイルなどのバイナリデータも電子メールで送れることがわかりました.しかし,BASE64ではファイルの中身そのものをASCII文字列に変換することしか行いません.そのため,画像や音声の形式やファイル名といったファイルに関する情報はなくなってしまいます.
 そこで,メールの本文部分ではなくヘッダ部分に,データの形式やもともとのファイル名といったファイルに関する情報を格納します.HTTPでは,Content-Typeというヘッダ情報を用いて,画像ファイルの形式や表示するのに必要なアプリケーションソフトを指定することができました.メールでもまったく同じしくみが導入されています.Content-Typeの具体的な例は次節で見ていきます.
● 文章とファイルをいっしょに送るしくみ
 最近のほとんどのメールソフトでは,メールの本文にファイルを添付して,1つのメールとして送受信することができます.このようなメールは,図7のように漢字コードで書かれた本文とBASE64でエンコードされたファイルが1つのメールの中にいっしょになって,メールの本文となります.これをマルチパートメールと呼びます.一方,本文が1つしかないメールをシングルパートメールと呼びます.
 図8はシングルパートメールとマルチパートメールの大まかな形です.これまでのシングルパートメールでは,メールヘッダの後にメールの本文が続きます.マルチパートメールでは,メールヘッダの後に,内容それぞれを区切る行で本文が始まります.そして区切り行,内容,区切り行,内容と続いていきます.
 区切り行がメールの内容の行とまったく同じものになってしまうと,区切り行なのか内容なのかがわからなくなってしまいます.そこで,メールソフトがそれぞれの内容を1つにつなぎ合わせるときに,ランダムな英数字を用いて区切り行を作成します.
 もちろん,内容とたまたま同じものになってしまった場合は,もう一度ランダムな英数字を作り直します.そして,区切り行としてどのような文字列が使われているかを表すために,メールのヘッダ部分のContent-Typeのboundary情報として格納します.
 メールを受け取ったメールソフトは,Content-Typeを読み込んで,マルチパートかどうかを判断します.もしマルチパートであった場合は,boundary情報を読み込んで,区切り行がどのような文字列で表されているかを確認します.そして,本文の中から区切り行を見つけ出し,本文をもとの複数の内容に分解していきます.
 区切り行で区切られた部分も,図8のようにヘッダと本文からなっています.ヘッダには,Content-Type情報が入っていて,テキスト,画像といったファイル形式やファイル名が格納されています.もちろん区切られた部分のContent-Typeがmultipartとなっていて,さらに複数の内容からなっている,といったことも可能です.


〔図7〕マルチパートメールが作られるようす


図7


〔図8〕シングルパートメールとマルチパートメールの比較


図8


ASCII文字はなぜ7ビット?
 コンピュータができた当時は,メモリ素子も少なく,通信速度も遅く,通信料も高かったため,1ビットでも情報量を減らしたいという要求がありました.そのため,英数字や記号だけを表現するのに最低限必要なビット数として7ビットが選ばれました.
 しかし,しばらくするとコンピュータの内部は8ビットになり,通信路も8ビットや16ビットを単位として扱うようになりました.
 しかし英語文化圏ではデータとしては7ビットで十分であったため,インターネットの中のメールやニュースなどの古くからあるソフトウェアの中には,8ビットめを正しく扱っていないものがあります.そのためインターネットではASCII文字以外の情報を送るときには,8ビットめが正しく伝わらなかった場合でも情報が正しく伝わるように,BASE64やQuoted-Printableエンコーディングを用いることになっています.



 CQ出版 TOP OPENDESIGN TOPOPENDESIGN Online目次に戻る   
Copyright CQ Publishing Co.,Ltd. 1997-2001