LoginSignup
15
9

More than 5 years have passed since last update.

Laravel5.3 で Gmail を利用してメール送信する方法

Last updated at Posted at 2016-11-03

環境

  • 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ファイルに以下の内容を追記する
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を利用して送信し過ぎると、
スクリーンショット 2016-11-01 18.38.06.png
のように Gmail にBANされて一時的に送信できなくなるので注意。

運用上の疑問

サービスごとにMail配下にクラスを作成していくのか

今回のようにRegisterShippedというクラス名にすると、登録(Register)時のメール送信にしか使えない。
なので、
- OrderShipped
- InfoShipped
...
のようにメールを送信する度にクラスを作成することになる。
もし汎用的にする場合はBuildShippedのようにして、Controller からsubjecttemplateの情報を受け取る必要がある。
そもそも〇〇Shippedという名前で良いのか?
チュートリアルがOrderShippedだったから合わせて作ったけど。。

15
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9