たきゃはしです

Webとかデザインとかプログラムとか

CakePHP2.X 「CakeEmail」 の使い方

2012/09/04更新


簡単すぐにメール機能が実装できる代物です。便利だよー

CakePHP2から「CakeEmail」というコアライブラリが追加されました。
そこでメールの設定から送信まで、テンプレートファイルを利用しての基本的な使い方を解説します。

まずCake2を初めて見た時、Configフォルダに「email.php.default」ってのを見つけて「なんだこれ・・・」と思いましたよね?思わないかな?まぁどうでもいいけど、このファイルが重要なポイントになります。

さっそく手を動かしてもらいますが、「email.php.default」を「email.php」にリネームして開きます。


・app/Config/email.php

class EmailConfig {

	public $default = array(
		'transport' => 'Mail',
		'from' => 'you@localhost',
		//'charset' => 'utf-8',
		//'headerCharset' => 'utf-8',
	);

	public $smtp = array(
		'transport' => 'Smtp',
		'from' => array('site@localhost' => 'My Site'),
		'host' => 'localhost',
		'port' => 25,
		'timeout' => 30,
		'username' => 'user',
		'password' => 'secret',
		'client' => null,
		'log' => false
		//'charset' => 'utf-8',
		//'headerCharset' => 'utf-8',
	);

	public $fast = array(
		'from' => 'you@localhost',
		'sender' => null,
		'to' => null,
		'cc' => null,
		'bcc' => null,
		'replyTo' => null,
		'readReceipt' => null,
		'returnPath' => null,
		'messageId' => true,
		'subject' => null,
		'message' => null,
		'headers' => null,
		'viewRender' => null,
		'template' => false,
		'layout' => false,
		'viewVars' => null,
		'attachments' => null,
		'emailFormat' => null,
		'transport' => 'Smtp',
		'host' => 'localhost',
		'port' => 25,
		'timeout' => 30,
		'username' => 'user',
		'password' => 'secret',
		'client' => null,
		'log' => true,
		//'charset' => 'utf-8',
		//'headerCharset' => 'utf-8',
	);

}

なに?やけに変数や配列がいっぱいあってややこしそう?

それはいきなりすべてを理解しようとするからだよ。

逆に考えるんだ
「使えるオプションがいっぱいあってラッキー」と考えるんだ。


続いて、メール送信までのプロセスを設定から組み立てていきます。

CakeEmailの設定(Config/email.php


まず「$fast」から使えそうなオプションをコピペします。

・app/Config/email.php

	public $contact = array(
		'transport' => 'Mail',
		'from' => array('info@example.com' => 'SiteName'),
		'to' => array('contact@example.com' => 'SiteName'),
		'subject' => 'お問い合わせがあります',
		'sendAs' => 'text',
		'template' => 'contact', //テンプレートファイル
	);

これだけで「$contact」というお問い合わせフォーム用の設定が出来ました!

この変数名は任意ですので、予約なら「$reservation」、登録案内なら「$register」といった具合に調整してください。ちなみに変数はいくつ作っても大丈夫です。

メールフォームの作成


次はモデルなんですが、メール送信に直接関係ないので割愛します。
というわけでテンプレートとビューです。

・app/View/Emails/text/contact.ctp

名前:<?php echo $name; ?> 
メール:<?php echo $email; ?> 
電話番号:<?php echo $tel; ?> 
内容 
<?php echo $body; ?>

・app/View/Pages/contact.ctp

echo $this->Form->create('Contact');
echo $this->Form->input('name');
echo $this->Form->input('email);
echo $this->Form->input('tel');
echo $this->Form->input('body');
echo $this->Form->end('送信');


次はコントローラです。


・app/Controller/PagesController.php

App::uses('AppController', 'Controller');
App::uses('CakeEmail', 'Network/Email');

class PagesController extends AppController {

    public $name = 'Pages';
    public $uses = array();

    public function contact() {
        $this->loadModel('Contact');
        if ($this->request->is('post')) {
            $email = new CakeEmail();
            $email->config('contact'); //$contactの設定を読み込みます。
            $email->viewVars($this->request->data['Contact']); //送信内容をテンプレートファイルに渡します
            if($email->send()){
                    //メール送信が成功した場合ここで処理
            }
        }
        $this->render();
    }
}

コントローラでやることはあんまりないです。
これだけでメール機能を実装できますので、お手軽だなぁーと思います。

CakeEmailについての今の感想


今回使っていないオプションを見ると添付ファイル機能つけれそうだし、まだまだ研究の余地がありますねぇ。
詳しくはマニュアルをご覧下さい。
 →http://book.cakephp.org/2.0/en/core-utility-libraries/email.html