▼ 2008/02/11(月) EmailComponentをコード改変なしで使うには
CakePHP1.2b EmailComponentをコード改変なしで使おうとする時のまとめ。UTF-8&SMTP送信なら、比較的簡単に日本語も大丈夫のよう(ただし完全ではない)。(コーディングもUTF-8の場合です。)
Shift-JISは試してないけど、JISと同じでしょう。
こうすれば、引数渡し制限の70バイト/行にひっかかることはない。
(NULLのところに本文を渡してもいいけど、70バイト制限で分割されてviewに渡されることとなる。
viewでは、変数$contentに、messageを処理した内容がわたされている。)
SMTP経由の送信であれば、Fromと同じ形式で通る。
au携帯ではutf-8は適切に表示できない。(Docomo,softbankは大丈夫のよう。携帯メールの文字コード)
SMTP送信「EmailComponentの使い方。mail関数を使わず、smtpで送る。CakePHPメール」であれば、うまくいくことがあるが、これもsendmailに直接utf-8を渡すことになるの。
なお、CakePHP1.2b時点では、本文のbase64エンコードはサポートしていないよう。
EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b
view,layoutもすべてjisにするか、PHPスクリプトにてISO-2022-JPに変換して出してやらないといけないので、若干面倒&ちょっとしたミスですぐに文字化けのもと。
softbank携帯はうまく表示できないそう。
ソフトバンクもiso-2022-jpOKだそうですが、ちゃんとしたメールヘッダーでないものはプロバイダとして受信拒否する、と書いてあるので、若干心配です。
(Sofbankメール注意点 FAQ)
CakePHPがISO-2022-JPを正しく処理して送れば、クライアント側で文字化けすることはまずない。(機種依存文字除く)
EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b
のヘッダーがつかないようで、若干気になる。
この情報は古いうえに、若干間違いもあります。ご注意ください。なお
メールヘッダーの日本語については、ちゃんとCakePHPが mb_encode_mimeheader と同じ変換をしてくれる*1から、素直に日本語が通るようになっている*2。問題が出やすいのは、本文のほう(1行が70バイトを超えた時)。
UTF-8 | JIS(ISO-2022-JP) | |
引数渡し本文の1行字数制限 | あり(70バイト*3) | |
Viewの文字コード | UTF-8 | JIS |
Content-Transfer-Encoding | 7bitになってしまうが、メーラーでは読めるよう | 7bitでOK |
htmlメール | OK | OK |
長い日本語subject | 大丈夫 | 渡す前にJISにエンコードしておけばOK |
UTF-8で送る場合
設定
$conponents=array('Email');以外は、になし。本文
$this->Email->send($message=null,'viewName','LayoutName');とし、第1引数のmessageは、すべてviewで処理してしまう。
こうすれば、引数渡し制限の70バイト/行にひっかかることはない。
(NULLのところに本文を渡してもいいけど、70バイト制限で分割されてviewに渡されることとなる。
viewでは、変数$contentに、messageを処理した内容がわたされている。)
subuject(メールのタイトル)
そのままUTF-8で、$this->Email->subject に渡してやれば、CakePHPが、Email::__encode関数にて、mb_encode_mimeheaderと同じ変換をしてくれるので大丈夫。長いタイトルも適切に分割される。From,Reptyto,Bccヘッダの日本語
$this->Email->from='日本語での宛先'.'<example@example.com>'とやって渡せば、CakePHPがUTF-8で、エンコードしてくれる。
Toヘッダの日本語
デフォルトのmail関数を使う方法の場合は、日本語は通らない。SMTP経由の送信であれば、Fromと同じ形式で通る。
UTF-8の場合の欠点
Content-Transfer-Encoding|7bitとなり、若干気持ち悪い。たいていのPCメーラーでは大丈夫のよう。au携帯ではutf-8は適切に表示できない。(Docomo,softbankは大丈夫のよう。携帯メールの文字コード)
文字化け
PHPのmail関数にそのままUTF-8のマルチバイトコードを渡すことになるので、文字化けがでることがある。messageの最初に空行を入れておくとうまくいく場合があるが、危なっかしい。SMTP送信「EmailComponentの使い方。mail関数を使わず、smtpで送る。CakePHPメール」であれば、うまくいくことがあるが、これもsendmailに直接utf-8を渡すことになるの。
なお、CakePHP1.2b時点では、本文のbase64エンコードはサポートしていないよう。
絶対に文字化けさせたくない
という方は、こちらをご参照。EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b
利点
文字コードを気にせず、一番簡単にメールを送ることができる。JIS(ISO-2022-JP)の場合
設定
$this->Email->charset='ISO-2022-JP';本文
UTF-8と同じだけれど、引数として渡す前にmb_convert_encodingにて ISO-2022-JP への変換が必要。view,layoutもすべてjisにするか、PHPスクリプトにてISO-2022-JPに変換して出してやらないといけないので、若干面倒&ちょっとしたミスですぐに文字化けのもと。
subuject(メールのタイトル)
$this->Email->subjectに設定する前に、mb_convert_encodingでJISへの変換が必要。$this->Email->subject=mb_convert_encoding('日本語での件名タイトル',"ISO-2022-JP");
From,Reptyto,Bccヘッダの日本語
$this->Email->from=mb_convert_encoding('日本語での宛先',"ISO-2022-JP").'<example@example.com>'*2
Toヘッダの日本語
UTF-8と同じ事情。SMTPの場合は、Fromと同様に、JIS変換すれば通る。ISO-2022-JPの場合の欠点
文字コードに気を遣うコーディングが必要。特にview,layoutもJISで書かなくてはならないのがちょっと。。。ソフトバンクもiso-2022-jpOKだそうですが、ちゃんとしたメールヘッダーでないものはプロバイダとして受信拒否する、と書いてあるので、若干心配です。
(Sofbankメール注意点 FAQ)
利点
ほとんどの日本語メールは、ISO-2022-JPである。CakePHPがISO-2022-JPを正しく処理して送れば、クライアント側で文字化けすることはまずない。(機種依存文字除く)
もっと楽にメールを送りたい
という方は、こちらをご参照。EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b
共通
MIME-Version: 1.0のヘッダーがつかないようで、若干気になる。
▼ コメント(0件)
- TB-URL http://www.cpa-lab.com/tech/068/tb/