Mailman3インストールメモ

mailman

メーリングリストサーバーの一つに「mailman」があります。多く使われているのは、このバージョン2の系列である「mailman2」ですが、こちらの開発は終了しており、順次「mailman3」への移行が推奨されています。

ただ、「mailman3」は、「mailman2」と比較すると、コンセプト自体が異なる作りということもあり、2025年8月時点でも、まだ「出たばかり」のメーリングリストサーバーという感じが拭えなく、日本語の情報はほとんどありません。

さらに、現時点でのUbuntu20.04.02LTSにおいては、ライブラリの不整合などの原因でパッケージでインストールすることはできず、なかなか普及が進みません。

一方で、Debian12.11.0(2025年8月25日時点でDebian 13.0.0がリリースされている)では、aptを用いてインストールが可能になっており、インストール後は、少々の調整が必要なものの、比較的簡単にインストールして利用できる環境が整っています。

そこで、Debian12.11.0の環境で、様々なWebの情報を検索しながら、Mailman3のインストールを行った手順などをこちらにまとめておこうと思います。

環境のインストール

利用するOSは、Debian12.11.0を想定しています。

これに、mailman3を動かすための各種ツール・ライブラリとして、Apache2とPostfixをインストールします。

ApacheとPostixのインストール

# apt install apache2 postfix

Postfixの個々の設定については、ここでは触れませんので、利用しようとするドメインなどでメールの送受信ができるようなところまで設定を行っておいてください。

Apache2については、この後触れていきますので、この時点で何か設定をしておく必要はありません。

Postfixの設定

Postfixには、Mailman用の追加の設定が必要になります。

mail.cfに以下の設定を追加しておきます。

/etc/posfix/main.cf

owner_request_special = no
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}} hash:/var/lib/mailman3/data/postfix_domains

Mailman3のインストール

まずは、Mailman3本体のインストールを行います。

mailman3本体のインストール

# apt install mailman3-full

インストール中にmailman3とmailman3-webのデータベースを自動作成するかどうか聞いてくるので<Yes>と答え、データベースの種類はsqlite3を選択します。DBとしては、MariaDBやMySQLでも使えるはずですが、面倒そうなので、おとなしくsqlite3で設定することにします。

インストールが完了するとmailman3とmailman3-webのサービスが起動しているはずですので、確認してみましょう。

サービス状態の確認

# systemctl status mailman3

# systemctl status mailman3-web

次にサイトオーナーの設定を行います。

mailman.cfgの「site_owner」をサイトオーナーのメールアドレスに変更します。

/etc/mailman3/mailman.cfg

site_owner: MYADDRESS@MYDOMAIN.COM

「MYADDRESS@MYDOMAIN.COM」は、サイトオーナーのメールアドレスに変更して保存してください。

次にApache2のproxy_uwsgiを有効にします。

proxy_uwsgiの有効化

# a2enmod proxy_uwsgi

次にApache2の設定を行います。

Apache2用の設定は、mailmanのパッケージで用意されていますので、それをそのまま使います。

最初にApache2でmailman3の設定を見れるようにシンボリックリンクを張ります。

mailman3の設定をapache2の設定ディレクトリにシンボリックリンクする

# ln -s /etc/mailman3/apache.conf /etc/apache2/conf-enabled/mailman3-web.conf

パッケージに含まれている設定は、バグがあるため修正します。

/etc/mailman3/apache.conf に3つの「ProxyPass」がありますが、3行目の「ProxyPass」を以下の通り修正します。

/etc/mailman3/apache.conf

ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost

よくわからないかもしれませんが、違いは、最後の「/」(スラッシュ)が不要なので、削除するだけです。

次に、mailman-web.pyの設定を利用環境に合わせて、設定を変更します。

/etc/mailman3/mailman-web.py

EMAILNAME = ‘FQDN.COM’

ACCOUNT_DEFAULT_HTTP_PROTOCOL = “http”

「EMAILNAME」の「FQDN.COM」は、実際に利用するドメインのドメイン名に変更します。複数ある場合は、メインで使用するものにしておけばよいでしょう。

「ACCOUNT_DEFAULT_HTTP_PROTOCOL」のデフォルトの設定は、「https」になっていますが、今回の設定では、「http」で使うため、「http」に変更しておきます。

apache2の設定を調整して、「https」で使用する場合には、そのように設定すれば問題ありません。

これでメーリングリストの機能は動き出しますが、アーカイブ機能がまだ動いていませんので、次にアーカイブ機能を有効化していきます。

Archiverを有効にする

mailman3では、アーカイブを利用するために、「Hyper Kitty」を使用します。

デフォルトでは、有効になっていないようですので、有効化していきます。

まず、mailman.cfgに設定を追加します。

/etc/mailman3/mailman.cfg

[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman3/mailman-hyperkitty.cfg

ファイルの最後のほうにでも追加しておけばよいです。

次に、mailmanのWebとHyperKittyを連携させるためのAPIKeyの設定を行います。

APIKeyは、「/etc/mailman3/mailman-web.py」の「MAILMAN_ARCHIVER_KEY」に設定されていますので、この値を「/etc/mailman3/mailman-hyperkitty.cfg」の「api_key」に設定します。

/etc/mailman3/mailman-hyperkitty.cfg

api_key: SecretArchiverAPIKey

上記の例の「SecretArchiverAPIKey」は、mailman-web.pyの「MAILMAN_ARCHIVER_KEY」で設定されている値をコピーします。なお、「MAILMAN_ARCHIVER_KEY」では、値は「’SecretArchiverAPIKey’」のようにシングルコーテーションで囲われていますが、mailman-hyperkitty.cfgに設定するときは、不要ですので、シングルコーテーションの中身だけ設定します。

さて、これでほぼ動くのですが、なぜかエラーが出て動かない部分がいくつかあります。

これは、Pythonのパラメーターがいくつか矛盾しているかららしいので、これらを修正します。

エラー・不具合対応

一つ目の不具合調整は、Djangoのパラメーター調整です。

mailman3が使用するソフトウエアの中にDjangoというものがありますが、これが、バージョン3.0から3.2に変わる際、3.0では、暗黙の内に主キー(Primary Key)が決まっていたものが、この辺の柔軟性が上がったことが発端で、設定が必要になったようです。

そこで、settings.pyに以下の設定を追加していきます。

/usr/share/mailman3-web/settings.py

DEFAULT_AUTO_FIELD=’django.db.models.AutoField’

二つ目の不具合調整は、使用しているタイマーのタイムアウトとリトライ間隔の設定値に矛盾によるもので、setting_local.pyの「Q_CLUSTER」値を以下のように調整します。

/usr/share/mailman3-web/settings_local.py

Q_CLUSTER = {
‘timeout’: 300,
‘retry’: 360,
‘save_limit’: 100,
‘orm’: ‘default’,
}

値を調整するのは、timeoutとretryです。

管理ユーザーの追加

最後に、管理ユーザーの登録を行います。

ここで登録する管理ユーザーは、mailman3における、いわゆる「スーパーユーザー」のようなものになります。

以下のコマンドを実行して管理ユーザーを登録します。

管理ユーザーの登録実行

# cd /usr/share/mailman3-web
# python manage.py createsuperuser

コマンドを実行すると管理ユーザーの登録のために質問がいくつかされますので、アカウント名、メールアドレス、パスワードを入力します。

プロセス再起動と動作確認

これですべての設定作業が完了です。

一度、すべてのプロセスを再起動しておきます。

プロセス再起動

# systemctl restart apache2
# systemctl restart mailman3
# systemctl restart mailman3-web

プロセスの再起動が終わったのち、ブラウザで「http://<fqdn.com>/maliman3/」のような感じでmailman3のWebにアクセスしてみましょう。

表示されたら、右肩の「サインイン」から、先ほど登録した管理ユーザーのアカウントでログインしてみましょう。

インストールはこれで完了です。

実際のmailman3でのドメインの登録やリストの作成、その他細かい設定に関する情報は、多少は日本語でも情報があるようですので、検索してトライしてみてください。

時間が作れれば、この辺も将来的に触れてみたいと思います。

参考情報

Debian Mailman 2から3へのアップグレード インストール編

Mailman2 から Mailman3 への移行の備忘録

【django】警告文で「Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.」の対応策

[MM3-users] Re: E-mail every minute:

ENOG75 夏の自由研究 Mailman3