LoginSignup
11
13

More than 3 years have passed since last update.

Dockerでメールフォーム開発用コンテナを3分クッキング

Posted at

TL;DR

コードだけ読んでいただければよろしいかと。

前置き

実はメールフォーム設置だけの案件を意外と多く請けます。なお現在のところPHP率100%です。

今まではローカルの環境構築に php -S でローカルサーバー建てて mailcatcher に投げてテストしていて、正直これで十分だと思っていますしこれからもこれで行く気がします。軽いし。

しかしながらメイン業務であるフロントエンド開発では、基本としてDocker環境を活用した作業になることが多く、ローカル環境はこれからはDockerだな!というわけでミニマムなメールフォーム開発用コンテナを試し書きしてみたところです。

前置きおわり。

やってみた

ディレクトリ構成

/
├ php/
│ ├ php.ini
│ └ Dockerfile
├ html/
└ docker-compose.yml

想定するディレクトリ構成はこんな感じにしました。登場人物も少ないので割と自由に置いて良いと思います。

docker-compose.yml

docker-compose.yml
version: "2"
services:
  mailhog:
    image: mailhog/mailhog
    ports:
      - 1025:1025
      - 8025:8025
  php:
    image: php:7.4-apache
    build: ./php
    volumes:
      - ./php/php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80

mailcatcher の代わりに MailHog を使います。

mailhog のポートは 1025 がSMTPで、8025 がWebメーラー閲覧用です。 http://localhost:8025 にアクセスすると mailcatcher の様にローカルのWebメーラーが見られます。その辺り詳しくは MailHogのREADME で。

php の Dockerfile

php/Dockerfile
FROM php:7.4-apache

RUN curl -sSL https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 -o mhsendmail \
    && chmod +x mhsendmail \
    && mv mhsendmail /usr/local/bin/mhsendmail

docker-compose.ymlservices.php.build で設定されているビルド用のDockerfileの内容です。

php から mailhog 宛にメールを送信するためにはその間を繋ぐ何かがなければいけません。そこで mailhog から提供されている mhsendmail というツールに sendmail に成り代わってもらい、間をつないでもらいます。上で行っているのは、その mhsendmail の導入です。

php.ini

php/php.ini
[Mail]
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"

docker-compose.ymlservices.php.volumes に記述した php.ini の中身です。上で導入した mhsendmail でメールを投げる設定を追記します。

この他にも php.ini でphpの設定をいじりたいケースも出てくると思うので、このように php.inivolumes で外から編集できるようにしておくのは良いと思います。

ビルドして起動してテスト

$ docker-compose up --build

html/index.php などをこさえて送信テストをしてみましょう。 http://localhost:8080 でアクセスできるはずです。

php/index.php
<?php

var_dump(
  mail(
    'to@example.com',
    'TEST MAIL',
    'This is test mail',
    'From: from@example.com'
  )
);

http://localhost:8025 のWebメーラーで受信が確認できればOKです。

おしまい

これだけの事でDockerを使うのは正直リソースの無駄だと思うので、ミニマムな案件は php -Smailcatcher で十分でしょう。だって軽いんだもの。

もっと大きな開発案件でメール送信をローカルで試験したい時には mailhog の箇所だけ役立つかもしれません。

11
13
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
11
13