##環境
- CentOS 7
- PHP 7
- Laravel 5.3
Mailable クラス作成
php artisan make:mail RegisterShipped
Mailable クラス編集
上述のコマンドを打つと、app/Mail/RegisterShipped.php
というクラスが生成される。
以下のように編集する。
app/Mail/RegisterShipped.php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class RegisterShipped extends Mailable
{
use Queueable, SerializesModels;
public $sendData;
public function __construct($sendData)
{
$this->sendData = $sendData;
}
public function build()
{
return $this->subject('タイトルサンプル')
->text('emails.templates.registers_mail');
}
}
###解説
->text
のようにしておけば、後述のテンプレート(registers_mail.blade.php
)の中身を、改行なども含めて記述したまま出力される。
逆に->text
ではなく->view
を使用するとHTMLとして出力されるので、改行する際は<br>
などを記述しないといけない。
##コントローラー編集
app/Http/Controllers/RegistersController.php
namespace App\Http\Controllers;
use App\Mail\RegisterShipped;
use Mail;
class RegistersController extends Controller
{
public function apply()
{
$sendData = [
'register_token' => 'register_token',
];
Mail::to(`test_to@gmail.com`)->send(new RegisterShipped($sendData));
}
}
##メール本文(View)作成
resources/views/emails/templates/registers_mail.blade.php
会員登録の申請をしていただき、ありがとうございます。
以下のURLから本登録に進んでください。
https://hoge.jp/registers/{{ $sendData['register_token'] }}
.env 編集
-
.env
ファイルに以下の内容を追記する
.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=hoge@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=hoge@gmail.com
MAIL_FROM_NAME=hoge@gmail.com
##注意点
Gmail のSMTPを利用して送信し過ぎると、
のように Gmail にBANされて一時的に送信できなくなるので注意。
##運用上の疑問
###サービスごとにMail
配下にクラスを作成していくのか
今回のようにRegisterShipped
というクラス名にすると、登録(Register)時のメール送信にしか使えない。
なので、
OrderShipped
-
InfoShipped
...
のようにメールを送信する度にクラスを作成することになる。
もし汎用的にする場合はBuildShipped
のようにして、Controller からsubject
やtemplate
の情報を受け取る必要がある。
そもそも〇〇Shipped
という名前で良いのか?
チュートリアルがOrderShipped
だったから合わせて作ったけど。。