LoginSignup
31
34

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-31

概要

ローカル環境でアプリを開発している際、メール送信が必要な場合があります。
そういったメール送信を気軽に行えるような環境を作りたいので調べてみる。

<実現したいこと>

  • 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

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

以上

参考サイト

31
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
34