エンジニアのひよこ_level10

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

【Docker】Laravel+mailhogでメールのローカル開発環境構築【346日目】

ローカルで、メールのテストをしたい

Laravelでメールを送りたい。

ただ、実際に送ると、間違えて送ったら困る。

なので、mailhogを使ってメールが送信できているか確認しよう。

mailhogを使うと、ページを見に行くと下の画像のように送信したメールが見れます。

f:id:willow710kut:20180924231235p:plain

では、環境構築の方法を見てみましょう。

自作の参考コード

Mail by klack710 · Pull Request #12 · klack710/study-laravel · GitHub

Docker側

docker-compose.yml

  mailhog:
    container_name: study-laravel_mailhog
    image: mailhog/mailhog
    ports:
      - "8025:8025"
    environment:
      MH_STORAGE: maildir
      MH_MAILDIR_PATH: /tmp
    volumes:
      - .maildir:/tmp 

内容解説

  1. imageに mailhog/mailhogでmailhogの環境構築。
  2. portの設定。 localhost:8025でメールの受信状態を確認
  3. environment内の設定で、/tmpディレクトリに、メールの内容をファイルで保存する
  4. volumesで、手元の maildirディレクトリにメールの内容を保存する

Laravel側

  1. メール文面の設定
  2. メールを送信するコントローラー
  3. (テスト用に)コントローラーにアクセスするルーティング

1.メール文面の設定

<?php
 namespace App\Mail;
 use Illuminate\Mail\Mailable;

 class SimpleMail extends Mailable
{
     /**
     * メッセージの生成
     * from関数とか使うと、差出人とか変えられる
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.simple_mail');
    }
}

simple_mail.blade.php

<body>
    <div>
    testmail
    </div>
</body> 

2.メールを送信するコントローラー

<?php
 namespace App\Http\Controllers\Mail;
 use App\Mail\SimpleMail;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;

 class SimpleMailController extends Controller
{
    /**
     * メール送信
     *
     */
    public function send_mail()
    {
        Mail::to('crimsondrop710@gmail.com')
            ->send(new SimpleMail());
        return "メール送ったよ!";
    }
 } 

3.(テスト用に)コントローラーにアクセスするルーティング

Route::group(['namespace' => 'Mail' , 'as' => 'mail.'], function () {
    Route::get('/simple_mail', 'SimpleMailController@send_mail')->name('simple_mail');
});

内容解説

  1. SimpleMail extends Mailableで、build内でbladeを呼ぶ。
  2. bladeでhtmlメールのデザイン設定
  3. Mailファサードでsendを呼び、メール送信する

参考

MailHogを利用してメール送信テスト環境をdockerコンテナ上に作る

Docker + Rails + Mailhogでメールを送信せずにブラウザで確認できる開発環境を作る - ココナラよもやまブログ