Mailman

メーリングリストマネージャとして、Mailmanをインストールします。また、他のサーバーから既存のMLを移設する際の手順についても記載します。
なお、lists.example.netというドメインをメーリングリスト専用に割り当てます。このほうがリスト宛なのか個人宛てなのかがアドレスからも 分かりやすく、また、設定も楽になります。

インストール

  1. インストールします。
    # apt install mailman
    サポートする言語では、日本語を選んでも作られないのでとりあえず無視します。
  2. サポートする言語に改めてja (Japanese)を追加するため、reconfigureします。
    # dpkg-reconfigure mailman
  3. /usr/share/doc/mailman/README.Debianと /etc/mailman/postfix-to-mailman.pyの記述に従い、/etc/postfix/main.cfに、 lists.example.net宛のメールは全てMailmanに回すよう設定します。
    # Mailman
    relay_domains = lists.example.net, lists.example.jp
    relay_recipient_maps = hash:/var/lib/mailman/data/virtual-mailman
    transport_maps = texthash:/etc/postfix/transport
    mailman_destination_recipient_limit = 1
  4. /etc/postfix/transportに、relay_domainsで定義したものはmailmanへ転送するよう記載します。
    lists.example.net    mailman:
    lists.example.jp     mailman:
  5. Mailmanの設定ファイルである/etc/mailman/mm_cfg.pyを修正します。
    #-------------------------------------------------------------
    # If you change these, you have to configure your http server
    # accordingly (Alias and ScriptAlias directives in most httpds)
    DEFAULT_URL_PATTERN = 'https://%s/cgi-bin/mailman/'
    IMAGE_LOGOS         = '/images/mailman/'
    
    #-------------------------------------------------------------
    # Default domain for email addresses of newly created MLs
    DEFAULT_EMAIL_HOST = 'lists.example.net'
    #-------------------------------------------------------------
    # Default host for web interface of newly created MLs
    DEFAULT_URL_HOST   = 'example.net'
    #-------------------------------------------------------------
    # Required when setting any of its arguments.
    add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
    add_virtualhost('example.jp', 'lists.example.jp')
    ...
    (中略)
    ...
    #-------------------------------------------------------------
    # Uncomment if you use Postfix virtual domains (but not
    # postfix-to-mailman.py), but be sure to see
    # /usr/share/doc/mailman/README.Debian first.
    MTA='Postfix'
    POSTFIX_STYLE_VIRTUAL_DOMAINS = ['lists.example.net', 'lists.example.jp']
    # alias for postmaster, abuse and mailer-daemon
    DEB_LISTMASTER = 'postmaster@example.net'
  6. 設定がひと通りできたので、インストール時の指示にあった通り管理用のmailmanというMLを最初に作成します。(無いとMailmanが起動しません。)
    # newlist mailman
    リスト管理者のアドレスと、最初のパスワードを聞かれるので入力します。
    最後に「Enterを押してmailmanの管理者にメール通知する」というメッセージが出ますが、Mailmanをまだ起動していないのですぐには来ません。
  7. genaliasesを実行してから、生成されたdbの所有権を変更します。
    # /usr/lib/mailman/bin/genaliases
    # chmod 660 /usr/lib/mailman/data/aliases.db
    # chmod 660 /usr/lib/mailman/data/virtual-mailman.db
  8. Postfixに設定反映してMailmanを起動します。
    # service postfix restart
    # service mailman start
    起動すると、新しいmailmanというMLが作成された旨のメールが届きます。
  9. サイトパスワードを作成します。Mailmanの全権を持つパスワードと、リスト作成のためのパスワードになります。
    web UIからMLの管理をする際、このパスワードを使います。
    # mmsitepass
    新しい サイト のパスワード:
    パスワード確認:
    パスワードを変更しました.
    
    # mmsitepass -c
    新しい リスト作成者 のパスワード:
    パスワード確認:
    パスワードを変更しました.
    

Webインターフェースの設定

  1. MailmanのWebインターフェースは、すでにひな形が用意されているのでApacheの設定に一行追加するだけになります。
    <VirtualHost *:443>
            ...(中略)...
    
            # Mailman
            Include /etc/mailman/apache.conf
    </VirtualHost>
    上記の行を対象とするサイトに追加して、Apacheをreloadすればwebインターフェースにアクセスできるようになります。
    最初に作成したmailmanというMLの管理ページにアクセスして、会員リストに自分自身を追加してください。また、プライバシー・オプションを必要に応じ て変更してください(advertisedをいいえにして、入会を承認制にする)。

他のサーバーからの移転

他のサーバーで稼働していたMLを新しいサーバーに移転する場合、「mailman 引越し」などのキーワードで検索するといくつか方法が出てきます。

設定も含めて丸ごと持ってくるのは確かに楽で早いのですが、新しいサーバーで正常に稼働しているかどうかの事前テストや、古い(間違えた)設定が残っていないかの確認ができません。
私の場合はMLの数も流量も少ないので、新サーバーにてMLを再作成し、これにログデータだけ移設することで対応しました。

  1. 新サーバーにて、旧サーバーと同名のMLを新規作成します。以下の項目を中心に、あとはML特有のものがあれば…という程度でしょうか。
  2. 会員を移行します。その際、旧サーバーで以下のコマンドを利用すれば、登録者の一覧がテキストで出力されるのでまとめて登録に使えます。
    # list_members (ML名)
  3. 旧サーバーからメールのアーカイブを転送します。/var/lib/mailman/archives/privateの中身をまとめて固めて転送するのが早いです。容量が多すぎる場合は、mboxだけあれば書庫は再作成できます。なお、mboxファイルは以下のような所有権になっています。
    -rw-rw-r-- 1 list list ... *.mbox
  4. 次に投稿されるメールのカウンタを設定します。
    まず、旧サーバーで現在のカウント数(正確には、次に投稿されるメールの番号)を確認します。
    # withlist (ML名)
    (ML名)のリストを読み込中 (ロック解除)
    変数 `m' が mailman の MailList インスタンスです
    >>> m.post_id
    8.0
    >>> quit()
    最終処理中
    次に、ここで判明したカウンタを新サーバーに反映します。
    # withlist (ML名)
    (ML名)のリストを読み込中 (ロック解除)
    変数 `m' が mailman の (ML名) インスタンスです
    >>> m.Lock()
    >>> m.post_id
    1.0
    >>> m.post_id = 8
    >>> m.Save()
    >>> quit()
    リストをロック解除 (保存はしてません):(ML名)
    最終処理中
  5. 書庫を再作成する場合は、archを使います。
    # /var/lib/mailman/bin/arch --wipe $ListName
  6. あとは、DNSの設定を変更し、新しいサーバーにメールが届くようにします。

目次へ戻る