2026年5月26日

2026年5月26日

Postfix でメーリングリストを作る方法|aliases の配信リストと Mailman 3 の連携

Postfix でメーリングリストを作る方法は、大きく2つあります。

方法 向いている用途 できること
/etc/aliases の :include: 社内の少人数への一斉転送 1つのアドレス宛てのメールを、ファイルに書いた全員へ転送する
Mailman 3 と連携 会員制のメーリングリスト 登録・退会、メンバー以外の投稿の保留、管理者への通知、アーカイブ

この記事の手順は、Debian 13 の Postfix 3.10 と mailman3 3.3.10 のパッケージで、配信まで確かめたものです(2026年11月時点)。Ubuntu 24.04 にも同じ名前のパッケージ(mailman3 3.3.8)があります。

なお、以前の Mailman 2(newlist・add_members コマンド、mm_cfg.py)は Python 2 用で、Debian・Ubuntu の現行版には含まれていません。新しく作る場合は Mailman 3 を使います。

前提

  • Postfix が動いていて、外部とメールを送受信できること
  • メーリングリストに使うドメイン(例: lists.example.com)の MX レコードが、このサーバーを向いていること
  • 作業は root 権限で行います

Postfix の基本設定がまだの場合は、先に済ませてください。

方法 1: /etc/aliases で一斉転送のリストを作る

リストのメンバーを書く

メンバーのアドレスを1行に1つずつ書いたファイルを作ります。

# /etc/postfix/lists/staff
alice@example.com
bob@example.net

エイリアスを登録する

/etc/aliases に次の2行を足します。owner-staff は、配信エラーの通知を受け取る宛先です。

# /etc/aliases に追記
staff: :include:/etc/postfix/lists/staff
owner-staff: root
newaliases

これで staff@(このサーバーのドメイン) 宛てのメールが、ファイルに書いた全員に転送されます。メンバーのファイルは配信のたびに読まれるので、メンバーの追加・削除はファイルを書き換えるだけで反映されます(newaliases が必要なのは /etc/aliases を変えたときです)。

確かめる

printf 'Subject: staff test\n\ntest\n' | sendmail staff@example.com
grep 'orig_to=<staff@' /var/log/mail.log | tail

ログに、メンバーごとに orig_to=<staff@…> と status=sent が出れば転送できています。

この方法では、誰でも(外部からでも)このアドレスに送ればメンバー全員に届きます。登録・退会の受付や、メンバー以外からの投稿を止める仕組みはありません。必要な場合は方法 2 を使います。

方法 2: Mailman 3 と連携する

Mailman 3 は、受け取ったメールを Postfix から LMTP(既定でポート 8024)で受け取り、メンバーへの配信を Postfix に渡します。

手順 1: インストールする

apt update
apt install mailman3

Web の管理画面(Postorius)とアーカイブ(HyperKitty)も使う場合は、mailman3-full パッケージを入れます。Web 画面は別に Web サーバーとデータベースの設定が必要なので、この記事ではコマンドでの操作を説明します。

手順 2: Mailman の設定を確かめる

設定ファイルは /etc/mailman3/mailman.cfg です。Debian のパッケージでは、Postfix と連携する [mta] の設定がはじめから入っています。

[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
smtp_host: localhost
smtp_port: 25
lmtp_host: 127.0.0.1
lmtp_port: 8024
configuration: python:mailman.config.postfix

[mailman] セクションの site_owner は changeme@example.com のままになっているので、管理者のアドレスに変えます。

[mailman]
site_owner: postmaster@example.com

変えたら Mailman を再起動します。

systemctl restart mailman3
systemctl status mailman3

手順 3: Postfix の設定を変える

Mailman はリストを作るたびに、/var/lib/mailman3/data/ に Postfix 用の表(postfix_lmtp と postfix_domains、それぞれの .db)を書き出します。Postfix にこの表を読ませ、リストのアドレス宛てのメールを Mailman に渡すようにします。

# リスト用のドメインを、このサーバーで受け取るドメインに加える(既存の値に足す)
postconf mydestination
postconf -e 'mydestination = $myhostname, localhost, lists.example.com'

# + 区切りのアドレスを使う(Mailman の配信エラー処理に使われる)
postconf -e 'recipient_delimiter = +'

# リストのアドレス宛てを Mailman(LMTP)に渡す
postconf -e 'transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp'

# 受け取ってよい宛先に、リストのアドレスを加える(既定値に足す形)
postconf -e 'local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/var/lib/mailman3/data/postfix_lmtp'

mydestination の例は、既存の値に lists.example.com を足したものです。postconf mydestination で今の値を確かめ、消さないように足してください。transport_maps や local_recipient_maps をすでに使っている場合も、既存の値の後ろに足します(Mailman の公式ドキュメントも、既存の設定に追加するよう案内しています)。

表のファイルは手順 4 でリストを作ったときに作られるので、Postfix の再読み込みはリストを作った後に行います。

手順 4: リストを作り、メンバーを加える

Debian では、mailman コマンドを list ユーザーとして実行します。

# リストを作る(-o で管理者を指定)
sudo -u list mailman create -o owner@example.com team@lists.example.com

# Postfix 用の表ができたことを確かめる
postmap -q team@lists.example.com hash:/var/lib/mailman3/data/postfix_lmtp

# Postfix に設定を読み直させる
postfix check && postfix reload

postmap -q が lmtp:[127.0.0.1]:8024 を返せば、表は正しく作られています。リストを作ると、team-owner@、team-request@、team-join@、team-leave@ などの管理用アドレスも同時に登録されます。

メンバーは、1行に1アドレスのファイル(- で標準入力)から加えます。

printf 'alice@example.com\nbob@example.net\n' | sudo -u list mailman addmembers - team@lists.example.com

# メンバーの一覧
sudo -u list mailman members team@lists.example.com

# リストの一覧
sudo -u list mailman lists

手順 5: 投稿して確かめる

メンバーのアドレスから、リストのアドレス宛てにメールを送ります。ログで Mailman への受け渡しと、メンバーへの配信を確かめます。

grep 'to=<team@lists.example.com>' /var/log/mail.log | tail -n 3
tail -n 20 /var/log/mailman3/mailman.log

Postfix のログに relay=127.0.0.1[127.0.0.1]:8024 と status=sent が出て、Mailman のログに post to team@lists.example.com from … が出れば、メンバーに配信されています。

既定の設定では、次のような投稿は配信されずに保留され、管理者(-o で指定したアドレス)に通知が届きます。

Mailman のログ(HOLD: の後) 理由
The message is not from a list member メンバー以外のアドレスからの投稿
Message has implicit destination To・Cc にリストのアドレスが無い(BCC で送った、など)

保留されたメールの承認や却下、リストの細かい設定は、Web 画面(mailman3-full の Postorius)か Mailman の REST API で行います。

うまくいかないとき

症状 確かめること
リスト宛てが User unknown で拒否される local_recipient_maps に postfix_lmtp を足したか、リスト作成後に postfix reload したか、mydestination にリストのドメインがあるか
Postfix のログに connect to 127.0.0.1[127.0.0.1]:8024: Connection refused Mailman が動いているか(systemctl status mailman3)
リストに投稿しても誰にも届かない Mailman のログに HOLD: が出ていないか
postmap -q が何も返さない リスト名とドメインの綴り、/var/lib/mailman3/data/postfix_lmtp にそのアドレスがあるか

まとめ

  • 少人数への一斉転送だけなら、/etc/aliases の :include: で足ります。メンバーのファイルを書き換えるだけで反映されます。
  • 登録・退会や投稿の制限が必要なら Mailman 3 を使い、transport_maps と local_recipient_maps に /var/lib/mailman3/data/postfix_lmtp を加えて連携します。
  • Mailman 2 の newlist などのコマンドは、現行の Debian・Ubuntu では使えません。

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲