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 では使えません。