[PHP-users 31325] デコレーションメールのインライン画像展開

佐々木栄勝 narucissus @ gmail.com
2007年 1月 26日 (金) 20:47:38 JST


narucissusです。いつも勉強させていただいています。

PHPの内容についての質問ではないのですが、他に尋ねる場所が思いつかなかったので
同様の処理を行ったことがある方がいらっしゃいましたらお教えください。

auの携帯にデコレーションメールを送信するプログラムをPHPで作成しています。
SMTPで直接メールサーバにHELO, MAIL FROM:, RCPT TO:, DATAの各コマンドを出力し、
以下の内容をDATAの後に書き込んでいます。
(メールアドレスなど若干書き換えてあります。)


Mime-Version: 1.0
Content-Type: multipart/related; boundary="--mime20070106235331"
Content-Transfer-Encoding: 7bit
From: =?ISO-2022-JP?B?GyRCOjQhOUxaMUk+IRsoQg==?= <narucissus @ gmail.com>
To: abcde12345 @ ezweb.ne.jp(←実際には正しいメールアドレス)
Subject: =?ISO-2022-JP?B?ZGVjb3JhdGlvbiBtYWlsIHRlc3QgZnJvbSBwaHA=?=
Date: Sat, 06 Jan 2007 23:53:31 +0900
Message-ID: <deco.20070106235331 @ gmail.com>(←実際には送信するサーバのドメイン)

----mime20070106235331
Content-Type: multipart/alternative; boundary="--mime20070106235331_0"

----mime20070106235331_0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

Text part of decoration mail.
----mime20070106235331_0
Content-Type: text/html; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

<HTML><BODY><DIV>inline image here <IMG SRC="cid:img_cid_000"
ALT="">.</DIV></BODY></HTML>
----mime20070106235331_0--
----mime20070106235331
Content-Type: image/gif; name="calendar.gif"
Content-Transfer-Encoding: base64
Content-ID: <img_cid_000>

R0lGODlhFAAUAKIAADMzMwAz/5mZmVy1UvX19erq6v8AAP///yH5BAUUAAcALAAAAAAUABQAAANe
eLrcLjDKCZcgZOi8NxaFcmUYiQ0mKJ4oh2qteoytScbhfJYwV8qjEgZAIBIDBKBwyVQailAjFKlk
WpO5y1PKJVCzV6szSj5iV+HlWHqtpn9ZijySOxTu+Lz+7uj7EwA7
----mime20070106235331--


これと同じメールをDoCoMo P903iに送信した場合は、期待したとおり
HTMLの「inline image here」の後にカレンダーの画像が表示されるのですが
auのW43Hの場合は画像が表示されるべきところに×マークが表示されてしまいます。
(IEで開いたページ中の画像のリンクが切れているときの表示に似ています)

以下を参考にしてこれらの内容を出力しました。

http://www.nttdocomo.co.jp/service/imode/make/content/deco_mail/internet/index.html
http://www.au.kddi.com/ezfactory/tec/spec/decorations/soujushin.html

画像が正しくインライン展開されない理由として思いついたのは以下のようなことです。

□Content-IDの指定の仕方が間違っている?

 一番あやしいのはここなのですが、仕様に沿ってContent-IDをimg_cid_000にしても
 正しく展開されません。SRC="cid:img_cid_000"ではなくSRC="img_cid_000"としても同じです。

□multipartの指定が間違っている?

 multipartの指定はDoCoMoのサイトを参考にして作成しました。
 深さが分かるように記述すると以下のような感じです。

 ○multipart/related
  ・multipart/alternative
   *text/plain
   *text/html
  ・image/gif

 auのデコレーションメールのテンプレートの作成方法を見るとこの構造とはだいぶ
 違うようですが、テンプレートと同じ構造でメールを送信しても本文を正しく受信できないため
 この形で送信しています。
 一番上の階層のmultipart/relatedをmixedなどに変えても現象は変わりませんでした。
 text/plainとtext/htmlの順番を変えてもダメです。

□Content-Dispositionが必要?

 以下のヘッダを付加してみましたが、やはり表示されませんでした。

 Content-Disposition: inline; filename="calendar.gif"

□文字コード

 この例はISO-2022-JPですが、件名・本文のエンコードをShift_JISにしても結果は同じでした。


このほかにココがあやしいんじゃないかという部分がありましたらご指摘いただければ幸いです。


PHP-users メーリングリストの案内