2018-09-18 23:13 — asano
カテゴリー:
誰もがお世話になっているメールへのファイル添付、簡単な操作で可能になっていますが昔は結構面倒なものでした。
メール本文に添付ファイルのデータを単純に結合するだけだといろいろな問題が発生します。
- バイナリファイルにはメール本文に使用できないコード(制御文字やビット7が立っている文字等)や改行文字のように変換される可能性のあるコードが含まれている
- どこからどこまでが添付ファイルのデータかわからなくなる
- ファイル名等のメタデータをどうするのか
- 通信エラー等にどう対処するのか
そこで添付したいファイルを専用のソフトウェアでテキスト形式に変換(エンコード)し、これをメール本文(の末尾など)に挿入して送信します。
受信側では添付データ(のテキスト化された)部分を切り出して専用ソフトウェアで元に戻す(デコード)ことになります。
ファイルが大きすぎる(時代によりますが、私が始めた頃は50kBくらいでしょうか)場合には分割・結合の作業も必要でした。
この変換にはいくつかの方式が使われましたが、今ではほぼbase64に収束しています。
- ISH
私が初めて使ったのがISHでした。いわゆるパソコン通信用に日本で開発されたフリーウェアで、上記1~4すべてに対応しています。自動的に分割する機能の他、受信側では該当部分を切り出す必要も無く丸ごと処理(分割されている場合でも順番を気にせず全部を結合するだけでOK)という便利なものでした。
エラー訂正も強力だったと思います。
日本のローカルBBSだとシフトJISが使えるところも多く、シフトJISを使うモードもありました。もちろんオプションで7ビットにも対応しています。
私は電話回線を使ったいわゆるパソコン通信はまったくやりませんでしたが、アマチュア無線のRBBS用に使っていました。
ファイルの拡張子は".ish"が用いられます。
- uuencode
UNIXの標準ツールです。前記ISHより歴史は古いですが、私が使い始めたのは1993年頃からでしょうか。386bsdやFreeBSDを使い始めてからです。
通信エラーについては下のレイヤーで対処するのが前提で、必要最小限のチェックサム程度だったと思います。
切り出しも結構面倒で、OS標準のデコーダuudecodeだと先頭にある無関係な行も読み飛ばしてくれません。初期の頃はエディタで手作業で切り出していました。すぐにスクリプトを書きましたが。
後に登場したツールuudeviewでは先頭のゴミを読み飛ばしてくれるようになったほか、MIMEのmultipartにも対応したのでこの辺りはだいぶ楽になっています。MIME登場まではメール添付の最も一般的な形式でした。今でも多くのメールソフトウェアが対応しています。
ファイルの拡張子は".uu"や".uue"がよく用いられます。
- BinHex
Macintoshでよく用いられた形式ですが、正直私はほとんど使っていません。ファイルの拡張子は".hqx"がよく用いられます。
- base64
MIME(Multipurpose Internet Mail Extension)で規定されたもので、現在最も一般的に使われているものです。2.データ範囲の特定はMIMEのmultipartを、3.メタデータについてはMIMEヘッダを用いる前提です。
コメント
添付ファイルが通らない場合に……
ちょっとした事情で送りたいファイルがあったのですがDOS窓からcertutilコマンドでbase64テキストに変換し、メモ帳で読んでメールの本文に貼り付けて送信し、受信先では本文を切り取ってテキストファイルに保存しcertutilコマンドを使って戻しました。
昔BBSにishでバイナリファイルをアップしていた頃のスキルが今になって役立つとは(^_^;)
コメントを追加