5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラクスAdvent Calendar 2022

Day 22

Dockerコンテナ内で、Postfixを使ってメール送受信を行う

Last updated at Posted at 2022-12-21

はじめに

ラクスでMailDealerというメール共有管理サービスの開発をしている@hirobexです
今回は、Dockerコンテナ内でメール送受信できるようにしたいと思います

Dockerfile

Dockerfile
FROM almalinux:minimal

RUN microdnf update && microdnf install postfix cyrus-sasl cyrus-sasl-plain

COPY ./entrypoint.sh /
COPY ./main.cf /etc/postfix

ENTRYPOINT [ "/entrypoint.sh" ]

今回はベースイメージにAlma Linuxを選定

Postfixと、SASL認証用のライブラリをインストールします
なお、今回は時間がなかったのでSASL認証の設定は行いません

slim系イメージの場合、dnfコマンドは存在しません
代わりにmicrodnfコマンドを利用します

その後、起動用のentrypoint.shとPostfixの設定ファイルmain.cfをCOPYします

entrypoint.sh

entrypoint.sh
newaliases

postfix start-fg

start-fgコマンドを利用することで、Postfixがフォアグラウンドで動き続け、コンテナが自動で終了しなくなります

start-fgはPostfixのバージョンが3.3以上ではないと使えません

main.cf

main.cf
inet_interfaces = all

inet_protocols = ipv4

# minimalではsyslogが動いていないため、明示的に指定する必要がある
maillog_file = /var/log/maillog

main.cfは各自のネットワーク設定に合わせて
今回は最低限だけ記載しておきます

inet_interfaces = all ですべてのメールを受信できるように設定
inet_protocols = ipv4 この設定じゃないとipv6が使えないとエラーがでたためです
maillog_file = /var/log/maillog コメントアウトに記載のとおりです

docker-compose

これをdocker-composeで動かします

docker-compose.yml
version: '3.8'

services:
  postfix1:
    build:
      context: .
      dockerfile: ./Dockerfile
    container_name: postfix1
    hostname: postfix1
    volumes:
      - ./postfix1/log:/var/log

任意のホスト名を利用して送受信できるように、hostnamecontainer_nameを指定しています
mailogが確認しやすいようvolumesにマウントしています
受信したメールを確認したいなら、受信フォルダもマウントしてもいいかもしれません

送受信

host
docker-compose build
docker-compose up

docker-compose exec -it postfix1

ホスト側でコンテナ内に入り、以下のコマンドを実行します

container
sendmail root@postfix1
from: root@postfix1
to: root@postfix1
subject: test

Hello World

.

/root/Maildir/newにメールが受信できていればOKです
受信できていない場合は、maillogを確認してみましょう

まとめ

今回は、DockerでPostfixを利用しました

コンテナを2つ立てたらコンテナ間での送受信も可能です
ただし、SASL認証や、main.cfでの受信許可設定が必要です

来年は、外部に向けて送受信できるようにしたいですね

では。

参考資料

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?