のぐそんブログ

暗いおじさんがシコシコ書くブログです。

LaravelでMailHogを使うメモ

LaravelでMailHogを利用してメール送信する為のメモです。
環境構築には、Laradocを利用しています。

LaravelのQueueサービスを試してみたくて、メールの送信を調べたのであまり参考にならないと思います。

/laradock/docker-compose.ymlを編集。

### Mailhog ################################################
    mailhog:
      build: ./mailhog
      ports:
        - "1025:1025"
        - "8025:8025"
      networks:
        - frontend
        - backend
      image: mailhog/mailhog #追加

laradockプロジェクト/.env

MAIL_DRIVER=smtp
MAIL_HOST=mailhog #変更
MAIL_PORT=1025 #変更
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
docker-compose up -d nginx mysql mailhog

localhost:8025でアクセスすると以下の画面が表示されます。

f:id:nogson2:20191220175604p:plain

メールクラスを作成

以下のコマンドで、/app/Mailにメールクラスが作成されます。

php artisan make:mail SampleMail

--markdownオプションを利用すると、/resources配下にメール用のテンプレートファイルが作成されます。

php artisan make:mail SampleMail --markdown=email.sample

作成されたMailクラスは以下になります。

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SampleMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('view.name');
    }
}

--markdownオプションを利用するとbuildの定義が少し変わります。

    public function build()
    {
        return $this->markdown('email.sample');
    }

routeを変更

/routes/webにメール送信用の処理を追加します。

Route::get('/sample_mail', function(){
    Mail::to('sample@example.com')->send(new SampleMail);
    return '送信完了!';
});

/app/Mail/SampleMail.phpのbuild関数を変更します。
変更に合わせて/resources/viewsにviewファイルを作成します。

    public function build()
    {
        return $this->view('email.sample');
    }

viewの/resources/views/email/sample.blade.phpの中身は、メールの中身になります。

お問い合わせありがとうございました!

mailhogをみると以下のようにメールが送信されているのが確認できます。

f:id:nogson2:20191220190737p:plain