ローカルで、メールのテストをしたい
Laravelでメールを送りたい。
ただ、実際に送ると、間違えて送ったら困る。
なので、mailhogを使ってメールが送信できているか確認しよう。
mailhogを使うと、ページを見に行くと下の画像のように送信したメールが見れます。
では、環境構築の方法を見てみましょう。
自作の参考コード
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
内容解説
- imageに
mailhog/mailhog
でmailhogの環境構築。 - portの設定。
localhost:8025
でメールの受信状態を確認 - environment内の設定で、/tmpディレクトリに、メールの内容をファイルで保存する
- volumesで、手元の
maildir
ディレクトリにメールの内容を保存する
Laravel側
- メール文面の設定
- メールを送信するコントローラー
- (テスト用に)コントローラーにアクセスするルーティング
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'); });
内容解説
SimpleMail extends Mailable
で、build内でbladeを呼ぶ。- bladeでhtmlメールのデザイン設定
- Mailファサードでsendを呼び、メール送信する
参考
MailHogを利用してメール送信テスト環境をdockerコンテナ上に作る - Qiita
Docker + Rails + Mailhogでメールを送信せずにブラウザで確認できる開発環境を作る - ココナラよもやまブログ