開発環境でのメール確認用にMailHogを利用する（Docker利用）

開発環境でメールの確認方法が面倒だったり、配信先に気を使う場合がありますが、MailHogというツールを使うとローカル内に閉じたメールの確認ができる環境を簡単に立ち上げることができます。

MailHogはGo言語でできているらしいです。

以前はMailCatcherという別の類似ツールを利用していましたが、MailHogの方が構築が容易だったので乗り換えました。

docker-composeで以下の構成で立ち上げます。

###### ファイル構成
```bash
.
├── docker-compose.yml
└── php
    ├── docker
    │   ├── Dockerfile
    │   └── php.ini
    └── mail_test.php
```

###### docker-compose.yml
8025番ポートでwebインターフェースを利用するのでポートを設定します

```yaml
version: '3'
services:
 php:
  build:
   context: ./
   dockerfile: php/docker/Dockerfile
  volumes:
   - ./php/:/var/www/html/
 mailhog:
  image: mailhog/mailhog
  ports:
   - "8025:8025" #webインターフェース用ポート
```
###### Dockerfile
phpからのメール送信に`mhsendmail`が必要なので、Dockerfileでインストールします。

```dockerfile

FROM php:5.6-apache
WORKDIR /var/www/html
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
COPY ./php/docker/php.ini /usr/local/etc/php/
```

###### php.ini
`[mail function]`を書き換えておきます。

```ini
[mail function]
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
; sendmail_path = /usr/sbin/sendmail -t -i
; 以下に書き換え
sendmail_path = "/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025"
```
###### mail_test.php

```php
<?php

$to      = "hoge@localhost.local";
$subject = "TEST";
$message = "メールテスト";
$headers = "From: from@example.com";

mb_send_mail($to, $subject, $message, $headers);
```

###### docker-compose で up
```bash
$ docker-compose up -d
Building php
Step 1/4 : FROM php:5.6-apache
 ---> 24c791995c1e
Step 2/4 : WORKDIR /var/www/html
 ---> Using cache
 ---> 1294d05c5c03
Step 3/4 : 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
 ---> Using cache
 ---> db0719944c4e
Step 4/4 : COPY ./php/docker/php.ini /usr/local/etc/php/
 ---> 264eb166413a
Successfully built 264eb166413a
Successfully tagged mailhog_php:latest
WARNING: Image for service php was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Pulling mailhog (mailhog/mailhog:)...
latest: Pulling from mailhog/mailhog
df20fa9351a1: Already exists
ed8968b2872e: Pull complete
a92cc7c5fd73: Pull complete
f17c8f1adafb: Pull complete
03954754c53a: Pull complete
60493946972a: Pull complete
368ee3bc1dbb: Pull complete
Digest: sha256:8d76a3d4ffa32a3661311944007a415332c4bb855657f4f6c57996405c009bea
Status: Downloaded newer image for mailhog/mailhog:latest
Creating mailhog_php_1     ... done
Creating mailhog_mailhog_1 ... done
```
###### mailhogのWEBインターフェース
localhost:8025で表示  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274034/364168ec-22cd-2075-8309-f13f6f06e785.png)
###### phpのコンテナ内からメール送信スクリプトを実行
```bash
$ docker exec -it mailhog_php_1 /bin/bash
root@9c4b6a5df613:/var/www/html# php mail_test.php
```
windows上にメールの到着を通知が表示され  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274034/def90298-f669-6253-d423-870af521ed90.png)
メールが到着していることが確認できます  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274034/463c15ea-1f67-7c15-fd01-9cc2b49d5252.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274034/eebeeb9d-dd3d-da2d-d19d-aa6e4f134fd8.png)