ようこそゲストさん

CPA-LABテクニカル

メッセージ欄

分類 【Cake1.2EmailComponent】 で検索

一覧で表示する

2008/02/11(月) EmailComponentをコード改変なしで使うには

CakePHP1.2b EmailComponentをコード改変なしで使おうとする時のまとめ。UTF-8&SMTP送信なら、比較的簡単に日本語も大丈夫のよう(ただし完全ではない)。(コーディングもUTF-8の場合です。)
この情報は古いうえに、若干間違いもあります。ご注意ください。
なお
メールヘッダーの日本語については、ちゃんとCakePHPが mb_encode_mimeheader と同じ変換をしてくれる*1から、素直に日本語が通るようになっている*2。問題が出やすいのは、本文のほう(1行が70バイトを超えた時)。


UTF-8JIS(ISO-2022-JP)
引数渡し本文の1行字数制限    あり(70バイト*3)
Viewの文字コードUTF-8JIS
Content-Transfer-Encoding7bitになってしまうが、メーラーでは読めるよう7bitでOK
htmlメールOKOK
長い日本語subject大丈夫渡す前にJISにエンコードしておけばOK
Shift-JISは試してないけど、JISと同じでしょう。

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で書かなくてはならないのがちょっと。。。
softbank携帯はうまく表示できないそう。
ソフトバンクもiso-2022-jpOKだそうですが、ちゃんとしたメールヘッダーでないものはプロバイダとして受信拒否する、と書いてあるので、若干心配です。
(Sofbankメール注意点  FAQ)

利点
ほとんどの日本語メールは、ISO-2022-JPである。
CakePHPがISO-2022-JPを正しく処理して送れば、クライアント側で文字化けすることはまずない。(機種依存文字除く)

もっと楽にメールを送りたい
という方は、こちらをご参照。
EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b

共通

MIME-Version: 1.0
のヘッダーがつかないようで、若干気になる。

*1 : EmailConponent::__encode

*2 : 当該日本語のcharsetと$this-Email->charsetは揃えておくことが重要

*3 : $this->_lineLengthにて変更可能

2008/02/10(日) EmailComponentの使い方。Toヘッダに日本語を使う。CakePHPメール

CakePHP1.2bのEmailComponentでは、from,cc,bcc,subject,本文に日本語を使うことができます。やはりメールヘッダーがアルファベットだけなのと日本語が入っているのとでは安心感がちがいますよね。

でも、デフォルトだと、Toヘッダだけは、日本語を使うことができません。


しかし、smtp方式で送付するようにすれば、Toヘッダに日本語が使えます。
例) To: ほげほげさん<hoge@example.com>
というやつですね。

SMTPでの送り方は、
EmailComponentの使い方。mail関数を使わず、smtpで送る。

また、この改造を前提にしています。
EmailComponentで簡単日本語メール。CakePHP1.2b


あとは
$this->Email->to='日本語宛先'.'<hoge@example.com>';

とするだけ。
(追記)
もっと簡単に日本語メールを送るコンポーネントがあります。

CakePHPの日本語高機能メールコンポーネントSemai

2008/02/10(日) EmailComponentの使い方。mail関数を使わず、smtpで送る。CakePHPメール

CakePHP1.2bのEmailcomponetでは、PHP内部のmail関数を使ってメールを送るのが、デフォルトですが、外部のsmtpファイルを使って送ることもできます。
ウィンドウズ環境で、以前渡しはsendまね~る、というsendmailをウィンドウズ上でエミュレートするソフトを使っていましたが、最近はすっかりこの方法になっています。



通常の設定に加えて下記を加えるだけです。
$this->Email->smtpOptions=array('port'=>'25',
    'host'=>'smtp.example.com',
    'timeout'=>'30',
    'username'=>'・・・・',
    'password'=>'・・・・'
  );

$this->Email->delivery='smtp';
なお、
$this->Email->smtpOptions=array('port'=>'25','host'=>'localhost','timeout'=>'30');
の部分はデフォルトで設定済みなので、変更の必要がなければ、
$this->Email->smtpOptions['host']='・・・';$this->Email->smtpOptions['username']='・・・';$this->Email->smtpOptions['password']='・・・';
でもいいと思います。(たぶん)
  • EmailComponentの使い方。Toヘッダに日本語を使う。 CPA-LABテクニカル spok
    CakePHP1.2bのEmailComponentでは、from,cc,bcc,subject,本文に日本語を使うことができます。でも、デフォルトだと、Toヘッダだけは、日本語を使うことができません。しかし、smtp方式で送付するようにすれば、Toヘッ...