ackintosh

https://ackintosh.github.io/about/ に引っ越しました ☺

<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