FMLのメンバー管理コマンドの自動生成
お仕事では、メーリングリストをFMLで運用しています。
ML管理者として登録された人は、コマンドメールを使ってリストのメンバー更新ができるのがありがたい機能。
しかしながら、このメンバー管理が曲者で、メンバーリストからメンバーを削除しても、その記録が延々と残る仕様です。このため、メーリングリストの利用期間が長くなるにつれ、メンバーリストがだんだんと太ってきます。
このため、メンバーを更新しようとしたときに、メンバーが登録もしくは削除済みなのかを目視でメンバーリストを点検して把握することが大変になってきました。
あまりに大変なので、自動チェックのWebページをつくりました。
左上のフォームに設定したいメンバーのリスト、左下のフォームに現在のメンバーリスト(設定直前にadmin membersで取得したもの)を入力し、Generateボタンをクリックすると右側にコマンドメールに書くべきコマンドが表示されます。これをメーリングリスト名にctlをつけた宛先にメールすればよい。というものです。
(参考)perlです。
@tg=("taro@foo.com","jiro@bar.com");    #新しいメンバーリスト
@cu=("ichiro@foo.com","jiro@bar.com");  #members で取得した現在のリスト
sub checkAssoc {
    my (@ad)= @_;
    my (%reg)=();
    foreach $ad (@ad) {
            $reg{$ad}=1;
    }
    return %reg;
}
%tg = checkAssoc(@tg);#メアドをキーとする連想配列を作る
%cu = checkAssoc(@cu);
@cmd=();
#----- bye ---- 現在のリストの項目のうち、新しいリストに含まれないものは削除するコマンドを追加
foreach $ad (@cu) {
    next if $tg{$ad};
    push(@cmd,"admin bye $ad\n");
}
#----- add ---- 新しいのリストの項目のうち、現在のリストに含まれないものを追加するコマンドを追加
foreach $ad (@tg) {
    next if $cu{$ad};
    push(@cmd,"admin add $ad\n");
}
$cmd = join('',@cmd); # "admin bye ichiro@foo.com admin add taro@foo.com"
コメント
コメントを投稿