Laravelでメール送信のテスト環境をMailpitとDockerで構築する | アントレプログラマー

Laravelでメール送信のテスト環境をMailpitとDockerで構築する

Laravel

こんにちは、ニキです。

こんな方におすすめの記事です

  • 開発環境でメール送信のテストをしたい
  • 実在するメールアドレスには送りたくない
  • MailpitをDockerコンテナとして使いたい

今回はLaravel SailでフェイクSMTPサーバーとして採用されているMailpitを使って構築します。他にも開発環境でメール送信する方法が以下で紹介されています。

Laravel - The PHP Framework For Web Artisans
LaravelisaPHPwebapplicationframeworkwithexpressive,elegantsyntax.We’vealreadylaidthefoundation—freeingyoutocreatewithoutsweatingthesmallthings.

Laravelアプリケーションを作成済みの前提で進めます。

以下の記事で開発環境の構築から解説しています。

今回の記事では、Laravelでメール送信のテスト環境をMailpitとDockerで構築する方法を解説します。構築した後に、実際にメールを受信できるかまで確認します。

Takaharu Niki

・Webエンジニア5年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする

環境情報

  • 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

他にもオプションを必要とする場合は、以下のページで確認できます。

Runtime options
AnemailandSMTPtestingtoolwithAPIfordevelopers-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コンテナとして使いたい

効率的に学習するならプログラミングスクールの検討もありです。

さらに詳しく学びたい方は、以下の書籍がおすすめです。

Docker/Kubernetes 実践コンテナ開発入門

コンテナ技術をこれから学びたい方、あるいはすでに基本的な知識を持っているが実践的なスキルを伸ばしたい方に最適な書籍です。この書籍では、Dockerの基本操作から始まり、Kubernetesでのクラスタ管理、サービスの自動化、スケーリング、ネットワークの設定といった高度な内容に至るまで、手厚くガイドしてくれます。

PHPフレームワークLaravel Webアプリケーション開発 バージョン8.x対応

既にLaravelの基本を知っていてスキルアップを図りたい開発者にとって、かなりおすすめです。クリーンなコーディング、保守性、テストの容易さなど、Laravelの提供する現代的なWeb開発のベストプラクティスを体系的に学べる内容が含まれています。

Takaharu Niki

・Webエンジニア5年目。
・バックエンドを中心に、フロントエンドやDevOps業務も経験。
・現在は、自社サービス企業のテックリードとして従事。

Takaharu Nikiをフォローする
Laravel
Takaharu Nikiをフォローする
アントレプログラマー
タイトルとURLをコピーしました