こんにちは、ニキです。
こんな方におすすめの記事です
- 開発環境でメール送信のテストをしたい
- 実在するメールアドレスには送りたくない
- MailpitをDockerコンテナとして使いたい
今回はLaravel SailでフェイクSMTPサーバーとして採用されているMailpitを使って構築します。他にも開発環境でメール送信する方法が以下で紹介されています。
Laravelアプリケーションを作成済みの前提で進めます。
以下の記事で開発環境の構築から解説しています。
今回の記事では、Laravelでメール送信のテスト環境をMailpitとDockerで構築する方法を解説します。構築した後に、実際にメールを受信できるかまで確認します。
環境情報
- Chip: Apple M1
- macOS: Ventura 13.2.1
- Node.js: 20.5.0
- npm: 9.8.0
アプリケーションの環境情報
- Laravel: 10.16.1
- Next.js: 13.0.3
Laravelのテスト用のメール環境を構築する
compose.yamlを編集します。servicesにmailpitの記述を追加します。
services:
app:
build:
context: ./php
dockerfile: Dockerfile
container_name: php
volumes:
- ./php/src:/var/www/html/example
web:
image: nginx:1.25.1-alpine-slim
container_name: nginx
ports:
- 8080:80
volumes:
- ./php/src:/var/www/html/example
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
db:
image: mysql:8.0.34
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: root
TZ: Asia/Tokyo
volumes:
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
mail:
image: axllent/mailpit:v1.8
container_name: mailpit
ports:
- 8025:8025
- 1025:1025
Web UIとSMTPを正しく動作させるために、正しいポートをマッピングする必要があります(デフォルトはWeb UIは8025、STMPは1025です)。
You need to ensure you map the correct ports (default Web UI on 8025 and SMTP on 1025).
引用 https://hub.docker.com/r/axllent/mailpit
他にもオプションを必要とする場合は、以下のページで確認できます。
以下のコマンドでmailpitコンテナを起動します。
docker compose up -d
コンテナ一覧を確認し、以下のようになっていればOKです。
docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mailpit axllent/mailpit:v1.8 "/mailpit" mail About a minute ago Up About a minute 0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp
mysql mysql:8.0.34 "docker-entrypoint.s…" db 7 days ago Up 7 days 0.0.0.0:3306->3306/tcp, 33060/tcp
nginx nginx:1.25.1-alpine-slim "/docker-entrypoint.…" web 7 days ago Up 7 days 0.0.0.0:8080->80/tcp
php tmp-app "docker-php-entrypoi…" app 7 days ago Up 7 days 9000/tcp
Laravelでメール送信テストをする
.envが以下のように設定されていることを確認します。.env.exampleも合わせて確認しておきます。
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_ENCRYPTION=null
http://localhost:8025/
へアクセスし、以下のようであればWeb UIが動作しています。
メールを送信します。今回は例として、http://localhost:3000/forgot-passwordへアクセスし、パスワードリセットメールを送信します。以下のように登録済みユーザーのメールアドレスを入力し、ボタンを押下します。
http://localhost:8025/
へアクセスすると、以下のようにメールの受信を確認できます。
まとめ
今回の記事では、以下の課題を解決できるように、Laravelでメール送信のテスト環境をMailpitとDockerで構築する方法を解説しました。
- 開発環境でメール送信のテストをしたい
- 実在するメールアドレスには送りたくない
- MailpitをDockerコンテナとして使いたい