docker-mailserverでサクッと検証用のメールサーバーを立ち上げる
docker-mailserverでのメールサーバー構築記事は多く見られますが、紹介されているcompose.ymlとmailserver.envをwgetで取得する方法は404となり使えなかったため、githubに一式上がっているものをcloneして使用しました
本記事での注意事項としては、あくまでもLAN内に検証用メールサーバーを構築した際の記録であり、外部への(からの)転送とかSSLやらDKIM、SPF周りの設定は行っていません
当然セキュリティ周りも甘々なので、このままの設定でインターネット上に公開しないようにしてください
まずは、githubから一式cloneします
git clone https://github.com/docker-mailserver/docker-mailserver.git
取得したディレクトリ内のcompose.ymlとmailserver.envを書き換えていきます
ここではそのまま触るようなコマンドになっていますが、個人的にはcloneしたものを直接触るのではなくworkディレクトリにコピーしてから作業しています
cd docker-mailserver vi compose.yml
# 変更・追加のみ記載(途中省略してます) services: mailserver: hostname: {使用するドメイン名: .localとかにしておくのが無難} restart: unless-stopped # ずっと動いていなくて良いのでalwaysから変更 # (以下追加) environment: TZ: Asia/Tokyo # mailserver.envに書くので不要な気がしつつ一応 logging: # ログ肥大化防止のためざっくり設定 driver: "json-file" options: max-size: "10m" max-file: "3" networks: # IPを固定する mail_local_net: ipv4_address: 172.32.0.2 # このほか必要なコンテナがあれば追加する(個人的にはPythonでテストアプリケーションを書いたのでPythonコンテナを追加) # IP固定のためnetworkを作る networks: mail_local_net: driver: bridge ipam: driver: default config: - subnet: 172.32.0.0/24
vi mailserver.env
# 変更のみ記載 LOG_LEVEL=debug TZ=Asia/Tokyo ENABLE_POLICYD_SPF=0
上記のようにIPを固定するのは、メーラー等を使ったテストをするのに検証用PCのhostsにレコードを書いてアクセスしたいためです
ということで、ここで忘れないように検証用のPCのhostsを設定します
コンテナを起動し、テストで使うメールアドレスを設定します
当然ですが、compose.ymlのhostnameに設定したドメインのメールアドレスとします
docker-compose up -d ./setup.sh email add {メールアドレス} {パスワード} ./setup.sh alias add postmaster@{hostname} {前の行で作ったアドレス}
ここで躓きます
テスト送信するも、Recipient address rejected: User unknown in local recipient table.とエラーになりました
調べていくとgithubのissueが出てきます
Recipient address rejected: User unknown in local recipient table #1633
どうやらpostfixの設定を変えないとダメな模様です
この最後のコメントを試してみるため、mailserverコンテナに入り設定を変更してからメールサーバーを再起動します
docker compose exec mailserver bash # ここからコンテナ内 cd /etc/postfix sed -i 's/mydestination = $myhostname, localhost.$mydomain, localhost/mydestination = localhost.$mydomain, localhost/' main.cf exit # ここまでコンテナ内 docker compose restart mailserver
ちなみに、$myhostnameに正しいドメイン名が渡れば大丈夫ではないかと思い、コメントアウトされていたmyhostnameのところにドメイン名をセットしましたがダメでした
上記の方法で正しくメール送信できるようになりました