contents
- install on Debian/Woody with Postfix
- カスタマイズ
- namazu連携
- mboxからHTMLを一括生成
- 通し番号を変更
- 保存書庫の文字化け
- 添付ファイルをアーカイブだけに残す
- 宛先数が多すぎます
- 長い名前の添付ファイル
mailman
install on Debian/Woody with Postfix
# groupadd mailman # useradd -g mailman -s /bin/false -d /usr/local/mailman mailman # chown mailman:mailman /usr/local/mailman # chmod 2755 /usr/local/mailman # tar zxf mailman-2.1.6b2.tgz # cd mailman-2.1.6b2 # ./configure --with-cgi-gid=www-data --with-mail-gid=mailman \ --prefix=/usr/local/mailman \ --with-mailhost=lx4.quattro.unisys.co.jp \ --with-urlhost=lx4.quattro.unisys.co.jp # make install
2.1.6からは日本語パッチの必要が無い。 インストール後にパーミッションチェック。
# /usr/local/mailman # bin/check_perms -f
no problemになったらOK。
/etc/apache/httpd.confに以下を追加
ScriptAlias /mailman/ /usr/local/mailman/cgi-bin/ Alias /pipermail/ /usr/local/mailman/archives/public/
ML毎にアクセス制御を行うため、以下もhttpd.confに追加して .htaccessを有効に。
<Directory /usr/local/mailman/> Options Indexes FollowSymLinks MultiViews AllowOverride FileInfo AuthConfig Limit </Directory>
エイリアスファイルを作成
# cd /usr/local/mailman/data # touch aliases aliases.db # chown mailman.mailman aliases* # chmod g+w aliases*
画像ファイルのコピー
# cd /usr/local/src/mailman-2.1.1/misc # cp PythonPowered.png mailman.jpg gnu-head-tiny.jpg mailman-large.jpg /usr
/etc/postfix/main.cfを変更
alias_maps = hash:/etc/aliases, hash:/usr/local/mailman/data/aliases alias_database = hash:/etc/aliases, hash:/usr/local/mailman/data/aliases
以降は、Webの管理画面からほとんど何もかも...
http://.../mailman/admin
カスタマイズ
MLごとの設定は管理画面から行えるが、全体の設定は mm_cfg.pyを編集。
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%04d] " DEFAULT_SERVER_LANGUAGE = 'ja' DEFAULT_EMAIL_HOST = 'lx4.quattro.unisys.co.jp' DEFAULT_URL_HOST = 'lx4.quattro.unisys.co.jp' MTA = 'Postfix'
mm_cfg.pyの変更はmailmanの再起動で反映する。
/etc/init.d/mailman restart
namazu連携
pipermail.plを入手。 $FILTERDIRに保存。$FILTERDIRとは、namazu2-index-toolsパッケージに よって作成される/usr/share/namazu/filter/。 crontabで以下を実行。
# cd /home/namazu_index/sagent-box/ # /usr/bin/mknmz --media-type='text/html; x-type=pipermail' \ /usr/local/mailman/archives/public/sagent-box/*
namazu.cgiが置かれている/usr/lib/cgi-bin/に.namazurcを 以下の内容で作成。
Index /work/namazu_index Template /work/namazu_index Replace /usr/local/mailman/archives/public/ http://lx3.quattro.unisys.co.jp/pipermail/ Lang ja
/work/namazu_index/には、
root@lx3# ls NMZ.body.ja NMZ.result.normal.ja sagent-box/ sagent-ml-mhonarc/ NMZ.foot.ja NMZ.result.short.ja sagent-box-mhonarc/ NMZ.head.ja NMZ.tips.ja sagent-ml/
このように、各種indexがサブディレクトリとして配置してあるので、 namazu.cgiを呼び出す際にFORM変数としてindex名を渡す。
<INPUT TYPE="CHECKBOX" NAME="dbname" VALUE="sagent-box" >sagent-box
http://mm.tkikuchi.net/NAMAZU-How-To.html
mboxからHTMLを一括生成
bin/arch [-wipe] ML-name
アーカイブは、/usr/local/mailman/archives/private/[ML-name].mbox/[ML-name].mboxにmboxとして(1個!)保存されている。 上記のコマンドで、このmboxを元にHTMLを生成。-wipeを付けると HTMLを一旦削除。 http://mm.tkikuchi.net/pipermail/mmjp-users/2001-May/000101.html
通し番号を変更
Subjectに挿入するPost-IDを途中から始めたい場合。
root@lx4# bin/withlist mailman Loading list mailman (unlocked) The variable `m' is the mailman MailList instance >>> m.Lock() >>> m.post_id 7.0 >>> m.post_id = 10 >>> m.Save() >>> Unlocking (but not saving) list: mailman Finalizing root@lx4#
http://mm.tkikuchi.net/pipermail/mmjp-users/2001-May/000101.html
保存書庫の文字化け
メールの本文に機種依存文字が含まれていると、保存書庫のHTML全体が 文字化けする。何も全部化けなくてもと思うのだが、保存書庫はEUCで 格納されており、iso-2022-jpに含まれない文字を見つけた時点で iso-2022-jp→EUCの変換をgive upしてしまうらしい。
いずれもインチキながら、現在二つの対処策があるらしい。
いずれ試す必要あり。
添付ファイルをアーカイブだけに残す
http://mm.tkikuchi.net/pipermail/mmjp-users/2004-July/000979.html ここの方法でMLメールから添付を「消す」ことはできるが、 アーカイブへのリンクを張ることはできないものか...?
宛先数が多すぎます
Cc:に10人くらい宛先を連ねたメールを送ると、「宛先数が多すぎます」と言って 承認を促すメールが管理者に来る。MLの宛先以外に何人宛先があろうと関係ないだろ、 余計なお世話じゃ、と思うのだが... とにかくいちいち管理画面を開いて 承認処理が必要になる。鬱陶しい。
Pythonなのでわけわからんのだが、Mailman/Handlers/Hold.pyの中で
if mlist.max_num_recipients > 0: # figure out how many recipients there are recips = email.Utils.getaddresses(msg.get_all('to', []) + msg.get_all('cc', [])) if len(recips) >= mlist.max_num_recipients: hold_for_approval(mlist, msg, msgdata, TooManyRecipients) # no return
こんな判断をしていて、mlistはMailList.pyで定義されるMailListクラス。 そいつのコンストラクタから呼ばれてると思われるInitVars()の中で
self.max_num_recipients = mm_cfg.DEFAULT_MAX_NUM_RECIPIENTS
こんなことをしてる。なので、mm_cfg.pyに、
DEFAULT_MAX_NUM_RECIPIENTS = 0
を追加してmailmanを再起動するがやはり承認メールは止らない。mm_cfg.pyは mailman全体のdefault設定なので、既に存在するMLには反映しないらしい。 ではどうするかと言うと、正しい方法があるのかも知れないが、
# bin/withlist mailman Loading list mailman (unlocked) The variable `m' is the mailman MailList instance >>> m.Lock() >>> m.max_num_recipients 10 >>> m.max_num_recipients = 0 >>> m.Save() >>> Unlocking (but not saving) list: mailman Finalizing #
とやったらうまくいったので、これで良しとしておく。withlist実行後の 再起動は必要ないらしい。
Webで情報を探そうにも"mailman"をキーワードに入れると、mailmanで 運用されてるMLが軒並み見つかってしまって困る...
長い名前の添付ファイル
ある時から、毎日12:00にこんなエラーメールが来るようになった。
Traceback (most recent call last): File "/usr/local/mailman/cron/senddigests", line 94, in ? main() File "/usr/local/mailman/cron/senddigests", line 86, in main mlist.send_digest_now() File "/usr/local/mailman/Mailman/Digester.py", line 60, in send_digest_now ToDigest.send_digests(self, mboxfp) File "/usr/local/mailman/Mailman/Handlers/ToDigest.py", line 133, in send_digests send_i18n_digests(mlist, mboxfp) File "/usr/local/mailman/Mailman/Handlers/ToDigest.py", line 310, in send_i18n_digests msg = scrubber(mlist, msg) File "/usr/local/mailman/Mailman/Handlers/Scrubber.py", line 253, in process url = save_attachment(mlist, part, dir, filter_html=False) File "/usr/local/mailman/Mailman/Handlers/Scrubber.py", line 497, in save_attachment fp = open(path, 'w') IOError: [Errno 36] File name too long: '/usr/local/mailman/archives/private/xxx/attachments/20050526/f0f7732e/iso-2022-jpBQ09PTElDRTAyIEYtU2VjdXJlIBskQiUiJXMlQSUmJSMlaxsoQgiso-2022-jpBGyRCJTkbKEIgTlQgU2VydmVyIBskQkhHGyhCIDVfNDEgLSAiso-2022-jpBGyRCJTklLSVjJXMbKEIgGyRCJWwlXSE8JUgbKEIgLSAiso-2022-jpBMjAwNRskQkcvGyhCMDUbJEI3bhsoQjI2GyRCRnwbKEIgMTIzMDQ3Lmh0iso-2022-jpBbQ.htm'
同時に、ML自体も配送されなくなった。エラーメールも来ない。 エラーメールにあるように、長い名前の添付ファイルがいけないらしい。
ARCHIVE_SCRUBBER = 0
として、mboxから問題のメールを削除してアーカイブを再生成してみたが復旧しない。 先のエラーメールはdigestの処理中のもので原因は別のところにある模様。
/usr/local/mailman/lists/xxx/digest.mbox
にも問題のメールが入っていたので、これを削除してsenddigestsを手で実行したところ、何事もなく終了。MLの配送も復旧した。 digestの生成とMLの配送がどこで繋がってるのか不明だが、作りが根本的に 間違ってるかも。余計な機能が死んでもメールの配送だけはしてくれないと。 せめてエラーメール返してくれないと。