title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM AppleDouble と Mac と iPhoneOS
小さくも大きくも閉じたりもしません
10/07/12 13:11 / PMailServer2

まず、Apple Double とはなんぞや?ってことなのですが、その前に Mac のファイル形式からお復習いする必要があります。

Mac OS 以外はファイルの形式をほぼ拡張子で判定する訳なのですが、Mac OS は、いわゆる「Mac Binary」と呼ばれるバイナリデータがくっついています。(今の Mac OS X もそうなのかな?)

これは「『拡張子で判定』って拡張子が間違っていたらダメやん!誤作動するかもしれんし!Mac OS は専用のデータでファイル情報を管理するぜ」的な設計思想から作られたようです(想像)

しかし、Mac OS 界の中だけの話なので、Windows OS に持ってこられると邪魔でしょうがありません。
私の古い知識では、バイナリファイルの先頭にこの Mac Binary がついている為、Windows OS で読み込もうとすると「拡張子が .bmp だから Bitmap 形式だと思ったら、先頭が BM じゃないよ。こんなん私知りません」とエラーを出して読み込んでくれなかったりします。

まだネットワークが未発達の時代だった頃は、DOS や Windows OS に持ってくる時にこの Mac Binary を消すツールなどで修正すればよかったです。

さて、時代は変わりネットワークが発達してきて、Mac OS から Windows OS、Windows OS から Mac OS にファイルのやりとりがネットワーク上で行われるようになりました。
当然メールもやりとりするようになります。

ここで、また一つ問題が発生しました。

「FTP とかバイナリデータでやりとりする場合はいいんだけどさ、メールでやりとりする際に、Mac Binary がくっついていると面倒じゃない?オンメモリでの展開とか。」

なんとなくですが、林檎の中の人は「でも、Mac Binary が無いと困るし・・・そうだ! MIME って階層形式で記録できるやん!じゃー、Mac Binary と実データを分けてエンコードするようにしよう。Mac OS で受信する場合はこれを結合すればいいし、それ以外の OS の場合は実データのみデコードすればいいんじゃない?」
と考えたような気がします(想像)

そこで作られた規格が AppleDouble です。(蛇足ですが、分けない場合は AppleSingle と言うらしいのですが、見たことありません。きっと AppleSingle の場合は Mac Binary がくっついているからアプリ側で分離してね。的な扱いかと思います。)

Apple Double とは、MIME 形式の一種で、MIME形式でファイルを保存する場合、AppleFile という Mac Binary 部と実データ部分を、1つの階層の中に入れたものです。

実際には下記のような構成になります。(Mac OS からテキスト本文と、Mac Binary がくっついた画像ファイルを送信した場合です。)


MULTIPART/MIXED
(
PLAIN/TEXT ←テキスト本文
APPLEDOUBLE ←Mac Binary 付きですよ。
(
APPLEFILE ← Mac Binary です。
IMAGE/JPG ← 画像の実データです。
)
)


あとはこの形式で正しく解析できれば対応は完了です。
AppleDouble には即対応出来て、IMAP4 側も対応を行ったのですが、テスト用に使っている iPod Touch (iPhone OS 4 に update 済み)での挙動がおかしいです。

Jpeg や GIF を送信する場合は問題無く表示されるのですが、Bitmap を送信した場合、正しく表示が行われません。
きっとどこか構造解析を行う部分に不具合があるに違いないとデバッグすること数時間。

おかしいとこありません。(^-^;

なんでだろうと悩んだ末、きっと iPhone OS のメーラーが Bitmap ファイルのデコードに対応していないに違いないという結論に達して試しに送った所、問題無く見られます。
あれぇ?

そもそも添付ファイルとして認識していますので、IMAP4 の BODYSTRUCTURE 構造自体はおかしい訳ありません。
AppleFile もきちんとスルーしています。

更に悩むこと数時間。ふと思って、Bitmap の MIME 形式を見てみますと、application/octet-stream になっています。
そういや、iPhone OS の標準メーラーって知らない形式になると、スルーするよなぁ。と、ここを image/bmp に変えた所、見事に表示されました。


iPhone OS の標準メーラーのバグやん orz
つまり、iPhone OS の場合はこうなります。

1)「AppleDouble 形式以外」の MIME で application/octet-stream で添付されたファイルについては正しく認識します。

2)「AppleDouble 形式」の MIME 構造で添付ファイルの形式が application/octet-stream の場合は「そんな形式知りません」とスルーします。

3)IMAP4 サーバー側で拡張子が .bmp だった場合、application/octet-stream では無く、image/bmp と教えてあげれば正しく認識します。

3を入れれば対処は出来るのですが、メールサーバーは受信した物をそのまま正しく送り出すべきであり、改竄する物では無いと私は考えますので対応しません。というか iPhone OS 側で対処するべき問題です。

てなことで、Mac から iPhone OS のアカウントに Bitmap を送信してプレビューが出来ない場合は、それは iPhone OS 側が変ですので、くれぐれも PMail Server がおかしいんじゃないですか?などの励ましのメールは送らないようにお願いします。

[更新日付:2010/07/12 13:11:52]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+b286e81e9606ef5fc8ae8731fb5cf09666159206]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+b286e81e9606ef5fc8ae8731fb5cf09666159206]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.