【Laravel】Mailpitとは:開発用メールサーバーによるメール送信テスト
2023.09.21 /
本記事ではPHPフレームワークのLaravelにおける、開発用メールサーバーであるMailpitの使用方法について解説していきます。
Mailpitとは開発環境で利用できる開発用メールサーバーを構築するツールです。Mailpitを利用することでWebアプリケーション内のメール送信機能を開発環境で事前に不備がないか確認できます。
ぜひ本記事を通して、Mailpitについて理解を深めてください。
Mailpit
Mailpitとは
Mailpitとは開発用のメールサーバーを簡単に構築できるツールです。メール送信機能を備えたアプリケーションを開発する際に、開発環境でメール機能の確認(メールのプレビューなど)で利用されます。
Laravel Sailで環境を構築した場合は最初からMailpit は組み込まれています。Laravel Sail 8系まではMailHogというツールが組み込まれていましたが、Laravel Sail 9系からはMailpitが組み込まれるようになりました。
MailpitはWebサーバーとしての機能も備えており、受け取ったメールの送信リクエストをブラウザ上で確認することができます。
MailpitはオープンソースのMITラインセンスで公開されています。
MITライセンスとはオープンソースライセンスの1つであり、「ソフトウェアを自由に扱えること、再頒布時に著作権とライセンス表示が必要であること、著作権者は責任を負わないこと」を定めています。これら条件を守ることでソフトウェアの複製・変更・頒布・少量利用などが可能となります
ローカル環境ではMailpitが利用されますが、クラウドベースのメール機能の開発環境としてMailtrapというサービスもあります。確認程度の少量のメールであれば無料で利用することが可能です。
Mailpitのメリット
Mialpitを利用するメリットは以下の通りです。
- メールサーバーの準備が不要
- メールの誤送信をしても影響がない
- 実在しないメールアカウントでテストが可能
MailpitはLaravel Sailに最初から備わっているため、即座に利用できます。メールサーバーやメールアドレスの準備は本番環境に移す際に準備すれば問題ないです。
またメール送信プログラムの不備により誤送信が発生した場合でも、テスト環境であるMailpitで受け取るため誤送信による影響は一切ないです。
Mialpitの基本的な使用方法
Mailpitのダッシュボード画面
Laravel Sailが起動していればMailpitも起動しています。Mialpitのメールサーバーのポート番号は1025、ダッシュボードは8025を使用しています。
Mailpitのダッシュボード画面へは以下URLにアクセスします。
http://localhost:8025/
上記のURLにアクセスすると次図のようなダッシュボードが表示されます。
送信したメールはこのMailpitで受信され、こちらの画面に表示されます。
Mailpitは開発用メールサーバーなので実際にメールを送ることはないです。本番環境で動かす場合は別途メールサーバーを用意する必要があります
Mailpitのメール送信設定
プロジェクト直下にある「.env」ファイル内にメール送信の設定情報が設定されています。
MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
ここの「MAIL_FROM_ADDRESS」が送信元メールアドレスです。ここで設定したメールアドレスがデフォルトの送信メールアドレスとなります。使いたいメールアドレスに変えてみましょう。
MAIL_FROM_ADDRESS="office54@office54.net"
メール送信の実行
ここでは実際にメールを送信してみます。Laravelの環境として認証機能Breezeが導入されていることを前提として話を進めていきます。
Breezeに備わっている「パスワードのリセット」機能を使ってメール送信を確認します。パスワードのリセット画面は「http://localhost/forgot-password」にアクセスします。
次図の画面が表示したら、登録済みのアカウントのメールアドレスを入れて「EMAIL PASSWORD RESET LINK」を押してください。
画面に緑色の文字で「passwords.sent」または「パスワードリマインダーを送信しました」と表示されればOKです。
Mailpit(http://localhost:8025)にアクセスするとパスワードリセットのメールを確認できます。
Mailpitで受信したメールはSailを再起動するとすべてなくなります。Sailの再起動後にメールがなくなっていても慌てないようにしてください
Mailpitのメール設定
先ほど送信元メールアドレスの変更で「.env」ファイルを修正しましたが、メール設定の大本のファイルは「config/mail.php」です。中を確認いただくと、メールの設定が記載されているのがわかります。
return [
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'url' => env('MAIL_URL'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'local_domain' => env('MAIL_EHLO_DOMAIN'),
],
… 以下省略 …
env()では.envファイルの値を取得しています。つまり.envファイルのメール設定を変えることで、自動的にmail.phpの各設定値も変わるという仕組みになっています。
またenv()には第一引数と第二引数が指定されています。第一引数に指定された設定値が.envファイルに設定されてない場合、第二引数が初期値として設定されます。
まとめ
本記事「【Laravel】Mailpitとは:開発用メールサーバーによるメール送信テスト」はいかがでしたか。
Webアプリケーションにはメール送信は必須の機能です。事前にメール送信機能の動作を確認できるようにMailpitを活用できるようにしてください。