<CakePHP> CakePHP 2 でメール送信
CakePHP2.0ではメール送信機能を実装する場合に2つの選択肢がある。
1. CakeEmailを使用
2. EmailComponentを使用
以下、CakeEmailを使う。
・メールレイアウト
/app/View/Layouts/Emails/text/mylayout.ctp
<?php echo $content_for_layout; ?>
の箇所にメール本文が入る。
・メールテンプレート
/app/View/Emails/text/mytemplate.ctp
変数は送信処理のviewVarsメソッドでセットする。
<?php echo $name; ?> 様 <?php echo $msg; ?>
・設定(Gmail)
/app/Config/email.php
<?php public $gmail = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'from' => array('xxx.gmail.com' => 'Ackintosh'), 'sendAs' => 'text', 'replyTo' => 'xxx.gmail.com', 'returnPath' => 'xxx.gmail.com', 'username' => 'xxx.gmail.com', 'password' => 'password', ); ?>
・送信処理
Controller
<?php App::uses('CakeEmail', 'Network/Email'); $email = new CakeEmail('gmail');// /app/Config/email.phpで設定しておく $result = $email ->config(array('log' => 'emails')) ->viewVars($this->request->data['Member']) ->to(array('ooo@ooo.com' => 'new member')) ->subject('Sent from Ack.') ->send(); if (!$result) { echo 'Error : Email could not send.'; } ?>
/app/tmp/logs/emails.log にログを吐く。
$result には下記の連想配列が入るので、テストコードでこれを確認すれば良いと思われます。
Array ( [headers] => From: アドレスの別名 <from用のアドレス> X-Mailer: CakePHP Email Date: Sun, 06 Nov 201118:47:34 +0900 Message-ID: <4eb67ce538444757aa9e1eb7cbdd56cb@localhost:8081> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [message] => メッセージ )
テストは以下のテストファイルが参考になるそうです。
lib/Cake/Test/Case/Network/Email/CakeEmailTest.php
実際に送信できているかをMacで確認するには
/var/log/mail.log を見ます。
参考URL
http://d.hatena.ne.jp/lesamoureuses/20111106/1320584340 (テストについても書かれている)
http://www.b-prep.com/blog/?p=1293
http://rzpg.blogspot.jp/2011/12/cakephp20cakeemail.html