▼ 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ヘッ...