CakePHP3で、メールの飛ばし方を説明する。
メールサーバーとして、さくらのメールボックス(メールサーバー)を使うことにする。
メールサーバー情報
まずは、サクラでメールボックスを借りる。
年間で1000円ちょっとのメールサーバだけど、メルマガ送ったりするわけでないなら十分。
レンタルして、ドメインを決めて、xxxxx.sakura.ne.jpといった感じのドメインになる。
次に、適当にプログラム用にアカウントを作成する。(ここではsenderとする)
ここまでで必要な情報が揃う
- ドメイン名:xxxxx.sakura.ne.jp
- アカウント名:sender
- パスワード:*********
メール情報を設定する
config/app.phpでEmailTransportという設定があるので、以下のように’sakura’の設定を追記する。
'EmailTransport' => [ 'default' => [ 'className' => 'Mail', // The following keys are used in SMTP transports 'host' => 'localhost', 'port' => 25, 'timeout' => 30, 'username' => 'user', 'password' => 'secret', 'client' => null, 'tls' => null, ], 'sakura' => [ 'className' => 'Smtp', 'host' => 'xxxxxx.sakura.ne.jp', 'port' => 587, 'timeout' => 30, 'username' => 'sender@xxxxxx.sakura.ne.jp', 'password' => '*********', 'tls' => true, ],
要約すると、Smtpで587番ポートで、メールを送るよってこと。
メールを送る
まず、メールのテンプレートとなる物を用意する。
src/Template/Email/textに、適当なctpファイルを追加する。(ここではrecblog.ctpとする。)
内容は以下のような感じ。
オススメのブログは以下のURLから飛べます! <?= $link ?>
そして、送信する側は以下のような感じ。
$link = 'http://gomocool.net/gomokulog/' $emailObj = new \Cake\Network\Email\Email(); $emailObj->transport('sakura') ->from('sender@gomocool.net') ->template('recblog') ->viewVars(['link'=>$link]) ->to('xxxxx@mogemoge.co.jp') ->subject('オススメのブログ!!') ->send();
最初に設定したsakuraの設定で、fromを適当に変えて、templateでさっきのrecblog.ctpを読み込んで、recblog.ctpで使う変数$linkを設定して、xxxxx@mogemoge.co.jp向けにタイトル’オススメのブログ!!’で送信する。
全部、アロー(->)演算子でつなげまくってるけど、別に繋げなくても一つ一つ設定しても大丈夫。
$emailObj->transport('sakura'); $emailObj->from('sender@gomocool.net'); $emailObj->template('recblog'); $emailObj->viewVars(['link'=>$link]); $emailObj->to('xxxxx@mogemoge.co.jp'); $emailObj->subject('オススメのブログ!!'); $emailObj->send();
ちなみに new するときにネームスペースをフルで書いてるけど、ファイルの先頭でuse使えば省略できる。
注意点としては、fromに存在しないドメインを入れるとエラーになる。