▼ 2008/05/19(月) デコメ。auのContent-IDの制約。@はひとつだけ。
■デコメはどうやって、画像を特定するのか
通常のhtmlメールで例えばgif画像を指定するには、次のようにする。<img src="http://example.com/hoge/images/filename.gif">このファイル名でどの画像ファイルを表示するか、一意に特定される。
では、デコメはどう指定するか。
デコメは、通常のhtmlメールと異なり、メールに画像データも含まれて送られてくる。
添付ファイルと同じように送られてくるのだ。
しかし、その特定の方法は、ファイル名ではなく、cidで行われる。
すなわち、
<img src="cid:コンテンツID">と指定する。
コンテンツIDは、メールに添付された画像ファイルのヘッダーに例えば次のように書いてある。
今、コンテンツIDを 01@086409.335009@_____P905i@docomo.ne.jp とすると、
--mimemk00 Content-Type: image/gif; name="filename.gif" Content-Transfer-Encoding: base64 Content-ID: <01@086409.335009@_____P905i@docomo.ne.jp> base64エンコードされた画像データという感じ。
これで、cid同士が一致するものが、携帯のブラウザによって本文中で展開されて表示される。
これはデコメだけの特徴でなく、インラインHTML(MHTML)は、皆、このような構造で、cidを通じ一意に特定されている。
インラインhtmlメールでは、ファイル名も指定されていることが多いけれども、インラインhtml上では、なんの意味もない。*1
cid のよくあるタイプ
docomoのデコメでは、上記の例のように01@086409.335009@_____P905i@docomo.ne.jpと、@ アットマークが3つついている。
他のインラインhtmlメールを作成するソフトもそういうのが多いようである。
ちなみに、 cid はrfcにより、世界中でダブりがないことが求められている*2。
auの制限
しかし、auにおいては、@ が2つ以上の複数だと、うまくcidを識別できず、デコメも正しく表示されない。(ただし、W43Hでの実機での話であり、他の機種はわからない)
というわけで、PHP日本語高機能メールライブラリQdmail では、au の仕様のために、@ はひとつだけにして送付しているわけです。
けっこう芸が細かいでしょ*3。
これ、かなりはまったんだよなあ。auさん、かんべんしてよ。
追記:さらに @ がない場合は、auはダメ
ぶりっぺさんから情報提供いただきました(2008/6/1)auは、@が2つだとダメだし、@がないのもダメ。
つまり、1個だけは必ず@をつけて、複数の@はないようにする実装が必要ということです。
ちなみに、Qdmail は、そのような実装になっていますです。
▼ コメント(0件)
- TB-URL http://www.cpa-lab.com/tech/0135/tb/