サイト管理者にできること、サイトの日常的業務などについて簡単に解説します。
サイト管理者はそのサーバマシンで運用する全てのメーリングリストの管理を監督する立場にあります。新しくメーリングリストを作成したり、複数のリス トにわたる問題の解決にあたったりします。
Mailman のサイト管理は他のメーリングリスト管理システムに比べると簡単です。しかし、Webインタフェースではなく、シェルログインした状 態でコマンドを実行するということになりますので、unix システムの経験や windows でもコマンドツールを使った経験が必須となります。
ここでは、 Site Administrator Documentation や Mailman FAQ の Site Administrator Tasks の中から重要なものを取り出して解説します。
Mailman のサイト管理に使用するコマンドは Python スクリプトで書かれていて、<prefix>/bin に入っています。実行にはリストのデータベースの変更権限が必要なので、sudo 又は sudo -u mailman を付けて実行する必要があるかもしれません。
以下の実行例では bash のコマンドプロンプト $ の後に書いてある文字列をキーボードから入力して、Return (Enter) キーを押すことで実行ができます。($ を入力する必要はありません)
コマンドラインツールのヘルプは、<command> –help で読む事ができます。ヘルプの日本語訳を読むには、端末の日本語表示を EUC-JP に設定し、環境変数 LANG を日本語 (EUC) にする必要があります。環境変数の変更は、Linux でよく使われている bash の場合、
$ export LANG=ja_JP.EUC-JP
となります。
詳しいことはヘルプを参照していただくことにして、ここでは有用なコマンドの名前とその機能を簡単に列挙することにします。
インストールマニュアルで書いてあるようにサイトのデフォルトは Defaults.py というファイルに書いてあり、 mm_cfg.py でそれを上書きします。Mailman 2.1.12 の時点でのDefaults.py の日本語訳が配布ソースに入っていますが、ここでは必要度に応じて省略しながら解説します。
また、ここで設定を推奨している項目を入れた mm_cfg.py の例 を置いておきますので参考にしてください。
DEFAULT_EMAIL_HOST = '@MAILHOST@'
DEFAULT_URL_HOST = '@URLHOST@'
DEFAULT_URL_PATTERN = 'http://%s/mailman/'
@MAILHOST@ と @URLHOST@ は configure のときに決まります。システムのホスト名から自動的に出てくるものが正しくないなら、configure のオプションで指定できます。mm_cfg.py で上書きする事もできますが、その場合には
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
を、(もう一度)書いておかなくてはいけません。また、リスト作成後に変更する場合には fix_url.py を使って既存のリストにおける設定を修正してください。
ALLOW_SITE_ADMIN_COOKIES = No
Mailman では複数のドメインに対してメーリングリストを作る事ができます。但し、ローカルパート(つまり@の左側)はサイトで一意的になって いないといけません。そのように「使えるドメイン」として何があるのかを設定します。ドメイン名はウェブページのホスト名とメールのドメイン名(つま り@の右側)のペアで VIRTUAL_HOSTS というディクショナリに入りますが、これは add_virtualhost() という関数で設定します。
SpamDetect.py というモジュールで mailman にやってきたメールをチェックします。このとき、ヘッダ名, 正規表現 のペアで KNOWN_SPAMMERS に登録しておくと、これにマッチするメールは破棄します。
DEFAULT で始まる変数はリスト作成時に設定される値である事を示します。 保存書庫を作るかどうか、そのプライバシーはどうするか、保存書庫を分割して 巻にする期間はどの程度にするかなどを決めます。これらの既定値の多くは後で Web 管理インタフェースから変更できます。
PUBLIC_ARCHIVE_URL = 'http://%(hostname)s/pipermail/%(listname)s'
DEFAULT_ARCHIVE = On
DEFAULT_ARCHIVE_PRIVATE = 0
DEFAULT_ARCHIVE_VOLUME_FREQUENCY = 1
SCRUBBER_DONT_USE_ATTACHMENT_FILENAME = True
SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION = False
ARCHIVE_HTML_SANITIZER = 1
DELIVERY_MODULE = 'SMTPDirect'
MTA = 'Manual'
POSTFIX_STYLE_VIRTUAL_DOMAINS = []
VIRTUAL_MAILMAN_LOCAL_DOMAIN = None
POSTFIX_ALIAS_CMD = '/usr/sbin/postalias'
POSTFIX_MAP_CMD = '/usr/sbin/postmap'
SMTP_MAX_RCPTS = 500
SMTP_MAX_SESSIONS_PER_CONNECTION = 0
SMTPHOST = 'localhost'
SMTPPORT = 0
REMOVE_DKIM_HEADERS = No
Mailman 内部でのメールの処理(件名にプレフィクスを付けるとか、受信者のリス トを作るとか)は Python のモジュールを順に呼び出して行うようになっています。 この処理モジュールの並びをパイプラインと呼びます。 GLOBAL_PIPELINE と OWNER_PIPELINE が定義されていますので、後から mm_cfg.py で適当な位置にモジュールを追加することができます。
例えば +j バージョンでは
GLOBAL_PIPELINE.insert(1, 'iso2022jpfix')
のようにして日本語処理のモジュールを入れるように推奨されています。
あるいは、Usenet とのコネクションが無いのであれば
GLOBAL_PIPELINE.remove('ToUsenet')
のようにして Usenet へ配信するモジュールを除いておいてもよいでしょう。
VERP とは Variable Enverope Return Path の略で、送信者 (SMTP の FROM) アドレスに宛先を組み 込むことで、エラー通知があったときに宛先を取り出すことが容易になるという方法です。例えばリストの会員がメールを転送していてその転送先でエラー になったとき、エラー通知には元の会員メールアドレスは書いてないことが多いのですが、SMTP_FROM アドレスに最初の宛先が組み込んであるので、会員が登録しているメールアドレスを知ることができます。そのためには、MTA がメールアドレスのローカルパートのうち + 以降は無視してその前のメールボックスに配信するように設定する必要があります。
VERP_PROBES = No
VERP_PASSWORD_REMINDERS = No
VERP_PERSONALIZED_DELIVERIES = No
VERP_DELIVERY_INTERVAL = 0
VERP_CONFIRMATIONS = No
MAX_AUTORESPONSES_PER_DAY = 10
バックスキャッタとはスパムメールの送信者に本当に配信したいアドレスを設定しておいて、エラーになったメールをその人に届けようとする(あるいは届 いてしまう)ことを言います。Mailman ではメールコマンドが成功/失敗したことを送信者に知らせますので、バックスキャッタに悪用される危険があります。
DISCARD_MESSAGE_WITH_NO_COMMAND = Yes
RESPONSE_INCLUDE_LEVEL = 2
DEFAULT_RESPOND_TO_POST_REQUESTS = Yes
Mailman のメール処理は上記のパイプラインで行われますが、それぞれのパイプラインを駆動するプロセスが Qrunner です。上では GLOBAL と OWNER が出ていましたが、その他保存書庫、エラー処理、メールコマンド処理、Usenet ニュースへの配送、MTA への送信、Mailman 自体から発信するメールの処理、一時的にエラーになった処理の再開のためにそれぞれ Qrunner が起動されます。QRUNNERS には qrunner の名前と同時処理のプロセス数が記述されます。例えば個別配送を多用するトラフィックの多いサイトでは OutgoingRunner を増やしたいかもしれません。プロセス数は 2 のべき乗で書いてください。(2,4...) しかし、多くの場合では各1の Runner で十分でしょう。逆に Usenet への配信をしていない場合には、
QRUNNERS.remove(('NewsRunner', 1))
のようにして、NewsRunner を止めておきたいかもしれません。
DEFAULT_SERVER_LANGUAGE = 'en'
USE_ENVELOPE_SENDER = No
SENDER_HEADERS = ('from', None, 'reply-to', 'sender')
DEFAULT_ADMIN_MEMBER_CHUNKSIZE = 30
ADMINDB_PAGE_TEXT_LIMIT = 4096
OWNERS_CAN_DELETE_THEIR_OWN_LISTS = No
OWNERS_CAN_ENABLE_PERSONALIZATION = No
OWNERS_CAN_CHANGE_MEMBER_PASSWORDS = No
ADMIN_CATEGORIES
管理インタフェースのカテゴリーとしてどの下位のページをメニューとして 表示するかを決めます。例えば Usenet News とのメッセージ交換を行わない のであれば、
ADMIN_CATEGORIES.remove('gateway')
を mm_cfg.py に書いておくとよいでしょう。
DEFAULT_NEW_MEMBER_OPTIONS = 256
USER_FRIENDLY_PASSWORDS = Yes
MEMBER_PASSWORD_LENGTH = 8
ADMIN_PASSWORD_LENGTH = 10
リストを作成するときに設定される値を決めます。既に作成されたリストには影響しません。また、DEFAULT で決められた値は管理インタフェースで変更できます。
DEFAULT_LIST_ADVERTISED = Yes
DEFAULT_MAX_NUM_RECIPIENTS = 10
DEFAULT_MAX_MESSAGE_SIZE = 40
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s] "
件名に付けるプレフィックスの既定値です。メールに番号を付けるのを デフォルトにする場合には、
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d]"
のようにしておくとよいでしょう。
DEFAULT_MSG_HEADER
DEFAULT_MSG_FOOTER
DECORATE_LCSET = 1
DECORATE_MCSET = 2
DECORATE_CHARSETS = [DECORATE_LCSET, DECORATE_MCSET, 'utf-8']
DECORATE_PREFER_8BIT = No
OLD_STYLE_PREFIXING = Yes
DEFAULT_SCRUB_NONDIGEST = False
DEFAULT_MAIL_COMMANDS_MAX_LINES = 25
DEFAULT_ADMIN_IMMED_NOTIFY = Yes
DEFAULT_ADMIN_NOTIFY_MCHANGES = No
DEFAULT_MAX_DAYS_TO_HOLD = 0
DEFAULT_DEFAULT_MEMBER_MODERATION = No
DEFAULT_FORWARD_AUTO_DISCARDS = Yes
DEFAULT_GENERIC_NONMEMBER_ACTION = 1
DEFAULT_REQUIRE_EXPLICIT_DESTINATION = Yes
DEFAULT_ACCEPTABLE_ALIASES = ""
DEFAULT_UMBRELLA_LIST = No
DEFAULT_UMBRELLA_MEMBER_ADMIN_SUFFIX = "-owner"
DEFAULT_REGULAR_EXCLUDE_LISTS = []
DEFAULT_REGULAR_INCLUDE_LISTS = []
ALLOW_CROSS_DOMAIN_SIBLING = False
DEFAULT_SEND_REMINDERS = Yes
DEFAULT_SEND_WELCOME_MSG = Yes
DEFAULT_SEND_GOODBYE_MSG = Yes
DEFAULT_BOUNCE_MATCHING_HEADERS = ...
DEFAULT_REPLY_GOES_TO_LIST = 0
DEFAULT_FIRST_STRIP_REPLY_TO = No
DEFAULT_SUBSCRIBE_POLICY = 1
ALLOW_OPEN_SUBSCRIBE = No
DEFAULT_UNSUBSCRIBE_POLICY = 0
DEFAULT_PRIVATE_ROSTER = 1
DEFAULT_OBSCURE_ADDRESSES = Yes
ALLOW_RFC2369_OVERRIDES = Yes
ALLOW_SENDER_OVERRIDES = Yes
DEFAULT_FILTER_CONTENT = No
DEFAULT_FILTER_MIME_TYPES = []
DEFAULT_PASS_MIME_TYPES = [ ... ]
DEFAULT_FILTER_FILENAME_EXTENSIONS = [ ... ]
DEFAULT_PASS_FILENAME_EXTENSIONS = []
DEFAULT_COLLAPSE_ALTERNATIVES = Yes
DEFAULT_CONVERT_HTML_TO_PLAINTEXT = Yes
DEFAULT_FILTER_ACTION = 0
OWNERS_CAN_PRESERVE_FILTERED_MESSAGES = Yes
DEFAULT_ADMINISTRIVIA = Yes
DEFAULT_NONDIGESTABLE = Yes
DEFAULT_DIGESTABLE = Yes
DEFAULT_DIGEST_HEADER = ""
DEFAULT_DIGEST_FOOTER = DEFAULT_MSG_FOOTER
DEFAULT_DIGEST_IS_DEFAULT = No
DEFAULT_MIME_IS_DEFAULT_DIGEST = No
DEFAULT_DIGEST_SIZE_THRESHHOLD = 30 # kB
DEFAULT_DIGEST_SEND_PERIODIC = Yes
MIME_DIGEST_KEEP_HEADERS = [ ... ]
PLAIN_DIGEST_KEEP_HEADERS = [ ... ]
DEFAULT_BOUNCE_PROCESSING = Yes
REGISTER_BOUNCES_EVERY = minutes(15)
DEFAULT_BOUNCE_SCORE_THRESHOLD = 5.0
DEFAULT_BOUNCE_INFO_STALE_AFTER = days(7)
DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS = 3
DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL = days(7)
DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER = Yes
DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE = Yes
DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL = Yes
PENDING_REQUEST_LIFE = days(3)
DELIVERY_RETRY_PERIOD = days(5)
DELIVERY_RETRY_WAIT = hours(1)
ロックとは2つ以上のプロセスが同時にリストの情報を書き変えて矛盾が生じないようにするための機構です。以下の変数は Mailman の動作に異常があるなどの時、その原因追及やデバッグのために用意されているものです。
LIST_LOCK_DEBUGGING = Off
LIST_LOCK_LIFETIME = hours(5)
LIST_LOCK_TIMEOUT = seconds(10)
PENDINGDB_LOCK_DEBUGGING = Off
以降の Defaults.py にはサイトで変更できるものは無いとされていますが、利用できる言語についてカスタマイズしたいと思うかもしれません。その場合、mm_cfg.py には以下のように記述します。
def _(s): return s
add_language('en', _('English (USA)'), 'iso-8859-1', 'ltr')
del _
上の例では、英語で使用する文字コードを (us-ascii でなく) iso-8859-1 (latin-1) に変更しています。
mmdsr は Mailman Daily Status Report を略したシェルスクリプトで、配布ソースの contrib ディレクトリに入っています。このスクリプトは <prefix>/cron ディレクトリに置いて、他の cron スクリプトと同様に定時に実行するように作られています。
実際には、このシェルスクリプトを使う前にエディタで編集して、OS の種類やインストールしたディレクトリに合わせて、ちゃんと動作するようにしてあげないといけません。修正するところは
mailman ユーザ権限でスクリプトが実行できる事を確認してください。
crontab の設定は、:
59 23 * * * /usr/local/mailman/cron/mmdsr
です。/usr/local/mailman のところは実際のインストールに合わせてください。cron/crontab.in ファイルを編集して、sudo crontab -u mailman crontab.in でもいいですし、直接 sudo -u mailman crontab -e で編集してもよいでしょう。
Mailman が利用している Python の文字コードにおける問題、というよりは、非 標準の文字を JIS コードと偽って使用する日本での慣習の問題によって、本家 より配布される Mailman には、いわゆる「機種依存文字」を含むメールが配送さ れなくなるという問題があります。
以下のような解決策がありますので、どれかひとつを選んでください。
mailman が使っている email パッケージを修正します。email パッケージは 2.1.11 以前は <prefix>/pythonlib/email にありますが、2.1.12 以降は インストールに使用した Python の lib/python2.x/email にあります。
email ディレクトリに charset.py 又は Charset.py というファイルが ありますが、class Charset の中の convert() 関数定義を探してください。
return unicode(s, self.input_codec).encode(self.output_codec)
と、なっている行を次のように修正します
return unicode(s, self.input_codec, 'replace').encode(self.output_codec, 'replace')
使用している Python のバージョンによっては input_codec, output_codec でなく input_charset, output_charset になっているかもしれません。 修正ができたら、mailman を再起動して、正常にメールが配信されることを確認 してください。