tml

tml はメーリングリストツールです。Ruby で実装されています。

機能

tml に対する処理がエラーになった場合(非メンバからの投稿や間違ったコマ ンド等)は、tml がエラーメールを生成するのではなく、tml が異常終了する ため、エラーメールの処理は MTA に任されます。

ダウンロード

必要なもの

ライセンス

本プログラムはRubyライセンスに従います。

メーリングリスト

tmlに関する話題のためのメーリングリストがあります。参加するには、 tml-ctl@tmtm.org 宛に「subscribe」とだけ記述した本文のメールを送ってく ださい。

インストール

# useradd tml
# mkdir /usr/local/tml /var/spool/tml
# chown tml /usr/local/tml /var/spool/tml
# su tml
% tar xvfz tml-X.X.X.tar.gz
% cd tml-X.X.X
% ruby ./install

設定

/usr/local/tml/tml.conf を変更して tml の動作を変更することができます。 tml.conf は Ruby スクリプトです。Ruby の文法に従います。

有効なパラメータは以下の通りです。

項目名説明デフォルト値
$tml_dirTMLディレクトリインストール時に指定
$var_dirTML情報保持ディレクトリ"/var/spool/tml"
$etc_dir共通ファイル保持ディレクトリ ("/"で始まっていない場合は$var_dirからの相対パス)"etc"
$ml_dirML情報保持ディレクトリ (〃)"ml"
$deleted_dir削除済みML情報ディレクトリ (〃)"deleted"
$log_fileログファイル (〃)"log"
$smtp_serverメール配送サーバ"localhost"
$smtp_portメール配送サーバのSMTPポート"smtp"
$lock_timeoutロック獲得を待つ時間(秒)300
$max_lock_time最大ロック保持時間(秒)1800
$auto_aliasesML作成/破棄時に自動的に /var/spool/tml/etc/aliases を更新するかどうかtrue
$newaliases/var/spool/tml/etc/aliases 更新後に実行するコマンド。
postfix の場合は「postalias aliases」コマンドを記述しておけば良いでしょう
nil
$strip_receivedReceivedヘッダを削除するかどうかfalse
$logging$log_file にログを記録するかどうかtrue
$databaseMySQLを使用する場合は "mysql"nil
$spool_dbスプールをMySQLに持つ場合は "mysql"$database
以下はML毎に設定可能なパラメータのデフォルト値
$default_not_member非メンバからの投稿が可能かどうかfalse
$default_subject_mlnameサブジェクトにML名を付加するかどうかtrue
$default_counter_widthサブジェクトに付加するカウンタの桁数5
$default_remote_commandメールでのコマンドを許可するかどうかfalse
$default_remote_adminメールでの管理者コマンドを許可するかどうかfalse
$default_spoolメールを保存するかどうかtrue
$default_need_confirm_commandコマンド実行前に確認メールを送るコマンド一覧"subscribe,admin"
$default_allowed_commandメールでユーザが実行できるコマンド"all"
$default_anonymous_commandメールで非メンバが実行できるコマンド"subscribe,confirm"
$default_admin_commandメールで管理者が実行できるコマンド"all"
$default_loggingML毎のログを記録するかどうかtrue
$default_replyto_typeReply-To へッダの付加方法"ml"
以下は $database="mysql" 時に必要なパラメータ
$mysql_serverMySQLサーバ名nil
$mysql_userMySQL接続ユーザ名nil
$mysql_passwdMySQL接続パスワードnil
$mysql_dbMySQLデータベース名nil

MySQL

MySQLを使用する場合は、tml 用のデータベースを作成し、mysql.sql ファイ ル中のテーブルを作成し、tml.conf 中に $database, $mysql_server, $mysql_user, $mysql_pass, $mysql_db を設定してください。

% mysqladmin -u root -p create tml
% mysql -u root -p -e 'grant all on tml.* to tmluser@localhost identified by "tmlpasswd"'
% mysql -u tmluser -ptmlpasswd tml < mysql.tml
% cat tml.conf
...
$database = "mysql"
$mysql_server = "localhost"
$mysql_user = "tmluser"
$mysql_pass = "tmlpasswd"
$mysql_db = "tml"

MLの管理

tmladmin を使用して ML の管理を行ないます。

% tmladmin cmd

cmd は次のいずれかです。

コマンド説明
list MLの一覧を表示します。
create mlname admin MLを作成します。 admin はMLの管理者メールアドレスです。
drop mlname MLを破棄します。 MLのデータ $var_dir/mlname は -mlname-yyyymmddhhmmss にリネームされます。
add [--send-mail] mlname addr ... MLにメールアドレスを追加します。--send-mail オプション指定時は、登録したアドレス宛に welcome メールが送られます。
bye [--send-mail] mlname addr ... MLからメールアドレスを削除します。--send-mail オプション指定時は、登録したアドレス宛に unsubscribe メールが送られます。
addml mlname child ... MLの下に子MLを追加します。
byeml mlname child ... MLの下から子MLを取り除きます。
members mlname MLのメンバ一覧を出力します。
allmembers mlname MLのメンバ一覧を出力します。子MLがある場合は子MLのメンバも出力します。
children mlname MLの子ML一覧を出力します。
parents mlname MLの親ML一覧を出力します。
admins mlname MLの管理者アドレス一覧を出力します。
addadmin mlname addr MLの管理者アドレスを追加します。
byeadmin mlname addr MLの管理者アドレスを削除します。MLには少なくとも一人の管理者が必要です。
setattr mlname attr=value ... MLの属性を設定します。
getattr mlname [attr ...] MLの属性を出力します。属性を指定しない場合は一覧表示します。
setcounter mlname number MLのカウンタを設定します。
getcounter mlname MLの現在のカウンタ値を出力します。

setattr,getattr で使用できる属性は次の通りです。

属性名説明
senderMLの配信時に使用されるエンベロープ送信者
overviewMLの概要
not_memberメンバ以外からの利用の可否
subject_mlnameSubjectにML名を付加するか否か
counter_widthカウンタの桁数
remote_commandリモートコマンドが有効か否か
remote_adminリモート管理コマンドが有効か否か
spoolメールをスプールするか否か
need_confirm_command実行前に確認が必要なコマンド
allowed_commandリモートからユーザが実行できるコマンド
anonymous_commandリモートから非メンバが実行できるコマンド
admin_commandリモートから管理者が実行できるコマンド
loggingログを記録するか否か
replyto_typeReply-To へッダの付加方法
"ml":MLアドレス, "admin":管理者アドレス, "from":Fromアドレス, "none":変更しない, それ以外:指定文字列
web_interfaceWebインタフェースを使用するか否か(*)

(*)印は現バージョンでは意味がありません。

MLへの配送

MLへの配送は /etc/aliases などに次のようなエントリを作成しておけば良い でしょう。

mlname: "|/usr/local/tml/tml mlname"
mlname-admin: :include:/var/spool/tml/mlname/admin
mlname-ctl: "|/usr/local/tml/tmlctl mlname"

なお、ML作成/破棄時には /var/spool/tml/etc/aliases が自動的に更新されるため、複 数の aliases ファイルが参照可能な MTA の場合は、このファイルも指定して おくのが良いでしょう。この場合は、$newaliases パラメータを設定する必要 があります。たとえば、Postfix の場合は以下のように指定しておけば良いで しょう。

$newaliases = "/usr/sbin/postalias /var/spool/tml/etc/aliases"

リモートユーザコマンド

コマンドをメール本文に記述し、mlname-ctl 宛に送ることで、MLユー ザがコマンドを実行できます。

コマンド説明
confirm keyコマンド実行の確認
subscribeMLへの参加
unsubscribe, byeMLからの退会
membersMLのメンバ一覧
summary argsMLの過去メールサブジェクト一覧
get argsMLの過去メール取り出し
end, exitコマンドの終了
admin command 管理者コマンドの実行。tmladmin に指定するコマンドと同じです。ただし、list,create,drop,addml,byeml は使用できません。また、setattr で admin_command 属性は設定できません。

アクセス制御

正規表現で参加/投稿メールアドレスを制限することができます。特定のMLに 制限を掛けたい場合は、/var/spool/tml/ML名/access というファイルを作成 します。このファイルが無い場合は、/var/spool/tml/etc/access があれば、 それが参照されます。access ファイルの各行は次の形式で、上から順に評価 されます。

正規表現<TAB>アクセス権

アクセス権は次のいずれかです。

アクセス権説明
permit参加/投稿許可
permit_post投稿許可
permit_subscribe参加許可
reject参加/投稿拒否
reject_post投稿拒否
reject_subscribe参加拒否

どの行にも適合しない場合は permit が適用されます。

テンプレート

登録時の welcome メールや confirm メール等のメッセージは変更することが できます。デフォルトのメッセージファイルは /usr/local/tml/templates ディ レクトリ配下にあります。ファイルは次のパスの順に検索されます。

ファイル中の %{...} 部分は次のように置き換えられます。

パラメータ名
共通mlnameML名
adminaddr管理者アドレス(mlname-admin@domain)
ctladdrコントロールアドレス(mlname-ctl@domain)
fromFromメールアドレス。通常は sender 属性の値。confirm または admin 時は コントロールアドレス。
toToメールアドレス。このメールを送るきっかけとなったメールの送信者。
admincommand実行した管理者コマンド
result実行結果
memberlistlistMLメンバ一覧
summarysummaryサマリ
archivemsgアーカイブ(Base64エンコードされている)
confirmkey確認用キー
commands実行を試みているコマンド

TODO

履歴

2004-07-29 バージョン 0.5.1
2004-05-08 バージョン 0.5
2004-03-29 バージョン 0.4.4
2004-02-03 バージョン 0.4.3
2004-01-22 バージョン 0.4.2
2004-01-15 バージョン 0.4.1
2004-01-14 バージョン 0.4
2004-01-07 バージョン 0.3.1
2004-01-04 バージョン 0.3
2003-11-12 バージョン 0.2
2003-11-01 バージョン 0.1

作者

とみたまさひろ

Last modified: Tue Jul 6 02:32:17 JST 2004