ようこそゲストさん

CPA-LABテクニカル

2008/02/19(火) Semaiで、添付ファイル名の日本語をRFC2231に準拠させる

最大のシェアを持つ、マイクロソフトのOutlookExpressは、RFC2231になかなか対応しないため、本来のインターネット上のデフォルトであるRFC2231はなかなか普及していないようです。
なので、Semailも、互換性を重視し、通常のmimeエンコードで日本語添付ファイル名を作っています。


でもきっと将来は、RFC2231に統一されると思いますので、今のうちに対応させておきました。

$this->Semail->spok_attach_filename_rfc2231=true;
これだけです。
デフォルトでは false になっています。
でも、現状でこれで送ると文字化けするメールクライアントもあるかもしれません。
でもそれは、そのメーラーさんが悪いのです。。。。

名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/088/tb/

2008/02/19(火) Semailで、どうもうまく文字コード変換をしない時の対処法

CakePHPの日本語高機能メールコンポーネントSemailでは、まず受け取った文字列の文字コードを自動判別して、ターゲットの文字コードにエンコードします。
使っているのは、 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テクニカル spok
    CakePHP用高機能メールコンポーネントSemailのバージョンアップです。ご指摘のあった添付フィルの Content-Typeヘッダ(mimeタイプ)周辺を整備したほか、いくつかの改良をしています。基本的な使い方は、CakePHP用高機能メールコンポー...

2008/02/19(火) Semailでのutf-8,SHIFT-JISメールの送り方

Semailはデフォルトでは、iso-2022-jpですが、UTF-8、SJISのメールも送ることが出来ます。
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の値には関係しません。

なお、デフォルトは
$this->Semail->spok_content_encoding = '7bit';
です。
あと考えられる指定は、
$this->Semail->spok_content_encoding = '8bit';
ですが、こうすることはあまりないでしょう。

名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/087/tb/

2008/02/19(火) Semail機種依存文字について

機種依存文字についてのメールは難しい。
できることなら、使わないのがいいのだけど、どうしても使いたい場合の覚書。
CakePHPの日本語メールコンポーネントが大前提。

機種依存文字をメールで送る

sjis-win で送る (sjis では×)

PCであれば、安心でしょう。対応しているメーラーも多いと思う。
携帯メールでは。。。au では本文は大丈夫でした。他は実機がないのでわかりません。
しかし、auでは、ヘッダーがsjis-winだと文字化けします。
なので、ヘッダーは、iso-2022-jp 本文はsjis本文base64という形で送る必要があるでしょう。

機種依存文字を送る場合の一番のオススメ
ヘッダー本文
iso-2022-jpsjis-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-8utf-8 + base64
$this->Semail->charset='utf-8';  // ヘッダーと本文のcharset同時指定
$this->Semail->spok_content_encoding="base64";//本文のbase64
utf-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/