【Laravel】Mailpitとは:開発用メールサーバーによるメール送信テスト

2023.09.21 /

【Laravel】Mailpitとは:開発用メールサーバーによるメール送信テスト

記事では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というサービスもあります。確認程度の少量のメールであれば無料で利用することが可能です。

関連リンク:mailtrap Email Delivery Platform

Mailpitのメリット

Mialpitを利用するメリットは以下の通りです。

Mailpitのメリット
  • メールサーバーの準備が不要
  • メールの誤送信をしても影響がない
  • 実在しないメールアカウントでテストが可能

MailpitはLaravel Sailに最初から備わっているため、即座に利用できます。メールサーバーやメールアドレスの準備は本番環境に移す際に準備すれば問題ないです。

またメール送信プログラムの不備により誤送信が発生した場合でも、テスト環境であるMailpitで受け取るため誤送信による影響は一切ないです。

Mialpitの基本的な使用方法

Mailpitのダッシュボード画面

Laravel Sailが起動していればMailpitも起動しています。Mialpitのメールサーバーのポート番号は1025、ダッシュボードは8025を使用しています。

Mailpitのダッシュボード画面へは以下URLにアクセスします。

http://localhost:8025/

上記のURLにアクセスすると次図のようなダッシュボードが表示されます。

Laravel:mailpitのダッシュボード

送信したメールはこのMailpitで受信され、こちらの画面に表示されます。

POINT

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」を押してください。

Laravel:パスワードのリセット

画面に緑色の文字で「passwords.sent」または「パスワードリマインダーを送信しました」と表示されればOKです。

Laravel:パスワードリマインダーを送信しました

Mailpit(http://localhost:8025)にアクセスするとパスワードリセットのメールを確認できます。

Laravel:Mailpitからメールの確認
注意点

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を活用できるようにしてください。