携帯3キャリア対応の絵文字・デコメが使えるメールシステム開発時にハマった点。
ハマり時間約10時間・・・
まず、デコメールの各キャリア向けのメールデータの組み立ては、すでに既知の方法で特に問題なく送信できた。
(2010/9/4現在)
【参考サイト】
・http://pentan.info/mobile/send_deco.html など
しかし、ドコモ&ソフバンは上手くいくのに、auのデコメだけは添付画像(インラインHTML表示)がうまくいかない・・・というか、ばらつく。
サイズが1KB前後の画像ファイルは正常にインライン表示されるのだが、少しサイズが大きくなる(2KB前後)と、インラインに表示されず、別途添付ファイルのみダウンロードしようとしてもなぜかできない。
しかもインラインFLASH対応機種なはずなのに、swfファイルも再生されない。
(検証した機種はSH005)
これについて悩んでいたら、以下のサイトを発見。
http://www.plusmb.jp/2009/09/04/4481.html
てゆうか、よく見たら冒頭のサイトにもちゃんと書いてあるし・・・
これによると「auは、サイズが大きめの添付ファイルは、base64エンコードした後76byteごとに改行を入れる必要がある」らしい。
しかし、なんでいきなりこんな話になるのかと思って少し調べたら、どうやらRFCに準拠したBase64エンコードは、76byteごとに改行文字を入れなさいということらしい。
(ただしsubjectの64エンコードでこれをやるとダメ)
もともと実績のあるMIME.pmとかのbase64メソッドを使ってエンコードしていれば問題なかったのだが、私の場合、スクリプト配布時のことを考えて、自力で64エンコードしていたため、ハマったらしい。
(MIME.pm内を見てみると、たしかに76byteごとに改行を入れる処理があった・・・)
よって、対応策としては、
添付ファイルデータをくっつけるときに、
$buf = &base64encode($buf); #自力の64エンコードサブルーチン
のあと、
$buf =~ s/(.{1,76})/$1\n/g;
という処理を加えることで解決。
これを、メール内のtext/htmlパートにくっつけてやればよい。
(もちろんflashの場合は、flashのmimeタイプを指定)
しかし、docomoとsoftbankはこの処理をやらなくてもちゃんと送れるもんだから、最初は携帯の設定が悪いんだとばっかり思ってました・・・
------------------------------------------------------------------------------
以下は、2010/9/4現在の検証でわかったことのまとめ。
検証機種は、
ドコモ・・・P08A(松下)
au・・・SH005(シャープ)
Softbank・・・930CA(カシオ)
・KDDIの技術資料(http://www.au.kddi.com/ezfactory/tec/spec/decorations/emoji.html)には、デコメ絵文字は20×20ドット指定になっているが、120×25くらいのファイルでも送信できた。
また、Dispositionは指定しなくても問題なかった。
・swfファイルのサイズ制限は特に書いていないが、50px×50px(約2KB)は3キャリアとも送信できた。ただし、機種により再生の滑らかさはだいぶ差がある模様。
・冒頭に紹介したサイトでは、HTMLソースはquoted-printableエンコードすると書いてあるが、特にこれを行わず、「Content-Transfer-Encodeing: 7bit」で送信しても、特に問題なかった。
また、Softbankにおいては、HTMLソースをUTF8で送信(quoted-printableエンコードなし)しても特に問題なかった。
また、text/plainとtext/htmlの両方のパートが無いとダメと書いてあるが、docomoとsoftbankにおいては、text/plainパートを記述しなくても問題なく送信できた。
以上、ご参考までに。
ハマり時間約10時間・・・
まず、デコメールの各キャリア向けのメールデータの組み立ては、すでに既知の方法で特に問題なく送信できた。
(2010/9/4現在)
【参考サイト】
・http://pentan.info/mobile/send_deco.html など
しかし、ドコモ&ソフバンは上手くいくのに、auのデコメだけは添付画像(インラインHTML表示)がうまくいかない・・・というか、ばらつく。
サイズが1KB前後の画像ファイルは正常にインライン表示されるのだが、少しサイズが大きくなる(2KB前後)と、インラインに表示されず、別途添付ファイルのみダウンロードしようとしてもなぜかできない。
しかもインラインFLASH対応機種なはずなのに、swfファイルも再生されない。
(検証した機種はSH005)
これについて悩んでいたら、以下のサイトを発見。
http://www.plusmb.jp/2009/09/04/4481.html
てゆうか、よく見たら冒頭のサイトにもちゃんと書いてあるし・・・
これによると「auは、サイズが大きめの添付ファイルは、base64エンコードした後76byteごとに改行を入れる必要がある」らしい。
しかし、なんでいきなりこんな話になるのかと思って少し調べたら、どうやらRFCに準拠したBase64エンコードは、76byteごとに改行文字を入れなさいということらしい。
(ただしsubjectの64エンコードでこれをやるとダメ)
もともと実績のあるMIME.pmとかのbase64メソッドを使ってエンコードしていれば問題なかったのだが、私の場合、スクリプト配布時のことを考えて、自力で64エンコードしていたため、ハマったらしい。
(MIME.pm内を見てみると、たしかに76byteごとに改行を入れる処理があった・・・)
よって、対応策としては、
添付ファイルデータをくっつけるときに、
$buf = &base64encode($buf); #自力の64エンコードサブルーチン
のあと、
$buf =~ s/(.{1,76})/$1\n/g;
という処理を加えることで解決。
これを、メール内のtext/htmlパートにくっつけてやればよい。
(もちろんflashの場合は、flashのmimeタイプを指定)
しかし、docomoとsoftbankはこの処理をやらなくてもちゃんと送れるもんだから、最初は携帯の設定が悪いんだとばっかり思ってました・・・
------------------------------------------------------------------------------
以下は、2010/9/4現在の検証でわかったことのまとめ。
検証機種は、
ドコモ・・・P08A(松下)
au・・・SH005(シャープ)
Softbank・・・930CA(カシオ)
・KDDIの技術資料(http://www.au.kddi.com/ezfactory/tec/spec/decorations/emoji.html)には、デコメ絵文字は20×20ドット指定になっているが、120×25くらいのファイルでも送信できた。
また、Dispositionは指定しなくても問題なかった。
・swfファイルのサイズ制限は特に書いていないが、50px×50px(約2KB)は3キャリアとも送信できた。ただし、機種により再生の滑らかさはだいぶ差がある模様。
・冒頭に紹介したサイトでは、HTMLソースはquoted-printableエンコードすると書いてあるが、特にこれを行わず、「Content-Transfer-Encodeing: 7bit」で送信しても、特に問題なかった。
また、Softbankにおいては、HTMLソースをUTF8で送信(quoted-printableエンコードなし)しても特に問題なかった。
また、text/plainとtext/htmlの両方のパートが無いとダメと書いてあるが、docomoとsoftbankにおいては、text/plainパートを記述しなくても問題なく送信できた。
以上、ご参考までに。
