目的
AWSのSESを使ってメールを送信します。
手順
プロダクションアクセスを申請
AWS Management ConsoleでSESのページにアクセスするとプロダクションアクセスについてメッセージが表示されてました。「Request Production Access」というボタンを押すと申請フォームが表示されるので利用する目的などを書き申請しましょう。
ドメインを認証する
メールの送信元のアドレスやドメインを認証できるようです。
今回はドメインの認証を行いました。「Verify New Domain」ボタンを押すと下記のような画面があり、自前のドメインにTXTレコードをこの内容で作ることでドメインの所持を証明してみせろという話です。
Route53で運営していたので、下記のように書き換えました(ほとんどモザイクだらけですが)。ちなみにTXTレコードの値はダブルコーテーションで囲ってないとエラーになるはずです。
ちなみにEmailAddressの認証のほうがラクです。メールアドレスを入れて送信し、受信したら本文のリンクを踏むだけ。メールアドレスの数があまりないようで増えることもないのであればこちらのほうがよいですね。この検証が通るとverifiedにステータスが変わります。
クレデンシャルを作成
DashboardのところにSMTPの設定などが書いてあります。そしてメールを送信するにはクレデンシャルが必要なのでこれを作ります。
ユーザ名とパスワードはなくさないようにしましょう。
メールを送信してみる(CakePHP2)
こんな感じで送信できました。プロダクションアクセスが可能になるまでverifiedになっているメールアドレスにしかメールできないようです。
public $admin = array(
'transport' => 'Smtp',
'from' => 'admin@example.com',
'host' => 'email-smtp.us-west-2.amazonaws.com',
'port' => 587,
'username' => SMTP_USER,
'password' => SMTP_PASSWORD,
'tls' => true
);
<?php
登録ありがとうございます。
<?php echo $content; ?>
App::uses('CakeEmail', 'Network/Email');
$email = new CakeEmail('admin');
$email->to('takayukii@example.com');
$email->subject('登録完了のお知らせ');
$email->template('sample');
$email->emailFormat('text');
$email->viewVars(array('content' => 'hogehoge'));
if ($email->send()) {
$this->log('メール送信に成功しました', LOG_DEBUG);
}else{
$this->log('メール送信に失敗しました');
}