WEB/システム/IT技術ブログ

CakePHPでEmailコンポーネントを使ってメールを送ってみる

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;?>

考え方は一緒ですね。

ページテンプレートと同じようにしてメールテンプレートを管理できるのは、構造を整理しやすく、かつ、分かりやすく、便利だと感じました。

B!

Comment

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives