Edited at

ローカルの開発環境にSMTPを整備する

More than 1 year has passed since last update.


概要

ローカル環境でアプリを開発している際、メール送信が必要な場合があります。

そういったメール送信を気軽に行えるような環境を作りたいので調べてみる。

<実現したいこと>


  • PHPとSMTPは独立したコンテナで構成する

  • PHPなどのプログラムからメールが送信できたか確認したい

  • 外部へメールを送信して欲しくない

  • ネットワークが繋がってないところでもテストできる

  • 送信したメールが気軽に確認できる


ファイル構成

dockerとdocker-composeを使い、optフォルダ内に下記のファイルを作成します。


ファイル構成

./opt

├ Dockerfile # PHPコンテナ
├ docker-compose.yml
├ ssmtp.conf
└ php.ini


SMTPのコンテナ追加

「MailCatcher」で実現したいことをカバーできそうなので試してみる。


docker-compose.yml追加


docker-compose.yml

version: '2'

services:
smtp:
image: schickling/mailcatcher
container_name: 'smtp'
ports:
- "1080:1080"
- "1025:1025"


PHPのコンテナ追加

独立したコンテナにするため、PHP-FPMを使います。


Dockerfile作成

ssmtpを追加でインストールするため、公式コンテナを少しカスタマイズします。


Dockerfile

FROM php:5.6-fpm

# php options (ssmtp)
RUN apt-get -y update && apt-get install -y ssmtp mailutils



php.ini作成

PHPの設定ファイルを作成します。


php.ini

[Date]

date.timezone = "Asia/Tokyo"

[Mail]
sendmail_path = "/usr/sbin/ssmtp -t"



設定ファイル作成

ssmtp.confファイルを作成します。

※ mailcatcher(1025ポート)へ送信する


ssmtp.conf

#

# Config file for sSMTP sendmail
#
mailhub=smtp:1025
FromLineOverride=YES


docker-compose.ymlに追加

buildで、上記DockerfileのPHPコンテナを作成して読み込みます。


docker-compose.yml

version: '2'

services:
smtp:
image: schickling/mailcatcher
container_name: 'smtp'
ports:
- "1080:1080"
- "1025:1025"

php:
build: .
container_name: 'php'
ports:
- '9000:9000'
volumes:
- ./php.ini:/usr/local/etc/php/php.ini
- ./ssmtp.conf:/etc/ssmtp/ssmtp.conf



コンテナ起動

docker-composeで各コンテナを起動する。


ターミナル

$ docker-compose up -d


正常に起動しているか確認してみる。


ターミナル

$ docker-compose ps

Name Command State Ports
----------------------------------------------------------------------------------------------
php docker-php-entrypoint php-fpm Up 0.0.0.0:9000->9000/tcp
smtp mailcatcher --foreground - ... Up 0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp


メール送信テスト


PHPコンテナへ接続

PHPを実行するため、PHPコンテナへ接続する。


ターミナル

$ docker exec -it php bash

root@86787e7bb563:/var/www/html#


メール送信

PHPコマンドにてmail関数を実行してみる。


PHPコンテナ

root@86787e7bb563:/var/www/html# php -r "mail('hoge@example.com', 'My Subject', 'My Body');"



メールの送信確認

mailCatcherのWebUIでメールを確認してみる。

※ 1080ポートへアクセス

mailcatcher.png

無事にメールが送信されているようです。

以上


参考サイト