- (注)ezmlmコマンドがうまく実行でき
ない場合はPATH が通ってない可能性があります. この場合, PATH を通すかコ
マンドの前に/usr/local/bin/ezmlm/を付
けて下さい。
- このコンテンツに記載されている DIR, DOT,
hoge-MLNAME, HOST というパラメータの意味はメーリングリストの作り方 に記載されている意
味と同じです.
1. Subject 行にprefix をつける
メールヘッダの Subject 行(件名)にメーリングリスト名と通し番号(prefix)をつけたい場合はメーリングリスト作成時に ezmlm-make の[option] f を付けます.
$ ezmlm-make -f DIR DOT hoge-MLNAME HOST
とすることによって
DIR に prefix ファイルが
作成されます. prefix ファイルを
[hoge-MLNAME] -> [hoge-MLNAME #]
と "#" をつけることによってメールヘッダの Subject 行に 通し番号がつきます.
見え方は以下のとおりです.
Subject: [hoge-MLNAME 29] …
2. さらに上手な通し番号の付け方
上記のように行えば通し番号が Subject 行につく. しかし返信メールを出すと
Subject: Re: [hoge-MLNAME 29] …
というように綺麗に表示されません.これを
Subject: [epnetfan-ml 30]…
と表示させる方法についてこれから述べます.
以下はユーザ epnetfan のメーリングリストの例です.
各ユーザは値を適宜替えて同じように試してみて下さい.
2-1. DOT を編集する
DOT の
|/usr/local/bin/ezmlm/ezmlm-send '/home/hoge/DIR'
行をコメントアウト(# を行頭につける)します. そのかわり
|/home/hoge/prefix.pl hoge-MLNAME '/home/hoge/number' |/usr/local/bin/ezmlm/ezmlm-send '/home/hoge/DIR'
というような行を付け加えます(改行なしの一行で).
prefix.pl: | Subject 行を編集するためのスクリプト(最後の付録参照) |
number: | メーリングリストの通し番号が書かれたファイル |
2-2. 使っているメーリングリストの通し番号に合わせて numbur ファイルを書き込む
メーリングリスト管理ディレクトリ DIR の num ファイルの中身は
##:**
というようにコロンをはさんでふたつの数字が記されています.
そのうち ## の数字を number ファイルの中身に記入します.
以上により Subject 行に美しく通し番号をつけることができます.
付録
#!/usr/bin/perl
#
# This is a pert of the Dongury Perl library.
# Copyright (C) 1999 Dongury Entertainment Corporation
# All rights reserved.
#
# Based on the program written by Kyoma TAKAHASHI.
# Many thanks for his advice!
#
# prefix.pl ver 0.3.6
#
########################################################################
$UseLock = 1; # True : 1, False : 0
$FormatIndex = 4; # Index の桁数
########################################################################
sub lock_file {
local(*FILE) = @_;
if ($UseLock) {
eval("flock(FILE, 2)");
if ($@) {
return 0;
}
}
return 1;
}
sub unlock_file {
local(*FILE) = @_;
if ($UseLock) {
eval("flock(FILE, 8)");
}
}
sub increment {
my ($path) = @_;
local $num;
open(INDEX, "+<" . "$path") or return 0;
if (!&lock_file(INDEX)) {
close(INDEX);
return 0;
}
chop ($num = <INDEX>);
$num += 1;
seek(INDEX, 0, 0);
print INDEX "$num\n";
&unlock_file(INDEX);
close(INDEX);
return $num;
}
sub main {
my ($prefix, $index, $result);
shift; $prefix = $ARGV[0];
if (-e $ARGV[1]) {
$index = &increment($ARGV[1]);
}
if ($index) {
$index = sprintf('%.' . $FormatIndex . 'd', $index);
}
else
{
$index = "" unless $index;
}
while (<STDIN>) {
chop;
if (s/^Subject:\s//) {
s/((\|\s|RE):\s)+/Re: /gi;
s/^\[$prefix\s?\d+\]\s*//;
s/Re:\s\[$prefix\s?(\d+)\]\s*/Re:[$1] /g;
foreach $s (split) {
if ($s =~ /Re:\[\d+\]/ and $pre =~ /Re:\[\d+\]/) {
$pre = $s;
$s =~ s/Re://g if (($s =~ /Re:\[/) && (!$` or $` =~ /(Re:)+/));
$result .= $s;
next;
}
$pre = $s; $result .= " $s";
}
print "Subject: [$prefix $index]" . $result . "\n";
last;
}
print; print "\n";
}
print <STDIN>;
exit(0);
}
&main;