CakePHP2.3 + CakeEmail + Amazon SES でメール送信する方法です。
1.SMTP用のIAMユーザの作成
まず、Amazon SES の管理画面へ行って、SMTP Settings画面にある「Create My SMTP credentials」ボタンを押して、SMTP用のIAMユーザを作成します。
作成後に取得できる、Security Credentials の SMTP Username と SMTP Password を控えておきます。
2.テスト用メールアドレスの認証
Email Addresses画面でテスト用のメールアドレスを登録します。登録したメールアドレス宛てに認証用のメールが送られてくるので、文中のリンクをクリックして認証します。
3.CakeEmailの設定
app/Config/email.php.default を app/Config/email.php にリネームして、ファイルの最後に下記を追加します。
app/Config/email.php
public $ses = array( 'transport' => 'Smtp', 'from' => 'xxx@xxxxxxxxx', //2.で認証したテスト用メールアドレス 'host' => 'email-smtp.xxx.amazonaws.com', //1.のSMTP Settings画面に書いてあるServer Name 'port' => 587, 'username' => 'xxxxxxxxx', //1.で取得したSMTP Username 'password' => 'xxxxxxxxx', //1.で取得したSMTP Password 'tls' => true );
次に、メールのテンプレートとレイアウトファイルを設定。今回の例では、下記の2つを使います。
app/View/Emails/text/ses_temp.ctp (これは新規で作成)
app/Layouts/Emails/text/default.ctp
書き方は普通のビューファイルと同じなので省略。
最後に、コントローラ。例えばadd画面でメール送信する場合。
App::uses('AppController', 'Controller'); App::uses('CakeEmail', 'Network/Email'); class StoresController extends AppController { public function add() { //~登録処理~ $email = new CakeEmail('ses'); //email.phpで設定した$sesを指定 $email->to('xxx@xxxxxxxxx'); //2.で認証したテスト用メールアドレス $email->subject('登録完了のお知らせ'); $email->template('ses_temp','default'); //使用するテンプレートを指定 $email->emailFormat('text'); $email->viewVars(array('storename'=>$store['Store']['name']); //送信内容をテンプレートファイルに渡します if ($email->send()) { //成功した時の処理 }else{ //失敗した時の処理 } } }
4.Productionの申請
Amazon SES はデフォルトではsandboxの制限あり環境で動作するため、一般利用する場合は、Dashboard画面からProduction Accessの申請をします。