CakePHP

CakePHP2.xで、CakeEmailを使ってメール送信してみる。

2015/01/11

CakePHP1.3の時はqdmailを使ってメール送信していましたが、2系統ではデフォルトで実装されている「CakeEmail」というコアライブラリを使ってメール送信するのがスマートなやり方のようです。

とりあえず、CakeEmailでメール送信する時はどうするのかを忘備録代わりにポストです。
なお、CakePHPは、2.3.6を使っています。

CakeEmail設定

手順1 ファイル名を変更

「.default」を消して、拡張子をphpとします。

app/Config/email.php.default
↓↓↓
app/Config/email.php

手順2 app/Config/email.phpを編集

元々の設定で、「default」、「smtp」、「fast」という3つの配列があります。
CakePHP1.3ではずーっとqdsmtpを使っていたので、その流れをくんで、SMTPを使って送信してみます。

なので、配列 $smtp を編集。
あとで設定を呼び込むところで設定した別名配列を呼べるので、別名を作っても構いませんし、smtpをそのまま編集しても構いません。
面倒くさいので、そのまま編集しました。

編集前

使用するサーバのSMTP設定を基に、上記編集前を以下のように編集。

"log" を true とすることで、送信時に app/tmp/logs/debug.log へ送信内容を記録してくれる親切設計です。

手順3 メールテンプレートを編集

メール送信する際は、メールテンプレートを介して送信するので、そのテンプレを作成します。
テキストメールを送信するので、app/View/Emails/text/ に、text_mail.ctp を作成。

中身はこれだけでOKです。

日本語を含む場合は、文字コードはUTF-8で保存。

HTMLメールの場合は、app/View/Emails/html/ にテンプレを作成、設置します。

手順4 コントローラーを編集

適当にコントローラー/アクションを作成。
テストなので、EmailController という分かりやすい名前にしてみました。

App::uses('CakeEmail', 'Network/Email'); は、AppControllerに記述してもOK。個人的にはそちらの方が好きかも。

送信先がひとつだけの場合は、単純にメールアドレスを文字列で渡せばOK。
複数設定したい場合は送信先を配列にして渡すことで、複数の送信先が設定可能です。

メールテンプレートに、レイアウトを使ってみる

上記例ではメールテンプレートは「text_mail.ctp」単体での使用方法ですが、CakeEmailでは他のビュー同様、レイアウトを指定し、共通のヘッダやフッタを利用する事が可能です。

例えば、以下の様なメール内容にしたい場合、

もう、予想はつくと思いますが、以下のようにします。

app/View/Layouts/Emails/text/default.ctp

テンプレを作ったら、コントローラーの記述を少し変更。
template部分を、('ビューファイル', 'レイアウトファイル')とします。
実例はこんな感じで。

ちなみに、テンプレートを利用しないこともできます。
template() とか viewVars() を使わずに、send() の引数に送信内容を直接入れればその内容が送信されます。

結構、簡単に使えるようなので、DBに登録しているテンプレートを使うなど、色々試してみたいと思います。

[tgAmazonItemLookup asin="4088707702" related="1"]

-CakePHP
-, , ,