Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
メール送信のテスト環境につかえる「MailHog」を試してみました。エンジニアの人は知っているのでしょうね。 MailHogなら前回構築したbookstackでもサクッと追加できます。
あくまでもテスト環境
メールを送信するSMTPやSendmailってちょっと大変ですよね。Gmailを利用するにもアプリ用パスワードを発行する必要がありますし、何かと設定と連携が面倒な気がする。
前提として、ここでは実際のメール送信ではなく、あくまでもテスト環境でローカルのブラウザでしか確認できません。そしてDocker利用になります。
実際にメール送信するには、メールサーバを組み込まないとなりません。今ならmsmtpでしょうか。別の機会にご紹介できればと考えています。
これならアドレスを間違えて送信してしまうリスクがないため、開発者のテスト環境なのも頷けます。昨今の情報漏洩とかイヤですからね。
bookstackに組み込んでみる
bookstackはメールで通知する機能があります。グループで利用するのに便利です。ここではMailHogを前回記事に追加していきます。
前回記事
ymlに追記
bookstackがDocker利用で動作しているものとして、docker-compose.ymlに追記していきます。
使用したDockerイメージは「jcalonso/mailhog」です。MailHogの書き換え版です。 どうも公式のMailHogは、arm64にだけ対応していません。調べたらいくつか出てきて、その中の1つを使いました。
追加したのは、bookstackアプリの環境に3行。 bookstackはSMTPとSendmailに対応していて、MailHogはsmtpになります。ポートはデフォルトで1025らしく、そのまま指定しました。
- MAIL_DRIVER=smtp
- MAIL_HOST=mailhog
- MAIL_PORT=1025
新たにmailをサービス内に追加。
mail:
image: jcalonso/mailhog
container_name: mailhog
ports:
- "8025:8025"
environment:
MH_STORAGE: maildir
MH_MAILDIR_PATH: /tmp
volumes:
- ./maildir:/tmp
内容を保持しながらバインドマウントするのに、新たにVolumesを記載しないとならないみたいで、最上段か最下段かに追記します。
volumes:
maildir: {}
ちなみに./から始まっている場所は、プロジェクトとして展開したdocker-compose.ymlの存在するディレクトリです。
改めて全部表示するとこうなります。
bookstackのdocker-compose.ymlはこちら
version: "2"
services:
#bookstackアプリ
bookstack:
image: lscr.io/linuxserver/bookstack
container_name: bookstack
environment:
- PUID=1000
- PGID=1000
- APP_URL=http://bookstackapp.local:6875
- DB_HOST=bookstack_db
- DB_USER=bookstack
- DB_PASS=bookstack_pass
- DB_DATABASE=bookstackapp
- MAIL_DRIVER=smtp
- MAIL_HOST=mailhog
- MAIL_PORT=1025
volumes:
- ./bookstack_app_data:/config
ports:
- 6875:80
restart: unless-stopped
depends_on:
- bookstack_db
#データベースMariadb
bookstack_db:
image: lscr.io/linuxserver/mariadb
container_name: bookstack_db
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=root_pass
- TZ=Asia/Tokyo
- MYSQL_DATABASE=bookstackapp
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=bookstack_pass
volumes:
- ./bookstack_db_data:/config
restart: unless-stopped
#メール送信MailHog
mail:
image: jcalonso/mailhog
container_name: mailhog
ports:
- "8025:8025"
environment:
MH_STORAGE: maildir
MH_MAILDIR_PATH: /tmp
volumes:
- ./maildir:/tmp
volumes:
maildir: {}
はてな?後から追加したので、一旦downさせ、buildコマンド後に再度upしました。
docker compose down
docker compose build
docker compose up -d
■Pi 5は8GBモデルがオススメ
確認してみる

bookstack側の設定にテスト送信できるボタンがあります。(設定->メンテナンス)
メール送信できる機能をインストールしていないとエラーになりますが、今回の追加後に指定したポートである8025でメールの結果が表示されていれば成功です。

何も設定していない場合
ブラウザでIPアドレス:8025を表示してみると、受信箱にちゃんと入っていますね。

他でも使えそう
今回はbookstackがMailHogに対応していましたから、とても簡単に追加できました。あくまでもローカルで送受信しているに過ぎないため、メールアドレスは実在していないドメインでも問題ありません。
非エンジニアでも、メール送信させるコードを触るなら、一旦はテストで使いたいなと思いました。1人で扱う程度ならこれでいいかなとも思います。
もしもMailHogを個別に扱うなら、ポート番号やアプリの環境(.env)を変更しないとならないと思われます。bookstackアプリ側の対応を読むと、SMTPやSendmailの設定方法が載っています。
送信メールのMIMEを読むと、Unknown type (2 bytes)とはなっていましたが、日本語も問題無いですね。
そういえば、bookstackは日本語の表示には対応しているけど、PDFは出力で文字化けします。これは対応していません。
次回は本当に送受信できるメールサーバの組み込みにトライしてみようと思います。





