プロジェクト

全般

プロフィール

Mailman

前提条件

  • MTAと同居を想定
  • Postfixでのメール送受信が可能なこと。
  • RPM版での導入とする

インストール

  • 次のコマンドでmailmanと必要パッケージをインストールする
    # yum install mailman httpd mailx
    
    • mailxはコンソールでメール送信するための動作確認用なので、必要が無ければ不要。

初期設定

WebUI管理者パスワードの設定

  • 以下のコマンドでパスワードを設定する
    # /usr/lib/mailman/bin/mmsitepass
    

mailman設定ファイルの編集

  • 以下のデフォルトの設定ファイルを参考に変更点をピックアップする
    /usr/lib/mailman/Mailman/Defaults.py
    
  • 上記をもとに設定ファイル末尾に設定を追記する。
    例として変更しそうな個所を記載。日本語コメントはエラーになるので実際には書かない。
    # vi /etc/mailman/mm_cfg.py
    --------------------
    # MTAの種類
    MTA = 'Postfix'
    
    # メールサーバアドレス
    DEFAULT_EMAIL_HOST = 'mailman.example.com'
    
    # WebUIのURL
    DEFAULT_URL_HOST = 'mailman.example.com'
    DEFAULT_URL_PATTERN = 'http://%s/mailman/'
    
    # WebUIのアーカイブのURL
    PUBLIC_ARCHIVE_URL = 'http://%(hostname)s/pipermail/%(listname)s'
    
    # メーリングリストに投稿されたメールを投稿保管庫に保管する
    DEFAULT_ARCHIVE = On
    
    # 投稿保管庫を公開する
    # 0=全体に公開, 1=メンバーのみに公開
    DEFAULT_ARCHIVE_PRIVATE = 0
    
    # 投稿保管庫の形式
    #-1 - 保管しない
    # 0 - mboxには保管しない, mailmanのhtml版投稿保管庫ページのみに保管
    # 1 - mailmanのhtml版投稿保管庫ページは利用しない, mboxのみに保管
    # 2 - mboxおよび mailmanのhtml版投稿保管庫ページ両方に保管
    ARCHIVE_TO_MBOX = 2
    
    # 投稿保管庫の記録頻度
    # 0 - 年次
    # 1 - 月次
    # 2 - 四半期
    # 3 - 週次
    # 4 - 日次
    DEFAULT_ARCHIVE_VOLUME_FREQUENCY = 1
    
    # 使用する言語
    DEFAULT_SERVER_LANGUAGE = 'ja'
    
    # オーナーがリストの削除をできる
    OWNERS_CAN_DELETE_THEIR_OWN_LISTS = Yes
    
    # パスワードの長さ
    MEMBER_PASSWORD_LENGTH = 8
    ADMIN_PASSWORD_LENGTH = 10
    
    # リスト一覧を表示する
    DEFAULT_LIST_ADVERTISED = Yes
    
    # リストの最大登録者数
    DEFAULT_MAX_NUM_RECIPIENTS = 10
    
    # メッセージの最大サイズ(KB)
    DEFAULT_MAX_MESSAGE_SIZE = 256
    
    # 件名(%%dはシーケンス番号)
    DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d]" 
    
    # メッセージヘッダ
    DEFAULT_MSG_HEADER = "" 
    
    # メッセージフッタ
    DEFAULT_MSG_FOOTER = """_______________________________________________
    %(real_name)s mailing list
    %(real_name)s@%(host_name)s
    %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
    """ 
    
    # メンバー以外からの投稿処理方法
    # 0 = 受け付ける
    # 1 = 受け付けるがすぐに配送せず保留する
    # 2 = 拒否する(受け付けなかった旨を通知する)
    # 3 = 破棄する(受け付けなかった旨を通知しない)
    DEFAULT_GENERIC_NONMEMBER_ACTION = 1
    
    # パスワードの通知を定期的に送る
    DEFAULT_SEND_REMINDERS = No
    
    # リスト参加時のようこそメッセージを送る
    DEFAULT_SEND_WELCOME_MSG = Yes
    
    # リスト退会時のさようならメッセージを送る
    DEFAULT_SEND_GOODBYE_MSG = Yes
    
    # 返信先(reply-to)ヘッダの設定
    # 0 変更しない(投稿者のアドレス)
    # 1 メーリングリストのアドレス
    # 2 明示的に指定する(reply_to_address)
    DEFAULT_REPLY_GOES_TO_LIST = 0
    
    # 返信先(reply-to)ヘッダを削除する
    DEFAULT_FIRST_STRIP_REPLY_TO = No
    
    # 読者登録設定
    # 0 誰でも登録できる (ALLOW_OPEN_SUBSCRIBEに1を設定している場合)
    # 1 読者本人に確認が行われる
    # 2 管理者に承認が必要
    # 3 読者本人の確認と管理者の承認の両方が必要
    #
    # ** please do not choose option 0 if you are not allowing open
    # subscribes (next variable)
    DEFAULT_SUBSCRIBE_POLICY = 2
    
    # 読者登録を誰でも登録することができる
    ALLOW_OPEN_SUBSCRIBE = No
    
  • 次のコマンドでコンフィグファイルやパーミッションのセルフチェックを行う
    # /usr/lib/mailman/bin/check_perms
    
  • パーミッションエラーだけになったら下記のコマンドで修正する
    # /usr/lib/mailman/bin/check_perms -f
    
    • 「問題ありません」となるまで何度か実行する

Postfix設定ファイルの編集

  • 設定ファイルを編集する
    # vi /etc/postfix/main.cf
    --------------------
    alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases
    alias_database = hash:/etc/aliases, hash:/etc/mailman/aliases
    allow_mail_to_commands = alias,forward,include
    recipient_delimiter = +
    
  • 上記で追加したmailmanのaliasesファイルを作成する
    # /usr/lib/mailman/bin/genaliases
    
  • 作成したaliasesファイルのパーミッションを確認する
    # ls -l /etc/mailman/aliases*
    -rw-rw---- 1 root mailman   355 10月 15 15:08 /etc/mailman/aliases
    -rw-r----- 1 root mailman 12288 10月 15 15:08 /etc/mailman/aliases.db
    
  • パーミッションをセルフチェックで修正する
    「問題ありません」となるまで繰り返す
    # /usr/lib/mailman/bin/check_perms -f
    
  • 変更後のパーミッションを確認する
    # ls -l /etc/mailman/aliases*
    -rw-rw---- 1 root    mailman   355 10月 15 15:08 /etc/mailman/aliases
    -rw-rw---- 1 mailman mailman 12288 10月 15 15:08 /etc/mailman/aliases.db
    
  • Postfixを再起動する
    # systemctl restart postfix
    

Apacheの設定ファイル編集

  • httpd.confの「ServerName」をmailmanの「DEFAULT_URL_HOST」と同じ名前に変更する
    # vi /etc/httpd/conf/httpd.conf
    --------------------
    ServerName mailman.example.com
    
  • 必要に応じて次のファイルを編集する
    「pipermail」は設定ファイルでアーカイブのアドレスを変更していればそれに合わせる。
    手動変更で変更を推奨されているのは末尾のリダイレクト設定のホスト名部分。
    # vi /etc/httpd/conf.d/mailman.conf
    --------------------
    Alias /pipermail/ /var/lib/mailman/archives/public/
    
    # Uncomment the following line, replacing www.example.com with your server's
    # name, to redirect queries to /mailman to the listinfo page (recommended).
    
    RedirectMatch ^/mailman[/]*$ http://mailman.example.com/mailman/listinfo
    
  • Apacheをサービス登録して起動する
    # systemctl enable httpd
    # systemctl start httpd
    
  • ブラウザで次のアドレスにアクセスできること
    https://DEFAULT_URL_HOSTの値/mailman/listinfo
    
    • IPアドレス等でもアクセスはできるが、バーチャルホスト機能で別のドメインと判定されるので
      正しくリスト一覧などが取得できない可能性がある。DNSやhostsなどで名前解決させておくこと。

メーリングリスト初期リストの作成とサービス起動

  • 管理用に「mailman」というリスト名が無いと怒られるので作成する
    # /usr/lib/mailman/bin/newlist mailman
    リスト管理者のメールアドレスを入力してください: postmaster@example.com
    mailman の初期パスワード:
    Enter を押して mailman の管理者にメール通知する...
    
  • エイリアスが作成されたことを確認する
    # less /etc/mailman/aliases
    --------------------
    # This file is generated by Mailman, and is kept in sync with the
    # binary hash file aliases.db.  YOU SHOULD NOT MANUALLY EDIT THIS FILE
    # unless you know what you're doing, and can keep the two files properly
    # in sync.  If you screw it up, you're on your own.
    
    # The ultimate loop stopper address
    mailman-loop: /var/lib/mailman/data/owner-bounces.mbox
    
    # STANZA START: mailman
    # CREATED: Tue Oct 15 15:47:09 2019
    mailman:             "|/usr/lib/mailman/mail/mailman post mailman" 
    mailman-admin:       "|/usr/lib/mailman/mail/mailman admin mailman" 
    mailman-bounces:     "|/usr/lib/mailman/mail/mailman bounces mailman" 
    mailman-confirm:     "|/usr/lib/mailman/mail/mailman confirm mailman" 
    mailman-join:        "|/usr/lib/mailman/mail/mailman join mailman" 
    mailman-leave:       "|/usr/lib/mailman/mail/mailman leave mailman" 
    mailman-owner:       "|/usr/lib/mailman/mail/mailman owner mailman" 
    mailman-request:     "|/usr/lib/mailman/mail/mailman request mailman" 
    mailman-subscribe:   "|/usr/lib/mailman/mail/mailman subscribe mailman" 
    mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman" 
    # STANZA END: mailman
    
  • サービスを登録し起動する
    # systemctl enable mailman
    # systemctl start mailman
    

動作確認

  • 管理用リストにテスト用ユーザを追加する
    # echo postmaster@example.com |/usr/lib/mailman/bin/add_members -r - mailman
    # /usr/lib/mailman/bin/list_members mailman
    postmaster@example.com
    
  • メールを送ってみる
    # mail -r postmaster@example.com mailman@example.com
    Subject: test
    test
    .
    EOT
    
  • メールが配送されたか確認してみる
    # mail -f Maildir/
    
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "Maildir/": 1 messages 1 new 0 unread
     N  1 postmaster@example.com  Tue Oct 15 16:13  39/1673  "[Mailman 1] test" 
    
  • 管理用リストからテスト用ユーザを削除する
    # /usr/lib/mailman/bin/remove_members mailman postmaster@example.com
    # /usr/lib/mailman/bin/list_members mailman