▼ 2008/02/19(火) Semaiで、添付ファイル名の日本語をRFC2231に準拠させる
最大のシェアを持つ、マイクロソフトのOutlookExpressは、RFC2231になかなか対応しないため、本来のインターネット上のデフォルトであるRFC2231はなかなか普及していないようです。
なので、Semailも、互換性を重視し、通常のmimeエンコードで日本語添付ファイル名を作っています。
でもきっと将来は、RFC2231に統一されると思いますので、今のうちに対応させておきました。
デフォルトでは false になっています。
でも、現状でこれで送ると文字化けするメールクライアントもあるかもしれません。
でもそれは、そのメーラーさんが悪いのです。。。。
なので、Semailも、互換性を重視し、通常のmimeエンコードで日本語添付ファイル名を作っています。
でもきっと将来は、RFC2231に統一されると思いますので、今のうちに対応させておきました。
$this->Semail->spok_attach_filename_rfc2231=true;これだけです。
デフォルトでは false になっています。
でも、現状でこれで送ると文字化けするメールクライアントもあるかもしれません。
でもそれは、そのメーラーさんが悪いのです。。。。
▼ コメント(0件)
- TB-URL http://www.cpa-lab.com/tech/088/tb/
▼ 2008/02/19(火) Semailで、どうもうまく文字コード変換をしない時の対処法
CakePHPの日本語高機能メールコンポーネントSemailでは、まず受け取った文字列の文字コードを自動判別して、ターゲットの文字コードにエンコードします。
使っているのは、 mb_detect_encoding関数です。
しかし、PHPの設定によっては、自動判別がうまくいかないことがあるかもしれません。
その時は以下の方法をとってみてください。
php.initをいじれない方は、
私は、上記の順番が一番誤りが少ないのですが、もっといい順番があれば、ぜひ教えて下さい。
使っているのは、 mb_detect_encoding関数です。
しかし、PHPの設定によっては、自動判別がうまくいかないことがあるかもしれません。
その時は以下の方法をとってみてください。
php.ini の修正
mbstring.detect_order = eucJP-win,UTF-8,SJIS-win,jisとすると幸せになれるかも知れません。
php.initをいじれない方は、
mb_detect_order関数の使用
mb_detect_order("eucJP-win,UTF-8,SJIS-win,jis");として、detectの順番を変えてみて下さい。
私は、上記の順番が一番誤りが少ないのですが、もっといい順番があれば、ぜひ教えて下さい。
- TB-URL http://www.cpa-lab.com/tech/094/tb/
-
▼
Semailバージョンアップ1.0.2.b(CakePHP日本語高機能メールコンポーネント)
CPA-LABテクニカル CakePHP用高機能メールコンポーネントSemailのバージョンアップです。ご指摘のあった添付フィルの Content-Typeヘッダ(mimeタイプ)周辺を整備したほか、いくつかの改良をしています。基本的な使い方は、CakePHP用高機能メールコンポー...
▼ 2008/02/19(火) Semailでのutf-8,SHIFT-JISメールの送り方
Semailはデフォルトでは、iso-2022-jpですが、UTF-8、SJISのメールも送ることが出来ます。
CakePHPの日本語メールコンポーネントのお話。
以上です。
まず、その一致を解くキーは、
なお、デフォルトは
$this->Semail->spok_content_encoding = '7bit';
です。
あと考えられる指定は、
$this->Semail->spok_content_encoding = '8bit';
ですが、こうすることはあまりないでしょう。
CakePHPの日本語メールコンポーネントのお話。
もっとも簡単な送り方
utf-8の場合
$this->Semail->charset='utf-8';とするだけ。
SJISの場合
$this->Semail->charset='sjis';とするだけ。
以上です。
ヘッダーの文字コードと本文の文字コードを別にしたい。
Semailは初心者でも簡単に使えるように、デフォルトでは、ヘッダーと本文の文字コードは一致させています。まず、その一致を解くキーは、
$this->Semail->spok_default=false;その上で、
$this->Semail->charset='sjis'; // ヘッダーのcharset $this->Semail->spok_content_charset='utf-8'; // 本文のcharsetとなります。
本文をbase64エンコードしたい
$this->Semail->spok_content_encoding = 'base64'; //すべて小文字で指定$this->Semail->spok_defaultの値には関係しません。
なお、デフォルトは
あと考えられる指定は、
- TB-URL http://www.cpa-lab.com/tech/087/tb/
▼ 2008/02/19(火) Semail機種依存文字について
■機種依存文字をメールで送る
sjis-win で送る (sjis では×)
PCであれば、安心でしょう。対応しているメーラーも多いと思う。携帯メールでは。。。au では本文は大丈夫でした。他は実機がないのでわかりません。
しかし、auでは、ヘッダーがsjis-winだと文字化けします。
なので、ヘッダーは、iso-2022-jp 本文はsjis本文base64という形で送る必要があるでしょう。
機種依存文字を送る場合の一番のオススメ
ヘッダー | 本文 |
iso-2022-jp | sjis-win + base64 |
つまり
$this->Semail->spok_default=false; $this->Semail->charset='iso-2022-jp'; // ヘッダーのcharset $this->Semail->spok_content_charset='sjis-win'; // 本文のcharset $this->Semail->spok_content_encoding="base64";//本文のbase64となります。
UTF-8 + 本文base64 で送る
PCであれば、もっとも安心でしょう。対応しているメーラーも多いと思う。ヘッダー | 本文 |
utf-8 | utf-8 + base64 |
$this->Semail->charset='utf-8'; // ヘッダーと本文のcharset同時指定 $this->Semail->spok_content_encoding="base64";//本文のbase64utf-8なら、Macとwindows間も問題ない(はず。Mac持っていないので)
しかし、携帯メールでは。。。。少なくともauではダメのよう。
eucJP-win
PCでは大丈夫ですが、auでは全然ダメでした。iso-2022-jp
もちろんダメでした。でも機種依存文字はダメですが、auではそれ以外の文字はちゃんと表示されるので、UTF-8やeucJP^winよりはいいでしょう。ただし、このページでは、機種依存文字についての話なので、その点ではダメなのは同じです。留意点
以上は、すべてSemailコンポーネントの話であり、他の一般のメーラーで実現可能かどうかはわかりませんのでご注意を。- TB-URL http://www.cpa-lab.com/tech/090/tb/