ポスペとザウとMIMEなメール
最終更新日:1999.06.26
ちょっと前の話なんですが、
パワーザウルス MI-500 シリーズと PostPet との間で、
画像付きメールの送受信がうまくできないという現象がありました
(現行機種では解決しています)。
同時に Macintosh とのメールやり取りについても調査しましたので、
ここにまとめておきます。
- MIザウルスの内蔵メーラー
MIザウルスは、SMTP,POP3に対応したメーラーを内蔵しており、
画像の添付も MIME BASE64 エンコードを利用しています。
従ってパソコンに限らずインターネットメールを扱える物とは、
まず大抵はやり取りできると思って良いでしょう。
ちなみにインターネットメールで日本語を扱う場合には、
ISO-2022-JPに変換して送受信することになってますから、
UNIXマシンからのメールだから読めないんじゃないか?
なんて事はありません。
もし、相手が EUC や Shift-JIS のままの本文を送ってきていたら、
そっちの方がおかしいのです。:-)
但し、本文じゃなく添付ファイルに関しては、
MIザウルスが MIME BASE64 だけに対応しているため、
相手もそれに対応していることが必要ですし、
その他、ファイルのサイズ制限などもありますから、
それらも気をつけた方が良いですね。
- MI-500とポスペのトラブル
事の起こりは、
外から MI-500 で撮影した画像をメールで送ってもらったことに始まります。
それまで、自分で送った画像が見れないという事はなかったのですが、
何故か『送ってもらった画像が開けない』という現象が起きました。
はじめは送信時に失敗したのだろうと、再度送り直してもらったのですが、
何度試してもダメ。確かに添付ファイルとして落ちているはずなのに、
どうしても中身を見る事ができません。
よくよく調べてみると、60〜70KB はあるはずの画像ファイルが、
わずか 1KB 未満というありさま。
そこで、最近何か変わった事が無かったかな・・・と考えてみると、
ちょうどパソコン上のメーラーを PostPet に替えたばかりです。
もしや・・・と別なメーラーに替えてみるとあっさり受信できるじゃないですか。
MI-500 と PostPet との間に何が・・・。
- 実験環境
- MI-506 (12), MI-610 (1C)
- Windows版のPostPet V1.12
- Macintosh版のPostPet お試し版
- Macintosh版のNetscape Communicator 4.03
添付画像は、DC-3Zで撮影した 640x480[pixel] のJPEG画像。
サイズは約80KBで、ザウルスの制限(126KB以内)に合致。
添付するファイルの名称は 8.3 文字形式で英数字のみ使用。
(ザウルス上から送る場合は自動的に8.3形式にする為、意識の必要無し)
- 実験を行う前に確認
始める前に、
まず本文だけのメールで相互にやり取りできるかを確認しておきます。
ここで失敗するようなら、IDやパスワードの設定ミスか、
プロバイダ側の回線、メールサーバーの問題だろうと推測されます。
- 画像添付して送受信
基本的な確認が終わったところで、
各メーラー間の添付画像付き送受信テストを行います。
○ ポスペ(Win) → MI-610
○ ポスペ(Win) → MI-506
ポスペからザウへは、特に問題はなく成功。
ファイル名とサイズに注意すれば大体OKのようです(^^)。
○ MI-610 → ポスペ(Win)
× MI-506 → ポスペ(Win)
MI-610ではあっさり成功しましたが、MI-506の方はうまくいかず(X_X)。
ポスペ側で確認すると、確かに添付ファイルがあり、
それを展開した事にはなっていますが、
なぜか画像ファイルのサイズが 1KB(正確には972byte)であり、
添付画像はまったく取得できていません。
- 謎解き
メーラー間の相性だと言えばそれまでなんですが、
せっかくなので何故ポスペでMI-506からの添付画像受信に失敗するか調べました。
結論から言うと、MI-506のMIME BASE64エンコードが少々変
(1行目は72桁で正常だが2行目から70桁で改行されている)
なのが原因です。
[例]
そして、それを受信する際、
1行につき『2byteずれてしまう』ポスペの処理がミスマッチしていたというわけです。
詳しく書くと、本来は MIME BASE64 エンコードの場合、
1行は『4文字の整数倍』でないといけないことになっているのですが、
MI-506のエンコード・ミスにより、
2行目以降は70桁・・つまり 4*17 + 2 となり、
半端な2文字が出てしまうのです。
対してポスペの処理を見てみると、1行目を変換して 54byte作成、
2行目は 53byte まで作成した後、2byte足りないことに気が付いて、
なぜか『今の 2byte を捨てて』次の行から 4byte 読み込み直してしまうのです。
つまり、2行目以降は1行読むたびに 2byte ずつ捨てていき、
なおかつ次の行から 4byte 取ってしまうという動作になります。
この結果、ある程度行ったところでポスペが
空行を見つけることになってしまい、
MIMEエンコード・ブロックの最後と誤認識してしまい、
972byte のファイルが復元されてしまうのです!
詳しくバイナリレベルで比較すると、
2byte捨てたために 106byte目でオリジナルとデータが異なってしまっています。
通常の受信ルーチンではその辺りはうまく処理するものなんですが、
とにかくこういった理由で、
『MI-506 → ポスペ』では添付画像が取り出せないものとわかりました。
この場合は、別なメーラーで受信してもらうしかないでしょう。
まあ、両者痛み分けといったところでしょうか。
※なお、現在のMIザウルスではこの問題は解決されています。
- Macintoshのザウルスとのやり取り
基本的な『ポスペとMI-506とのやり取り』は上で述べたとおりですが、
以下はそれとは別の Macintosh 特有の問題について書いてみます。
先の画像をMacに持っていき、
よくある話グラフィックツールで再度保存したとします。
当然の事ながらクリエータがそのツールになり、
アイコンもそれなりの物が付いて表示される状態です。
この状態で、ネスケとポスペでそれぞれ送信してみます。
× ポスペ(Mac版)→MI-610
× ネスケ(Mac版)→MI-610
○ MI-610→ポスペ(Mac版)
○ MI-610→ネスケ(Mac版)
Macから送った場合、どちらも失敗している事がわかります。
結論から言えば、これは Macintosh特有のファイル構造である
『リソースフォーク』と『データフォーク』に原因があります。
Macの場合、JPEG画像といってもデータ部だけでなくアイコンや各種情報を収めた部分があり、
添付して送信する際にそれも一緒に送られてしまいます。
細かく言うと、MIMEの1つのブロック内に、
更にMac用のファイルということで2つのブロックが入れ子になってる状態です。
[例]
これはMac間なら構いません(というか必要です)が、
他の機種に送る場合にはデータ本体のみを送らねばいけないのです。
さて、こうした場合の解決策ですが、
やはり需要が多いと見えて幾つかフリーソフトやシェアウェアが存在しています。
HOZさんのお話によると「More File Info CMM Plug-in(ver 2.2J)」などが、
その目的に合うとのことです。
手動で良いのなら、一旦画像ファイルをネスケなどのブラウザで開いて、
保存しなおすことでリソースフォークを削除できるという情報も頂きました。
こうして画像ファイルのリソースフォークを削除してから送ることで、
○ ポスペ(Mac版)→MI-610
○ ネスケ(Mac版)→MI-610
・・・のようにどちらも成功するようになりました(^^)。
- 最後に
上記のように、いくらRFCで規定されてるインターネットメールとはいえ、
ちょっとした実装の違いや解釈の相違で、
うまくやり取りできない事があります。
しかし、その場合でも原因というのは見つけられるものですし、
少なくとも本文に関してはほぼ問題なくやり取りできるものです。
大した事をやってるわけではありませんが、
この文章が誰かの役にたってくれれば嬉しいですね。
|