ポスペとザウと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で規定されてるインターネットメールとはいえ、 ちょっとした実装の違いや解釈の相違で、 うまくやり取りできない事があります。

しかし、その場合でも原因というのは見つけられるものですし、 少なくとも本文に関してはほぼ問題なくやり取りできるものです。 大した事をやってるわけではありませんが、 この文章が誰かの役にたってくれれば嬉しいですね。