Amazon SES

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の申請をします。


Tagged on:         

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>