CakePHP3でメールの送信方法を書いていきたいと思います。これがまたハマりました(笑)
色んな方法でやろうとしたがうまくいかず、行き着いたのが下記です。
関数の呼び出し
1 2 3 4 5 6 |
// メール送信 if($this->_send_mail($to, $subject, $body, $fromname, $from) === TRUE) { // 送信成功 } else { // 送信失敗 } |
$to:宛先
$subject:件名
$body:本文
$fromname:差出人名称
$from:差出人
それぞれ設定してください。
関数の定義
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * メール送信 */ private function _send_mail($to,$subject,$body,$fromname,$fromaddress){ $email = new Email('default'); $email->from([$fromaddress => $fromname]); $email->to($to); $email->subject($subject); // 例外処理 $ret = true; try { $email->send($body); } catch (\Exception $e){ $ret = false; } return $ret; } |
$email = new Email(‘default’);
上記の、オブジェクト生成時に、config/app.php ファイルのEmailTransportを読みにいくので、
引数をdefaultで渡してあげると。トランスポートの設定した内容が取得できます。
var_dump($email);
中身を表示すると設定の内容が確認できるはずです。
トランスポートの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'EmailTransport' => [ 'default' => [ 'className' => 'Smtp', 'host' => 'smtp.**************', 'port' => 587, 'timeout' => 30, 'username' => '***************', 'password' => '***********', 'transport' => 'Smtp', 'client' => null, 'tls' => null, 'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null), ], ], |
******のところは、各自設定をしてください。
‘host’ => smpt.*******
※上記、注意!!!!
[smtp.*****]をちゃんと指定しないとメールが送られない。
‘host’ => *******
smtp.を書かないとメールが送られなくてハマった、メールサーバによって異なるらしい。
あるメールサーバでは出来て、あるメールサーバでは出来ないことがある。
結論、hostの設定は[smtp.******]と書いた方が確実。
参考CakePHP
これで、ようやくメールが送信出来るようになりました。CakePHP3は情報があまりないし、
前に出来ていたことが、出来なくなっていて、やり方が変更されていることがあるので、厄介です(笑)