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のところにドメイン名をセットしましたがダメでした
上記の方法で正しくメール送信できるようになりました

docker-mailserverでサクッと検証用のメールサーバーを立ち上げるにコメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です