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に存在しないドメインを入れるとエラーになる。