インターネットメールは、もともとテキスト、それも7bitのASCII文字(英数字と若干の記号)だけの世界でした。
そのままでは、画像やプログラムなどの文字以外のデータはもちろん、文字ですら7bitで表せない文字コードでは送ることが出来ません。
そこで、メールで文字以外の色々なデータを取り扱う出来るように拡張する方法が考えられました。それがMIME(Multipurpose Internet Mail Extensions)です。
電八を始め、現在普及しているメーラーのほとんどが対応しています。
文字しか送れないメールで画像ファイルなどの文字以外のデータを送るには、データ内容を文字に変換して送ればいいことになります。
受け取ったメール内容を文字から逆にデータへ変換すると、元のファイルに戻ります。
一般に、データをある規則に則って異なる形式に変換することをエンコード(encode)、逆変換して元のデータに復元することをデコード(decode)と呼びます。
MIMEエンコード
MIMEで使われるエンコード方式は2種類あります。
- quoted-printable
- ヘッダ中ではQエンコードと呼ばれます。データを1バイトずつ16進数字で表します。1バイトを3バイトで表すことになるので、データ量が3倍になります。しかし、1文字ずつエンコードできるので、ASCII文字に時々ASCII以外の文字が混じるテキストであれば便利な方式です。
例1:93 64 90 4D 94 AA 8D 86
20 → =93=64=90=4D=94=AA=8D=86
=20 (9バイトが27バイトになった)
例2:quoted-printableの得意な例 Copyright© Den8club → Copyright=A9=20Den8club
- Base64
- ヘッダ中ではBエンコードと呼ばれます。データの内容に関係なく全体を規則的に変換します。具体的には3バイト(=24ビット)を6ビットずつ4つ(=24ビット)に分割して4文字に変換します。データ量は4/3倍になります。
例:93 64 90 4D 94 AA 8D 86
20 → k2SQTZSqjYYg
(9バイトが12バイトになった)
以上のような特徴から、添付ファイルのエンコードには普通Base64を使用します。
MIME以外のエンコード
文字にエンコードしてデータを送るアイデアはインターネット普及以前からあり、MIMEが広く普及する以前はインターネットメールでも使われました。
今でもひょっとすると遭遇するかもしれませんので、紹介しておきます。
これらのMIME以外の方式には、電信八号は対応していません。
- uuencode
- UNIX上で使われていた方式です。エンコード方法はBase64によく似ていますが、使用する文字が異なります。
- BinHex
- Macintosh上で開発された方式で、Macintosh以外には普及しませんでした。現在のMacintoshのメールソフトではBase64と互換性のあるMac Doubleと言う方式が使われているようです。
- ish
- インターネット普及以前のパソコン通信で広く使われていた方式です。
もし、これらのエンコード方式を使って添付する場合は、対応したエンコーダを用いて添付したいファイルをエンコードし、エンコード後のファイルを電八で添付してください。
これらのエンコード方式でエンコードされたファイルをデコードしたい場合は、電八で添付ファイルをいったん保存してから対応したデコーダで読み込むか、ドラッグ&ドロップでデコーダに渡してデコードしてください。
参照
文字に変換したファイルをメールに付け加えるだけでは、ファイル名もどんなファイルなのかも判りません。
第一、どこからどこまでがファイルを変換した文字部分か判別できなくては、デコードもできませんよね。
そこで、「ファイル名」、「ファイルの種類」などの情報をMIMEヘッダとして付加し、「変換したファイルの区切り」を入れて、複数の部分(パート)からなるメールメッセージを作ります。
これが、マルチパートメッセージ です。 マルチパートメッセージのメールはマルチパートメールと呼ばれます。
通常、テキストの本文パーツ以外に各部パーツを付け加える事から、これらのファイルを添付ファイル(attached file)と呼びます。
テキスト本文は空で添付ファイルだけ、というメールもあり得ますが、ウイルスかと疑われかねませんので、なるべく止めておきましょう。
電八では、マルチパートダイアログでマルチパートメールを操作します。
添付ファイルパートの例 (一部)
--Den8_4158b853d67e
Content-Type: application/octet-stream; name="Den8_32.1.5.1_All.lzh"
Content-Transfer-Encoding: Base64
Content-Disposition: attachment; filename="Den8_32.1.5.1_All.lzh"
SQAtbGg1LSqiBQAA8AwAjopXQSAChjVNDwABRGVuc2hpbjguZXhlGwBBAATCMkHEwwGQAawQQ6TE
AcDvKntHpMQBBQAALaQAACQQjr6++2jSdnf77Mn0mYBkMwXIsbY1wrhejSIxJG2DILIkIRGIZmST
内容(コンテンツ)のデータの種類(タイプ)を表すヘッダがContent-Typeヘッダ、そこに記述される種類を表す情報が「MIMEタイプ」と呼ばれています。
例えば、マルチパートメールのContent-Typeヘッダにも、multipart/mixed
というMIMEタイプが指定されています。
電八もこれでマルチパートメールだということが判り、マルチパートダイアログを開くことができるのです。
multipartの部分を(メディア)タイプ、mixedの部分をサブタイプと呼びます。
電八のマルチパートダイアログでの各パート(添付ファイル)の動作(アクション)は、[Content-Type] の設定でMIMEタイプの種別(と添付ファイル名の拡張子)ごとに設定できるようになっています。
もちろん、メールヘッダにもASCII文字しか使えないため、そのままでは日本語の実名も件名も使えません。
エンコードすればいいのですが、ヘッダ自身で使いますからMIMEヘッダにエンコードの情報を書く……というわけには行きません。
そこで、エンコード方式や区切りの印、文字コード情報とエンコードされたデータをひとまとめにしてASCII文字の単語として扱います。これをエンコードワード (encode-word) と 呼びます。
このエンコードワードは、MIMEに対応していないメーラーでは日本語にデコードされず、名前や件名が文字化けしたように見えたりする、ということも覚えておきましょう。
エンコードワードの例(Bエンコード)
=?iso-2022-jp?B?GyRCRUU/LkgsOWYbKEI=?=