EZ にデコレーションメールを送信する場合の画像インライン展開

かなりはまった。
技術情報には以下のようにあるが、画像が × になって展開されない。

・構造情報にmultipart/alternativeのContent-Typeが存在し、text/plainおよびtext/htmlパートの2つのパートが存在すること
・弊社指定のサポートタグを使用したHTML記述となっていること
・インライン添付されるファイルの形式は、GIF形式 (GIF、アニメーションGIF) もしくはJPG形式であること
KDDI au: デコレーションメール > デコレーションメール送受信条件

multipart のくくり方を考えられる限り試したりしたけど、どうやってもダメ。

頭に来たので Wii でしばらく遊んだ後、ふと思い立って img_cid_000 でググったら以下が見つかった。

仕様に沿ってContent-IDをimg_cid_000のように記述していましたが、
この仕様はテンプレート作成時のContent-IDの仕様であり
通常のメール送信時にはあてはまらないもののようです。
[PHP-users 31762] Re: デコレーションメールのインライン画像展開

Content-ID の書式が原因と。
01@070821.223900 のような値にしたら画像が表示された。技術情報に書いておけよなあ……

書式を変えながらいくつか試したが、最短で "0@a" でも OK。[数字]@[任意] という形式でないとダメなようだ。

[追記]
Content-ID の書式は RFC 2392 で

content-id = url-addr-spec
url-addr-spec = addr-spec ; URL encoding of RFC 822 addr-spec

と定義されているので、@ は含まれないといけない。更に

The Content-ID of a MIME body part is required to be globally unique.

ということで、img_cid_001 のような形式ではユニーク性が保てないので問題あり。

で、その話とは別に EZ では、「テンプレート作成時には」Content-ID を img_cid_00* の形式で指定しないといけない、という制約がある。

まとめると、EZ のデコレーションメールの Content-ID は

  • テンプレート作成時には img_cid_001, img_cid_002 のように指定する
  • インターネットからのメール送信時には RFC 2392 で規定された形 ( url-addr-spec ) で指定する

大抵のメーラ (PC用のとか Gmail とか、DoCoMoSoftBankの携帯とか) では Content-ID の形式には寛容なのだが、EZ の端末のみ、やけに厳格だったんだな……