No225 メールの添付ファイルの仕組み

今回もメールの裏側の仕組みについて解説します。

今回は、メールでの添付ファイルがどのように実現されているか
について解説します。


1. 添付ファイルはメール本文に埋め込まれている

メールを送信する時にファイルを付けて送ることができます。
いわゆる添付ファイルです。

ですが、添付ファイルがどのように実現されているかを知っている
方は少ないようです。何となく、メール本文と添付ファイルを別の
ものとして送っているとお考えの方もおられるではないかと思い
ます。

実際には、メール本文の後に添付ファイルの内容を追加し、1本の
長いメールにして送っています。1本のメールにまとめる処理は
メールソフトが行っています。

つまり、メールを作る時に添付ファイルを指定すると、メール
ソフトはそのファイルを読み込んで、本文の後ろにそれを追加して
メールとして送るのです。

受信側では逆の動きとなります。つまり、メールソフトは本文に
添付ファイルが付いているかを調べ、付いている場合は画面上に
それを表示して、利用者に伝えます。
メール本文を画面に出す時には、添付ファイルの部分は表示しま
せん。

前回、英数字以外の言語独自文字(フランス語のセディーユ付き
文字やドイツ語のウムラウト付き文字)を送る時にはメールソフト
がquoted-printableという方式で文字の置き換えをする、という
話をしました。

あの場合は、送信側メールソフト側が自動的にquoted-printableに
変換し、受信側のメールソフトも同様に自動的に復元しますから、
利用者は全く意識する必要はありません。

添付ファイルもそれと同様で、送信するメールソフトが自動的に
本文の後ろに添付ファイルの内容を付加し、受信側のメールソフト
も自動的に添付ファイルを切り出してくれるため、利用者はその
仕組みを知らなくても、添付ファイルが利用できるのです。


2. 添付ファイルはそのままでは送れない

ですが、ここで問題が出てきます。

前回も書いた通り、メールを送付するためのプロトコル(通信手順)
であるSMTP(Simple Mail Transfer Protocol)では英数字以外の
情報は送ることができません。

だからこそ、セディーユ付きの文字を送る時にはquoted-printable
といった方式でわざわざ変換をするわけです。

添付ファイルの内容が英数字だけとは限りません。
典型的なのは画像ファイルや圧縮ファイルなどの「バイナリファイ
ル」と呼ばれるものです。
こういったファイルでは英数字で表記できないデータをたくさん
含んでいます。

SMTPの制約がありますから、バイナリファイルであっても英数字で
表現しないことには、メールの末尾に追加するわけにいきません。

多少無理をすれば、quoted-printable形式でも送れますが、1文字
分のデータ表現に3文字が必要です。
さすがにこれは効率が悪すぎます。

これを解決する方法として規定されたのが、BASE64という方式です。


3. BASE64

BASE64はSMTPで使える64種の文字だけで、あらゆるデータを表記
できる方式として1993年に考案されました。

使える文字は、A~Zの大文字26文字+小文字26文字+数字10文字+
記号2種(+と/)の64種類です。

さて、この64種類の文字で、どうやってデータを変換するので
しょうか?

一般にコンピュータ上では8ビット(2進数で8ケタ分)のデータを
1バイトと呼び、1バイトで1文字のデータを示します。
1バイトで表現できる値は0~255の256種類ありますので、アル
ファベット圏で使うような英数字+記号くらいなら十分と言え
ます。日本語の漢字など256種類くらいではどうにもならない
言語では、2バイトや3バイトで1文字を表記します。

さて、BASE64の64という数字には意味があって、これは6ビット
(2進数で6ケタ分)で表現できる0~63の64種類を示しています。

この256種類をうまく64種類にマッピングするのですが、この
過程は2進数の計算を多用するものとなり、繁雑な説明とならざる
を得ませんので詳しい解説は省略します。

ちなみにBASE64を用いると、3バイトの元データが4バイトになり
ます。つまり、データ量が約1.3倍となります。
とはいえ、上述のquoted-printableが3倍になるのに比べれば、
はるかに効率が良いと言えます。

このようにBASE64方式は効率が良いため、メール以外にも利用が
されています。もっとも裏方での利用方法が多く、皆さんが目に
する機会はあまりなさそうです。


4. マルチパートという方式

添付ファイルはメール本文の末尾に付加されると書きました。

メールには添付ファイルだけでなく、複数のデータを付加する
仕組みが定められています。

これをマルチパートと言います。

よく使われるのはHTMLメールとテキストメールの併存です。

HTMLメールは文字に色を付けたり画像を入れたりと表現力が拡がる
反面、セキュリティリスクがあります。
そのため、HTMLメールを表示しない設定にしている方もおられます。
(筆者も表示させない派です)

実は、HTMLメールであっても内部には文字だけのメール(テキスト
メール)を付加している場合があります。というかほとんどのケース
ではテキストメールが付加されています。

これはHTML版とテキスト版の2つの本文を1つのメールで送る機能
を使うのですが、これがメールのマルチパート機能です。

複数の本文を入れてパターンだけでなく、添付ファイルも内部では
このマルチパート機能を使って実現しています。

このマルパートは本来はもっと巾広く使われるはずでした。
例えばメールに英語とスペイン語を両方入れておいて、利用者が
親しい言語で表示ができる、また音声や動画を本文として登録して
おき、メールを開くと動画や音声を再生するといった利用も想定
されていました。

ところが、それを使いこなすのが大変なためか、ほとんど利用
されませんでした。また、メールソフト側で本文のマルチパートに
対応できているものも少なく、ますます使われなくなってしまい
ました。
結局、マルチパートの利用はHTMLメールとテキストメールを混在
程度に留まっています。

このマルチパートという仕組みは様々な可能性を秘めています。
ひょっとすると、近いうちにマルチパートが大ブレクする日が
来ないとも限りません。


5. まとめ

メールでよく使われている添付ファイルは、一つのメールに添付
ファイルのデータを追加して送っているものです。

ですが、メールの送受信を行うSMTPという通信手順っでは、本文
には、英数字と多少の記号くらいしか使えません。

そのルールに合わせるため、添付データは通常BASE64という方式を
使ってメールに付加できる文字に変換を行います。

添付メールの仕組み自体はMIMEのマルチパートという規格に基づい
ています。マルチパートは、もともと1つのメール内に複数の本文
を混在させたり、メールに他のデータを持たせるためのルールです。
メール本文の混在という意味では、当初の狙いであった複数の言語
や音声、動画の混在の形ではほぼ利用されておらず、HTMLメールと
テキストメールの混在という形で使われている程度です。

今回解説したBASE64もマルチパートもいずれもMIME(マイム)と
呼ばれる1990年代に定められた規格です。(前回解説したquoted-
printableもMIMEで規定されています)

これだけ変化が早いコンピュータの世界でも、SMTPやMIMEのように
30年も40年も使われ続けている規格があるというのは興味深いこと
ですね。

メールシステムの解説については今回で終わりとなります。
次回もお楽しみに。

この記事が気に入ったらサポートをしてみませんか?