CakePHP 1.3.12でEmailコンポーネントを使ってメールを送ってみます。
コンポーネントを読み込む
Emailコンポーネントを利用するためには、以下のようにしてコントローラで宣言するだけです。
var $components = array( 'Email', );
メールテンプレートを用意する
CakePHPではメールテンプレートを、ビューと同じようなしくみで作成することができます。
例えば、テキストメール「sample.ctp」というビューを作成する場合、以下にファイルを用意します。
/app/views/elements/email/text/sample.ctp
ビューの中身は、通常のページを構築する要領です。例えばこのような内容でしょうか。
<?php echo $to ?>さま メールどうもありがとうございます。 <?php echo $from ?>より
メールを送信する
コントローラ内で以下のように記述することで、上記ビューを利用してメールを送信します。
$this->set('to', 'あなた'); $this->set('to', 'わたし'); $this->Email->language = 'Japanese'; $this->Email->sendAs = 'text'; $this->Email->from = 'aaa@bbb.ccc'; $this->Email->to = 'ddd@eee.fff'; $this->Email->subject = 'メールのタイトル'; $this->Email->template = 'sample'; $this->Email->send();
そうすると「aaa@bbb.ccc」から「ddd@eee.fff」へ「メールのタイトル」というタイトルのメールが送信されます。
以下、実際のメールの内容です。
あなたさま メールどうもありがとうございます。 わたしより This email was sent using the CakePHP Framework, http://cakephp.org.
例えば、以下のように2行加えることで、宛先だけ変えて同じ内容を送信するといった処理が連続して行えるのも利点ですね。
$this->Email->to = 'ggg@hhh.iii'; $this->Email->send();
レイアウトを変更する
ビューを構築しただけでは、メールのフッタに
「This email was sent using the CakePHP Framework, http://cakephp.org.」
がついてしまいます。これはデフォルトのレイアウトの影響です。
先ほども述べたように、メールテンプレートは通常のページのビューと同じしくみなので、レイアウトファイルが存在ます。
この1行のメッセージを消すために、自身でレイアウトを用意します。
/app/views/layouts/email/text/default.ctp
中身は以下のようにします。
<?php echo $content_for_layout;?>
考え方は一緒ですね。
ページテンプレートと同じようにしてメールテンプレートを管理できるのは、構造を整理しやすく、かつ、分かりやすく、便利だと感じました。