こんにちは、中川です。
最近CakePHPはあまりさわってなかったのですが、久々にCakeからメール送信するバッチ処理を書くことがありまして、簡単に紹介したいと思います。
CakePHPでメール送信ですが、EmailComponent使いたいと思います。
テンプレートを使って送信する場合(テキストメールだと)、
/path/to/myproj/app/views/elements/email/text/hoge.ctp
<?php echo $user_name ?> さん
メールテストです!
メールテンプレートを作成し、アクションからは、
hoge_controller.php
<?php
・
・
var $components = array('Email');
・
・
function _sendMail() {
$this->Email->from = 'Somebody <somebody@example.com>';
$this->Email->to = 'Somebody Else <somebody.else@example.com>';
$this->Email->subject = 'Test';
// テンプレートはhoge.ctpを使用
$this->Email->template = "hoge";
// 'html'(HTML)、'text'(テキスト)、または'both'(両方)で送信。(デフォルトは 'text')。
$this->Email->sendAs = 'text';
// ビュー変数を普通に渡す。
$this->set('foo', $foo);
$this->Email->send();
}
・
・
?>
とこんな感じで簡単に送信できます。
しかし、今回は、バッチ処理で送りたいので、CakePHPのシェルとしてスクリプトを作成します。
Shellとして、作った場合、
var $components = array('Email');
このような使い方ができないようなので、startupメソッドでimportしたEmailコンポーネントをインスタンス化しています。また、メールテンプレートに変数を渡すために、インスタンス化したEmailコンポーネントにControllerのオブジェクトを渡してやり、Controllerに対して変数をの set を行っています。
以下、完成版です。
/path/to/myproj/app/vendors/shells/hoge.php
<?php
App::import('Core', 'Controller');
App::import('Component', 'Email');
class hogeShell extends Shell {
function startup(){
$this->controller = new Controller();
$this->Email = new EmailComponent($this);
$this->Email->startup($this->controller);
}
function main(){
$this->out("start!!");
$this->controller->set("user_name", "てすとゆーざー");
$this->_sendmail();
$this->out("complete!!");
}
function _sendmail(){
$this->Email->to = '#送信先メールアドレス#';
$this->Email->from = '#送信元メールアドレス#';
$this->Email->subject = 'TEST SUBJECT!';
$this->Email->sendAs = "text";
$this->Email->template = "hoge"; ## /path/to/myproj/app/views/elements/email/text/hoge.ctp
$this->Email->send();
$this->Email->reset();
}
}
?>
まだまだアシアルの開発では、symfonyが多いですが、
CakePHPも1.2正式版が出たらもっと使っていけたらいいかもと思います。