▼ 2008/02/10(日) EmailComponentの使い方。Toヘッダに日本語を使う。CakePHPメール
でも、デフォルトだと、Toヘッダだけは、日本語を使うことができません。
しかし、smtp方式で送付するようにすれば、Toヘッダに日本語が使えます。
例) To: ほげほげさん<hoge@example.com>というやつですね。
SMTPでの送り方は、
EmailComponentの使い方。mail関数を使わず、smtpで送る。。
また、この改造を前提にしています。
EmailComponentで簡単日本語メール。CakePHP1.2b
あとは
$this->Email->to='日本語宛先'.'<hoge@example.com>';
とするだけ。
(追記)
もっと簡単に日本語メールを送るコンポーネントがあります。
CakePHPの日本語高機能メールコンポーネントSemai
- TB-URL http://www.cpa-lab.com/tech/074/tb/
▼ 2008/02/10(日) EmailComponentの使い方。mail関数を使わず、smtpで送る。CakePHPメール
ウィンドウズ環境で、以前渡しは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']='・・・';でもいいと思います。(たぶん)
- TB-URL http://www.cpa-lab.com/tech/073/tb/
-
▼
EmailComponentの使い方。Toヘッダに日本語を使う。
CPA-LABテクニカル CakePHP1.2bのEmailComponentでは、from,cc,bcc,subject,本文に日本語を使うことができます。でも、デフォルトだと、Toヘッダだけは、日本語を使うことができません。しかし、smtp方式で送付するようにすれば、Toヘッ...
▼ 2008/02/10(日) EmailComponentの使い方。添付ファイルの送り方。CakePHPメール
なお、今回の記事は下記改造をしていることを前提にしています。
EmailComponentで簡単日本語メール。CakePHP1.2b
通常の設定に下記のように設定するだけで、添付ファイルが送れます。
$this->Email->filePaths=array('path1','path2'・・・・); $this->Email->attachments=array('filename1','filename2',・・・・);
$this->Email->filePathsで設定されたパスの中から、filenameを探し出して添付します。添付ファイル名は、当該ファイル名になります。(ので、日本語添付ファイル名は若干難しいかも)
なお、pathはwebrootからのパスです。前にも後ろにもDS(スラッシュ)は必要ありません。
例)
http;//example.com/cake/がwebrootだとして
http;//example.com/cake/tenpu/ver1/hoge.xls
を添付したい場合は、
$this->Email->filePaths=array('tenpu/ver1'); $this->Email->attachments=array('hoge.xls');
となります。
- TB-URL http://www.cpa-lab.com/tech/072/tb/
▼ 2008/02/10(日) EmailComponentの使い方。htmlメール&テンプレート。CakePHPメール
CakePHPの高機能メールコンポーネントQdmailもよろしくです。。emailコンポーネントよりも簡単に日本語メール送信ができます。CakePHP対応。なお、今回の記事は下記改造をしていることを前提にしています。
EmailComponentで簡単日本語メール。CakePHP1.2b
htmlメールの送り方
普通のテキストメールの送り方は、class HogemailsController extends AppController { var $components=array('Email'); function send(){ $this->Email->charset='iso-2022-jp'; $this->Email->to='example@exmaple.com'; $this->Email->from=''日本語のFROM表記.'example2@exmaple.com'; $this->Email->cc=array('日本語CC宛先'.'example3@exmaple.com'); $this->Email->bcc=array('日本語BCC宛先'.'example4@exmaple.com'); $this->Email->subject='日本語長いのOKタイトル'; $message='本文たくさん'; //配列も可 $this->Email->_lineLength=40; //日本語での1行の文字数。マルチバイト1文字で1。 $this->Email->send($message); } }でした。CC,BCCはなくてもOK.
これに
$this->Email->sendAs='html';を付け加えるだけ。
中身は、$messageにでも書きましょう。
なお、テンプレートを使うと、htmlメールももっと簡単に作れます。
テンプレートの使い方
- /app/views/layouts/email/html/default.ctp
- /app/views/elements/email/html/default.ctp
を参考に、hogeview.ctpを作っておく。
で呼び出しを、$this->Email->send($message);の代わりに
$this->Email->send($message, 'hogeview' , 'hoge' );としてやれば、renderしてくれます。
なお、hogeviewの中では、$contentという変数に$messageの中身が入っています。
- TB-URL http://www.cpa-lab.com/tech/071/tb/
▼ 2008/02/10(日) EmailComponentで簡単日本語メール。CakePHPメールCakePHP1.2b
CakePHP1.2bのEmailコンポーネントは、デフォルトだと若干使いづらい。マルチバイトでのメール送信には一工夫必要かと。日本では、携帯電話へメールを転送している人が多いため、CakePHPデフォルトのUTF-8では、読めない人がいるのだ(au)。
(2008/2/20追記)もっともっと、簡単高機能なSemailをぜひ使ってみて下さい。
なので、断然、JIS(ISO-2022-JP)で送りたい。しかし、EmailComponentは、$this->Email->charsetで、文字コードが指定できるものの、それはヘッダーのcontent-typeにcharsetを設定するだけであり、データはすべてこちらで JIS に変換してやらなねばならない。subjectや、from部分だけならまだしも、viewやlayoutまで、jisで作成しなくてはならない。これはケアレスミスが増えるだけである。
そこで、コーディング用で使っているUTF-8でプログラムは作成するけど、送る直前にJIS変換するような改造をしてみた。
これらの改造は、あくまでも iso-2022-jp(JIS) で送るためのものであり、他の文字コードではたぶんうまくいきません。*1
- ファイルコピー
/cake/lib/controllers/components/email.php を app/controllers/components/email.phpにコピー
- キャッシュファイルを全部消去(意外に盲点)
- 下記の「改造方法」の追加をする。
- すると下記の設定でメールを送れるようになる。
class HogemailsController extends AppController { var $components=array('Email'); function send(){ $this->Email->charset='iso-2022-jp'; $this->Email->to='example@exmaple.com'; $this->Email->from=''日本語のFROM表記.'example2@exmaple.com'; $this->Email->cc=array('日本語CC宛先'.'example3@exmaple.com'); $this->Email->bcc=array('日本語BCC宛先'.'example4@exmaple.com'); $this->Email->subject='日本語長いのOKタイトル'; $message='本文たくさん'; //配列も可 $this->Email->_lineLength=40; //日本語での1行の文字数。マルチバイト1文字で1。 $this->Email->send($message); } }
で文字化けなしの日本語メールを出すことができる。なお、これらのコードはutf-8で書いて構わない。
改造方法 app/controllers/components/email.php
1 function send($content = null, $template = null, $layout = null)
if (!empty($this->attachments)) { $this->__attachFiles(); }
を探しだし、その直前に、下記を付け加える。
##spok $enc=mb_detect_encoding($this->__message); $this->__message=mb_convert_encoding($this->__message,$this->charset,$enc); if (!empty($this->attachments)) { $this->__attachFiles(); }
これがメッセージ本文のエンコード。
2 function __createHeader()
if ($this->delivery == 'smtp') { $this->__header .= 'Subject: ' . $this->subject . $this->_newLine; }
を探しだし、その直前に、下記を付け加える。
##spok $enc=mb_detect_encoding($this->subject); $this->subject=mb_convert_encoding($this->subject,$this->charset,$enc); if ($this->delivery == 'smtp') { $this->__header .= 'Subject: ' . $this->subject . $this->_newLine; }
これが件名(subject)のエンコード
3 function __wrap($message)
$formated .= $this->wordwrap($word, $this->_lineLength, $this->_newLine, true);
を探しだし、以下に改変。
$formated .= $this->spok_wordwrap($word, $this->_lineLength, $this->_newLine, true);
4 このクラス内に以下のメンバ関数を追加
##spok function spok_wordwrap($word,$lenth,$newLine,$flag=true){ $ret=null; $enc=mb_detect_encoding($word); for($i=0;$i<mb_strlen($word);$i+=$lenth){ $ret.=mb_substr($word,$i,$lenth,$enc).$newLine; } return $ret; }
3,4はwordwrapのマルチバイト化。禁則処理はしていない簡単なもの。
5 function __encode($subject)
if (low($this->charset) !== 'iso-8859-15') {
を探しだし、その直前に、下記を付け加える。
##spok $enc=mb_detect_encoding($subject); $subject=mb_convert_encoding($subject,$this->charset,$enc); if (low($this->charset) !== 'iso-8859-15') {
これは、fromやccヘッダの日本語部分のエンコード。
以上です。
CakePHP(1.2.0.6311 beta )さくらインターネットでテスト
*1 : でも、ISO-2022-JPで送れれば、まずどの用途でも大丈夫ですよね
- TB-URL http://www.cpa-lab.com/tech/070/tb/
-
▼
EmailComponentの使い方。htmlメール&テンプレート。
CPA-LABテクニカル CakePHP1.2bのEmailコンポーネントでは、textメールはもちろん、htmlメール、添付ファイルなどを簡単に送ることができる。また、テンプレートとして、viewやlayoutが使えるので、ここでもMVCの分離ができている。なお、今回の記事は下記...
-
▼
EmailComponentの使い方。添付ファイルの送り方。
CPA-LABテクニカル CakePHP1.2bのEmailComponentでは、簡単に添付ファイルを送ることができる。なお、今回の記事は下記改造をしていることを前提にしています。EmailComponentで簡単日本語メール。CakePHP1.2b通常の設定に下記のように設定す...
-
▼
EmailComponentの使い方。Toヘッダに日本語を使う。
CPA-LABテクニカル CakePHP1.2bのEmailComponentでは、from,cc,bcc,subject,本文に日本語を使うことができます。でも、デフォルトだと、Toヘッダだけは、日本語を使うことができません。しかし、smtp方式で送付するようにすれば、Toヘッ...