- 2008/05/28
- CakePHP
CakePHPでメール送信の方法はいくつかありますが、微妙に使い勝手が悪かったり、不安定だったりしたので、CakePHP1.x系で動くメール送信コンポーネントを作ってみました。
コンポーネントと言っても、実際はPHPMailerのラッパーです。しかも、PHPMailerを日本語環境で使いやすくしたJPHPMailerのラッパーにCakePHPのVIEWを使えるようにカスタマイズしただけで、僕が書いたコードは10行ちょっとです(汗)。
PHPMailerとJPHPMailerに感謝をしつつ公開します。
インストール方法
インストールはいたって簡単で、まずはPHPMailerをダウンロードしてきます。
ダウンロードして解凍したフォルダをそのまま /vendors ディレクトリに配置します。
次に、cakemail.php をダウンロードして /app/controllers/components ディレクトリに配置します。
- Cakemail ダウンロード先(右クリックで保存などで)
これでインストール自体は完了です。
設定方法
メール送信コントローラ(今回は mail_controller.php とします)から cakemail を読み込みます。
class MailController extends AppController {
var $name = 'Mail';
var $uses = null;
var $components = array ('Cakemail');
var $helpers = array('html','javascript');
var $pageTitle = 'メール送信';
}
なお、モデルは使わないので、 var $uses = null; としています。
VIEWファイルとLAYOUTファイルの設置
CakePHPを使うなら、メールのテンプレートもCakePHPのVIEWを使いたい、ということで、 /app/views/ 以下にそれぞれ VIEWファイルと LAYOUTファイルを設置します。
- VIEWファイル
- テキストメール設定ディレクトリ:/app/views/elements/email/text/*.thtml
- HTMLメール設定ディレクトリ:/app/views/elements/email/html/*.thtml
- LAYOUTファイル
- テキストメール設定ディレクトリ:/app/views/layouts/email/text/*.thtml
- HTMLメール設定ディレクトリ:/app/views/layouts/email/html/*.thtml
テキストメールとHTMLメールどちらでも送ることができます。それぞれ使いたい方のディレクトリにファイルを配置してください。
送信方法
mail_controller.php にメール送信するコードを書きます。
class MailController extends AppController {
var $name = 'Mail';
var $uses = null;
var $components = array ('Cakemail');
var $helpers = array('html','javascript');
var $pageTitle = 'メール送信';
function index(){
//メール本文の設定
$content = array('hoge' => 'ほげですよー',
'piyo' => 'ぴよぴよですよー',
);
//メール送信の設定
$to = 'zarutofu@gmail.com';
$cc = 'zaru@tofu-kun.org';
$subject = 'メールタイトル:長いタイトルもOK?CakePHPでメールを送信するコンポーネントテスト';
$from = 'zaru@tofu-kun.org';
$fromname = 'CakePHP テスト';
//添付ファイルの設定
$file = array(WWW_ROOT . 'files/attach.jpg',
WWW_ROOT . 'files/attach.zip',
);
$this->Cakemail->ClearAddresses(); //アドレスクリア
$this->Cakemail->addTo($to);
$this->Cakemail->ClearCCs(); //CCアドレスクリア
$this->Cakemail->addCc($cc);
$this->Cakemail->setFrom($from,$fromname);
$this->Cakemail->setSubject($subject);
$this->Cakemail->setType = 'text'; //html or text
//添付ファイル追加
$attach = array();
if(isset($file)){
foreach($file as $fileName){
if(file_exists($fileName)){
$this->Cakemail->AddAttachment($fileName);
}
}
}
$this->Cakemail->setBody($content,'mailsend_view','mailsend_layout'); //viewとlayoutの設定
if (!$this->Cakemail->send()){
echo("メールが送信できませんでした。エラー:".$this->Cakemail->getErrorMessage());
}
}
}
使い方自体は PHPMailer と同じなので、難しくはないと思います。注意点としては本文をセットする setBody でVIEWファイルとLAYOUTファイルを指定してあげることと、$this->Cakemail->setType でHTMLメールかテキストメールか指定することです(デフォルトでテキストメールになっているので、HTMLメールを送るとき以外はコメントアウトでもOK)。
VIEWファイルとLAYOUTファイルの例
上記のコントローラを使って、VIEWファイルとLAYOUTファイルの例を出しておきます。
/app/views/elements/email/text/mailsend_view.thtml
メール送信します。 このファイル mailsend_view.thtml 自体の文字コードは UTF-8 で保存しています。 ■hoge:<?php echo h($content['hoge']); ?> ■piyo:<?php echo h($content['piyo']); ?>
/app/views/layouts/email/text/mailsend_layout.thtml
<?php
if($session->check('Message.flash')){
$session->flash();
}
echo $content_for_layout;
これで添付ファイルもHTMLメールもテンプレートも簡単に使うことができるようになりました。
参照/参考サイト
- Newer: CakePHPでサムネイル画像を作る
- Older: Facebookに登録してみた