WSLを使ってメーリングリストを作成(mailman編)

・インストール

  $ sudo apt install mailman
ja(Japanese) をスペースで選択、OKを押す

・ファイル属性をチェックする

  $ sudo /usr/lib/mailman/bin/check_perms
問題が報告されなくなるまで -f オプションをつけて繰り返し実行する
  $ sudo /usr/lib/mailman/bin/check_perms -f
シンボリックリンクの先ではなくて、シンボリックリンクのの所有者、グループをチェックしているらしい。chown -h root:list などでシンボリックリンク自体を修正するとエラーは出なくなる。
  $ sudo chmod g+s /var/lib/mailman/logs
  $ sudo chown -h root:list /var/lib/mailman/bin
  $ sudo chown -h root:list /var/lib/mailman/cgi-bin
  $ sudo chown -h root:list /var/lib/mailman/cron
  $ sudo chown -h root:list /var/lib/mailman/icons
  $ sudo chown -h root:list /var/lib/mailman/locks
  $ sudo chown -h root:list /var/lib/mailman/logs
  $ sudo chown -h root:list /var/lib/mailman/mail
  $ sudo chown -h root:list /var/lib/mailman/Mailman
  $ sudo chown -h root:list /var/lib/mailman/scripts
  $ sudo chown -h root:list /var/lib/mailman/templates

・管理用メーリングリスト「mailman」を作る
これがないと、Webインターフェースが利用できない

  $ sudo /usr/lib/mailman/bin/newlist --language=ja mailman
Enter the email of the person running the list: postmaster@mydomain.com
Initial mailman password:xxxxx
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:
aliasデータベースを更新する
  $ sudo newaliases

・設定

/usr/lib/mailman/Mailman/Defaults.py を参考に、mm_cfg.pyを修正する

  $ sudo vi /etc/mailman/mm_cfg.py

DEFAULT_URL_PATTERN = 'https://%s/mailman/'
DEFAULT_EMAIL_HOST = 'ml.mydomain.com'
DEFAULT_URL_HOST   = 'ml.mydomain.com'


#####
# Archive defaults
#####
# Are archives on or off by default?
DEFAULT_ARCHIVE = Off

# Are archives public or private by default?
# 0=public, 1=private
DEFAULT_ARCHIVE_PRIVATE = 1

#####
# Delivery defaults
#####
MTA='Postfix'
POSTFIX_STYLE_VIRTUAL_DOMAINS = [DEFAULT_EMAIL_HOST ]
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)

#####
# General defaults
#####
DEFAULT_SERVER_LANGUAGE = 'ja'
OWNERS_CAN_DELETE_THEIR_OWN_LISTS = Yes
DEFAULT_NEW_MEMBER_OPTIONS = 256  # Default see Bitfield for user options

#####
# List defaults.  NOTE: Changing these values does NOT change the
# configuration of an existing list.  It only defines the default for new
# lists you subsequently create.
#####
DEFAULT_LIST_ADVERTISED = No
DEFAULT_SUBJECT_PREFIX = '[%(real_name)s:%%05d] '
# What should happen to non-member posts which are do not match explicit
# non-member actions?
# 0 = Accept
# 1 = Hold
# 2 = Reject
# 3 = Discard
DEFAULT_GENERIC_NONMEMBER_ACTION = 2
DEFAULT_SEND_REMINDERS = 0
DEFAULT_SEND_WELCOME_MSG = No
DEFAULT_SEND_GOODBYE_MSG = No

# Mailman can be configured to "munge" Reply-To: headers for any passing
# messages.  One the one hand, there are a lot of good reasons not to munge
# Reply-To: but on the other, people really seem to want this feature.  See
# the help for reply_goes_to_list in the web UI for links discussing the
# issue.
# 0 - Reply-To: not munged
# 1 - Reply-To: set back to the list
# 2 - Reply-To: set to an explicit value (reply_to_address)
DEFAULT_REPLY_GOES_TO_LIST = 1

# SUBSCRIBE POLICY
# 0 - open list (only when ALLOW_OPEN_SUBSCRIBE is set to 1) **
# 1 - confirmation required for subscribes
# 2 - admin approval required for subscribes
# 3 - both confirmation and admin approval required
#
# ** please do not choose option 0 if you are not allowing open
# subscribes (next variable)
DEFAULT_SUBSCRIBE_POLICY = 2

#####
# Digestification defaults.  Same caveat applies here as with list defaults.
#####
DEFAULT_DIGESTABLE = No

・ Postfixに読み込ませるaliasesファイルを生成する
/var/lib/mailman/data に作成される。

  $ sudo /usr/lib/mailman/bin/genaliases

・サイトパスワードの設定
サイトパスワードはメーリングリスト作成時などにリスト作成者の認証パスワード項目として入力する

  $ sudo /usr/lib/mailman/bin/mmsitepass

・実行するのに必要なリンクを張る

  $ sudo ln -s /usr/lib/mailman/bin/mailmanctl /usr/sbin/

・mailmanを実行する

  $ sudo mailmanctl start
以下のエラーが出たらディレクトリを作成する
IOError: [Errno 2] No such file or directory: '/var/lib/mailman/locks/master-qrunner.domain.com.1909.1'
  $ sudo mkdir /var/lock/mailman
  $ sudo chown www-data:list /var/lock/mailman
  $ sudo chmod g+w /var/lock/mailman
  $ sudo ls -laH /var/lib/mailman/locks
drwxrwxr-x 1 www-data list 512 Feb 8 10:33 .
  $ sudo mailmanctl start
まだ出るときは同じくディレクトリを作成する
IOError: [Errno 2] No such file or directory: '/var/run/mailman/mailman.pid'
IOError: [Errno 13] Permission denied: '/var/run/mailman/mailman.pid'
  $ sudo mkdir /var/run/mailman
  $ sudo chown list /var/run/mailman
  $ sudo chmod g+w /var/run/mailman
  $ sudo ls -laH /var/run/mailman
drwxrwxr-x 1 list root 512 Feb 8 10:33 .
これはWSLの起動ごとに必要らしい

・postfixの設定

postfixは/etc/aliasや/etc/mailman/virtual-mailmanにある名前にメールが届いた場合、aliasなどに書かれたmailmanのスクリプトを実行する

  $ sudo vi /etc/postfix/main.cf
# Postfix は -owner と -request 宛のアドレスのメールは拒否するので許可する。
recipient_delimiter = +
owner_request_special = no
# mailmanのaliasを追加
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman

postfixを再起動する

$ sudo service postfix restart

・apacheの設定

apache2では*-aveilableに実際のファイルをコピーし、以下のコマンドで*-enabledにシンボリックリンクを作成/削除して、有効/無効にするようだ。

シンボリックリンクを作成する場所無効にするコマンド有効にするコマンド
mods-enableda2dismod a2enmodモジュールの設定ファイル
sites-enableda2dissitea2ensite仮想ホストの設定ファイル
sites-enableda2disconfa2enconf その他設定ファイル

confファイルの修正

  $ sudo vi /etc/apache2/sites-available.000-default.conf
ServerName ml.mydomain.com
ServerAdmin postmaster@mydomain.com

cgiモジュールを有効にする

  $ sudo a2enmod cgi

mailmanのapache.confを追加して有効化する

  $ sudo ln -s /etc/mailman/apache.conf /etc/apache2/conf-available/mailman.conf
  $ sudo a2enconf mailman

設定ファイルの確認

  $ sudo apache2ctl configtest
  $ sudo apache2ctl stop
  $ sudo apache2ctl configtest # confファイル検査
  $ sudo apache2ctl -S # VirtualHost確認 -t -D DUMP_VHOSTS -D DUMP_RUN_CFG と同じ
  $ sudo apache2ctl -t -D DUMP_INCLUDES
  $ sudo apache2ctl -t -D DUMP_MODULES

・apacheを起動する
 $ sudo apache2ctl start

Windows Defenderファイアウォールの警告が出たら許可する

  以下のエラーが出た時
    Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT
    https://note.kiriukun.com/entry/20200404-failed-to-enable-APR_TCP_DEFER_ACCEPT-on-wsl-ubuntu-apache2
   以下をapache.confの末尾に追加する
      AcceptFilter http none
      AcceptFilter https none

・メーリングボックスの管理

・Web UIでの編集

http://localhost/mailman/admin/
http://localhost/mailman/admin/mailman

作成されたメーリングリストのメンバーは0人なので、自分を追加する

・Web UIで表示するHTTPアドレスの変更

以下のコマンドで確認する
  $ sudo /usr/lib/mailman/bin/dumpdb /var/lib/mailman/lists/mailman/config.pck | grep web_page
変更用のファイルを作る
  $ sudo vi /etc/mailman/change_url.py
def change_url(mlist):
mlist.Lock()
mlist.web_page_url = 'http://ml.mydomain.com/mailman/'
mlist.Save()
所定の場所にシンボリックリンクを作り、winlistを実行する
  $ sudo ln -s /etc/mailman/change_url.py /usr/lib/mailman/bin/change_url.py
  $ sudo /usr/lib/mailman/bin/withlist -r change_url mailman    # メーリングリストmailmanのみの場合
  $ sudo /usr/lib/mailman/bin/withlist -r change_url -a         # すべて書き換える場合

以下のコマンドで変更されていることを確認する
  $ sudo /usr/lib/mailman/bin/dumpdb /var/lib/mailman/lists/mailman/config.pck | grep web_page

・起動・終了コマンド一覧

sudo mailmanctl start
sudo mailmanctl -s start
sudo apache2ctl start
sudo /etc/init.d/rsyslog --privileged start
sudo service postfix start

sudo mailmanctl stop
sudo apache2ctl stop
sudo service postfix stop

sudo mailmanctl restart
sudo mailmanctl -s restart
sudo apache2ctl restart
sudo /etc/init.d/rsyslog restart
sudo service postfix restart

ログの確認

postfix
sudo less +F /var/log/mail.log
sudo less /var/log/mail.err
mailman
sudo less /var/log/mailman/error
sudo less +F /var/log/mailman/post
sudo less /var/log/mailman/qrunner
sudo less /var/log/mailman/smtp
sudo less /var/log/smtp-failure
sudo less /var/log/subscribe
sudo less /var/log/ette

fetchmail
sudo less +F /var/log/fetchmail.log

apache2
sudo ls -lF /var/log/apache2/
sudo less +F /var/log/apache2/access.log
sudo less /var/log/apache2/error.log

メール
sudo less -f /var/spool/mail/root
sudo less -f /var/spool/mail/user

・メーリングリストの設定
送信元メールアドレスはそのまま表示するが、返信はメーリングリストに届くようにする。

from_is_list いいえ
anonumouse_list いいえ
first_strip_reply_to いいえ
reply_goes_to_address このリスト