MailHogでメール送信のテストをする方法 - MailHogでメール送信のテストをする方法 - aegif Labo Blog Alfresco
null MailHogでメール送信のテストをする方法
こんにちは。今回はSDKで作成した開発環境でMailHogを使ってメール送信のテストをする方法をご紹介します。MailHogはGo言語で書かれたメールテストツールで、Dockerイメージが公開されているのでSDKで生成されるdocker-compose.ymlにサービスを追記するだけで簡単に使うことができます。Alfresco上で特定のイベントが発火したらメールを送信したいというカスタマイズ要件もよくあるので、開発環境でメール送信のテストをしたいというケースはけっこうあるんじゃないかと思います。
準備
まずはこちらの記事を参考にしてSDKで開発環境を作っておいてください。SDKでプロジェクトを作る時に指定するartifactId
はここでは「my-all-in-one」を指定した前提で下記のコードやパスを記載しています。必要に応じて読み替えていただければと思います。
MailHogのコンテナを追加
SDKで作成したプロジェクトの docker/docker-compose.yml の services
の適当な場所に以下のようにMailHogのサービスを追加します。サービス名は何でも構いませんが、後続の手順で指定するmail.host
と一致させるようにしてください。
version: '3.4'
services:
...
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
...
alfresco-global.propertiesでメールサーバとテストメールの設定
Alfresco Platformのコンテナ用の設定として、my-all-in-one-platform-docker/src/main/docker/alfresco-global.properties に以下のプロパティを追記します。
# Outbound SMTP properties
# use these properties to configure the out-bound SMTP server.
mail.host=mailhog
mail.port=1025
# Default email address used for FROM if no other suitable value can found.
mail.from.default=alfresco.demo@example.com
#use these properties to send test message during start of subsystem
mail.testmessage.send=true
mail.testmessage.to=mailhog.test@example.com
mail.testmessage.subject=Outbound SMTP
mail.testmessage.text=The Outbound SMTP email subsystem is working.
前述の通り、mail.host
は上記のdocker-compose.ymlで追記したサービス名と一致させるようにしてください。また、mail.port
はMailHogのSMTPサーバのデフォルトのポート1025を指定します。上記のdocker-compose.ymlでports
で指定した8025はメール確認用のWebサーバのポートなのでここでは使いません。後でAlfrescoから送信されたメールを確認する時に使います。それ以外のプロパティはメール送信のテストのための設定です。コメントやプロパティ名を見れば何の設定なのかは大体想像がつくと思いますが、後で確認します。
ちなみに、これらのプロパティはAlfrescoのソースコードのoutboundSMTP.propertiesという設定ファイルから必要なものだけを抜粋して使っています。他にも標準の設定から上書きしたいプロパティがあればalfresco-global.propertiesにコピペして値を書き換えれば上書きできます。
テストメールの確認
./run.sh build_start
でAlfrescoを起動します。無事にAlfrescoが起動したら、上記のalfresco-global.propertiesで指定した mail.testmessage.send=true
が効いているので起動時にテストメールが送信されているはずです。ブラウザで http://localhost:8025/ を開いて確認してみます。
以下のように、メールが1件送信されていて...
クリックして開いてみると、alfresco-global.propertiesで設定した以下のプロパティ通りにテストメールが送信されていることがわかります。
- 送信者(
mail.from.default=alfresco.demo@example.com
) - 宛先(
mail.testmessage.to=mailhog.test@example.com
) - 件名(
mail.testmessage.subject=Outbound SMTP
) - 本文(
mail.testmessage.text=The Outbound SMTP email subsystem is working.
)
Alfresco起動時に送信されるテストメールだけでなく、例えばワークフロー開始時に「Eメール通知の送信」をチェックするとレビュアとして指定されたユーザにメールが送信されていることが確認できます。
メールデータの永続化
上記の設定では送信されたメールは永続化されていないためMailHogコンテナを再起動すると消えてしまいます。永続化したい場合はメールデータをvolumeに保存するように例えば以下のようにdocker-compose.ymlに書き換えます。MH_STORAGE
やMH_MAILDIR_PATH
はMailHogの環境変数です。詳細はこちらのドキュメントをご確認ください。
version: '3.4'
services:
...
mailhog:
image: mailhog/mailhog:latest
ports:
- "8025:8025"
environment:
MH_STORAGE: maildir
MH_MAILDIR_PATH: /tmp
volumes:
- mailhog-volume:/tmp
...
volumes:
my-all-in-one-acs-volume:
external: true
my-all-in-one-db-volume:
external: true
my-all-in-one-ass-volume:
external: true
mailhog-volume:
以上、Alfrescoの開発環境でMailHogを使ってメール送信のテストをする方法をご紹介しました。