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_STORAGEMH_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を使ってメール送信のテストをする方法をご紹介しました。

関連記事
customize

RANKING
2020.10.12
2020.11.19
2020.12.23
2020.10.05
2020.11.25