メーリングリストの構築と運用(後編):実用qmailサーバ運用・管理術(5)(2/3 ページ)
今回はezmlmを拡張して、より高度で便利な機能を実現してみよう。ezmlmにidx-patchを当てることにより、Subjectの加工やダイジェストメールの生成などが可能になる。
MLをより便利に使うためのオプション
-d(ダイジェストメールの有効化)
ダイジェストメールによる送信を有効にします。ダイジェストメールにすると、メールは1投稿単位ではなく、一定数の投稿を1つのメッセージに連結し、見出しを付けて送信します。
ダイジェストメールにするには、ユーザーはダイジェストメール用のアドレスに対して希望メールを送信する必要があります。通常は「ml2-subscribe@example.jp」に送信しますが、ダイジェストメールの場合は「ml2-digest-subscribe@example.jp」になります。同様に、ダイジェストメールをやめるには「ml2-digest-usubscribe@example.jp」に空メッセージを送信します。
デフォルトでは「30通ごと」「64Kbytesごと」「48時間ごと」のいずれかの条件を満たした場合にダイジェストを作成して送信します。送信後、ダイジェストはリセットされ、再び条件を満たすまで蓄積されます。作成条件を変更するには、/var/ezmlm/ml2/editorファイルの「ezmlm-tstdig」で指定されているオプション
-t時間 -mメッセージ数 -kメッセージ容量
を変更します(ezmlm-make使用時に指定する場合は、"-4'-t時間 -mメッセージ数 -kメッセージ容量'"をオプションに追加)。
ただし、この方法では無料MLサービスの「24時間置きだけ」を条件にすることはできません。メッセージ数とメッセージ容量にとてつもなく大きな値を指定すれば実現できますが、MLにメールが届くたびに条件判定が行われるため、サーバに無駄な負荷が発生します。cronが使える環境であれば、editorファイルで行うことをcrontabに記述することでこれを解決できます。
まず、editorファイルの「ezmlm-tstdig」と「ezmlm-get」の行を削除します。次に
# crontab -e
を実行して次の1行を追加します。
10 05 * * * /usr/local/bin/ezmlm/ezmlm-get '/var/ezmlm/ml2'
これで、毎朝5時10分にダイジェストしたメールを登録者に送信します(注)。
-f(Subjectにprefixを付加)
SubjectにML名などの特定文字や通し番号を付加します。ezmlm-make実行時にこのオプションを指定した場合、/var/ezmlm/ml2にprefixファイルが作られます。通し番号を付けるには、prefixファイルを次のように編集します。
# vi /var/ezmlm/ml2/prefix [ml2 #]
通し番号を意図的に変更するには、numファイルを編集します(注)。
# vi /var/ezmlm/ml2/num 希望の数字:○○
残念ながら、返信メッセージのSubjectにprefixで指定された文字がすでにある場合、ezmlm-idxはprefixの加工を行いません。例えば、「引用元」というメッセージに返信した場合、Subjectは以下のようになります。
元メッセージのSubject [ml2 800] 引用元
返信メッセージのSubject Re: [ml2 800] 引用元
返信メッセージを「[ml2 801] Re: 引用元」のようにするには、prefixの編集だけではできません。editorファイル中でezmlm-sendが実行されている個所を修正する必要があります。
|/usr/local/bin/ezmlm/ezmlm-send '/var/ezmlm/ml2'
| Subjectを加工する処理 | /usr/local/bin/ezmlm/ezmlm-send '/var/ezmlm/ml2' | /usr/local/bin/ezmlm/ezmlm-warn '/var/ezmlm/ml2' || exit 0
Subjectの加工にはsedやPerlスクリプトを使うなどの方法が考えられます。以下のURLを参考にしてください。
コラム 日本語をprefixに
日本語文字列は、JIS漢字コードであれば使用できる場合もありますが、その場合、ezmlmはSubjectを「Subject: 漢字の題名」のようにBエンコードしません。マルチバイト文字をメールヘッダに使用する場合、RFCではこのようなエンコードは最低限施すべきとされています。
RFC 2047(http://www.faqs.org/rfcs/rfc2047.html)
-i(インデックス作成)
Subject、送信日付、送信者の3つのフィールドからなるインデックスを作成します(デフォルトで有効)。インデックスは、過去MLで送信されたメッセージを取り寄せる前に欲しいメッセージに目星を付けるときなどに役立ちます。インデックスを取り寄せるには、次のような専用アドレスに空メールを送ります(メッセージ番号を省略することも可能)。
ml2-index.123_145@example.jp
(123番から145番までのメッセージ送信者とSubjectを取り出す)
このオプションはデフォルトで有効になっているので、特に無効にしたい場合のみ「-I」をezmlm-make実行時に指定します。
MLに制限をかけるオプション
-m(モデレータ機能を有効化)
MLにメールを投稿する際に、「モデレータ」と呼ばれる審査員の許可が必要になります。投稿メッセージはいったんモデレータに送られ、モデレータはメールに返信することで投稿を認めます。
審査段階にある保留メッセージは/var/ezmlm/ml2/mod/pendingで保管され、一定期間を過ぎてもモデレータによる投稿許可が出なかった場合は「管理者があなたのメッセージを審査する前に時間切れになりました」という内容のメールを送信元に送ります。モデレータが複数登録されている場合は、そのうちの1人が許可を出した段階でMLに流れます。そのため、ほかのモデレータが投稿不可とする場合は、手続きが遅れるとMLにメッセージが流れてしまうので注意が必要です。逆に、投稿不可の手続きが行われた場合はほかのモデレータが投稿を認めてもMLにメッセージが流れることはありません。
モデレータの追加は、ezmlm-subコマンドを使って/var/ezmlm/ml2/modディレクトリに登録します。
# /usr/local/bin/ezmlm/ezmlm-sub /var/ezmlm/ml2/mod モデレータのアドレス
モデレータを削除する場合は、ezmlm-unsubコマンドを同じように引数を指定して実行します。
# /usr/local/bin/ezmlm/ezmlm-unsub /var/ezmlm/ml2/mod モデレータのアドレス
これで、/var/ezmlm/ml2/mod/subscribersディレクトリのファイルからメールアドレスが削除されます。
-u(投稿をメンバーに限定)
あらかじめ登録されたアドレス(すなわちMLのメンバー)からの投稿のみ許可します。登録されているアドレス以外(外出先でのメールアドレスなど)からも許可したい場合は、/var/ezmlm/ml2/allowディレクトリに登録しておく必要があります(注)。
# /usr/local/bin/ezmlm/ezmlm-sub /var/ezmlm/ml2/allow 例外を認めるアドレス
削除する場合は、ezmlm-unsubコマンドを同様の引数で実行します。
-u -mを同時に指定した場合
登録されたアドレスからの投稿はそのままMLに流し、そうでない場合はモデレータの許可を問うようになります。この場合も、上記の/var/ezmlm/ml2/allowディレクトリに対する例外アドレスの登録は有効です。
-g(アーカイブの取り出しを制限)
登録されているアドレスからのみアーカイブ(過去に流れたメッセージ)の取り出しが行えます。もちろん、-Aオプションでアーカイブの作成を行っていない場合は無効です。
-k(投稿禁止リスト作成
投稿禁止アドレスを/var/ezmlm/ml2/denyディレクトリに登録し、そのアドレスからの投稿を拒否します。
# /usr/local/bin/ezmlm/ezmlm-sub /var/ezmlm/ml2/deny 投稿禁止アドレス
禁止リストからアドレスを削除する場合は、ezmlm-unsubコマンドを同じ引数で使用します。-mオプションが指定されていても、先にこの禁止アドレスが評価されるため、モデレータが投稿許可の確認を行う必要はありません。MLに何度も送られてくるSPAMなどに対して有効に働きます。
-s(登録を審査制にする)
MLメンバー登録の可否をモデレータが審査できるようにします。登録を希望する人は、通常の「ml2-subscribe@example.jp」やダイジェスト版用の「ml2-digest-usubscribe@example.jp」にメールを送信し、登録確認のメールを受け取ります。登録確認のメールに返信すると、モデレータにメンバー登録可否を問うメールが送られ、モデレータのだれか1人が登録許可の手続きを行えば(注)、晴れてML登録となります。
-x(特定のMIMEパートを削除する)
投稿されたメッセージのMIMEパートを調べ、Content-typeが/var/ezmlm/ml2/mimeremoveファイルに登録されたものと一致した場合、そのパートだけ元のメッセージから取り除きます。これを利用すると、メッセージの内容以外に画像などの添付ファイルがMLに流れるのを防げます。
そのほかの制限方法
ezmlmで開設されたMLには、ほかにも下記のような制限が加えられています。
- 空Subject/空メッセージを拒否
- メッセージの最大容量は30000Kbytes
- アーカイブの取り出しは、一度に100メッセージまで
Subjectが空白かどうかの判定は、editorファイルのezmlm-rejectで行われます(editorファイルは.qmail-ml2の実体)。ezmlm-rejectに-Sオプションを指定することで、空Subjectでの投稿が可能になります。
|/usr/local/bin/ezmlm/ezmlm-reject '/var/ezmlm/ml2'
|/usr/local/bin/ezmlm/ezmlm-reject -S '/var/ezmlm/ml2'
空メッセージやメッセージ容量の上限を決めているのはmsgsizeファイルです。msgsizeファイルの書式は次のようになっています。
上限容量(bytes):最低容量(bytes)
書式に従って変更を加えます。最低容量を上げることで、5行程度の署名しかないようなメールを投稿不可にすることができます。
アーカイブ取り出し数の制限は、残念ながらMLごとに設定することはできません。ezmlm-idxインストール時に、ソースファイル中のidx.hのMAXGETの値を変更して再インストールする必要があります。しかし、ほとんどの場合は100メッセージの取り出しができれば十分です。もしそれ以上のファイルが欲しい場合は、数回に分けてアーカイブを取り出せば済むことです。
Copyright © ITmedia, Inc. All Rights Reserved.