2004.12.29
メーリングリストを開設すると、MLの総合ホームページなどから加入、脱退などが出来る方が便利でかっこ良く、一般の読者にも簡便で好まれる。
このためには、登録希望者に名前とメールアドレスを入れさせて、majordomoにsubscribeメールを出すようにすれば良いので比較的簡単に作ることができる。
ところが、自前で作らなくてもMajordomoにはそのツールも同梱されているので、これを利用する。
packageで入れるとツールは無いが、portsを入れていると
/usr/ports/mail/majordomo/work/majordomo-1.94.5/md-sub/ にあるmd-sub.cgiを使う。
(1) md-sub.cgiの設定
このmd-sub.cgiを/web/cgi-binにコピーする。
また、cgi-lib.plがシステムにない場合は/usr/local/lib/perl5/site_perl/5.8.5/machにコピーしていれておく。
そして、md-sub.cgiを修正。
# cd /web/cgi-bin/
# vi md-sub.cgi
#!/usr/local/gnu/bin/perl を #!/usr/local/bin/perl に
$cgiloc = "http://hogehoge/cgi-bin/md-sub.cgi";
運用するサーバmd-sub.cgiの場所(URL)を指定します。
$listsdb = "/usr/local/mail/.md-subrc";
md-subが使用するdatabaseの位置
$logfile = "/usr/local/mail/md-sub.log";
md-subのlogの位置
#$sendmail = "|/usr/lib/sendmail -t";
$sendmail = "|/bin/cat - > /tmp/test.out";
最初は/tmp/test.outに結果を書き出させます。
(2) データーベスを作る
# mkdir /usr/local/mail
# cd /usr/local/mail
ここで .md-subrcファイルを以下を参考に作る。
musicml majordomo@greatcircle.com
info musicml http://greatcircle.com/musicml/info.html
help webmaster@greatcircle.com
default musicml
test majordomo@greatcircle.com
pcmlist majordomo@greatcircle.com
info pcmlist http://greatcircle.com/pcmlist/info.html
そして、
# /web/cgi-bin/md-sub.cgi -C /usr/local/mail/.md-subrc
とすれば、.md-subrc.dbが作られる。
あとは、Browserで http://hogehoge/cgi-bin/md-sub.cgiでアクセスすると、入力画面が現れる。 入力してボタンを押し /tmp/test.outに期待通りの出力が得られれば、
$sendmail = "|/bin/cat - > /tmp/test.out"; を
$sendmail = "|/usr/lib/sendmail -t"; に変える。
(3) 日本語化
<
blockquote>
日本語化パッチは無いので自分で訳す。
参考までに、私が作ったファイルを下に載せておく。
日本語化md-sub.cgi
日本国内でMLを開くときに、メッセージなどが日本語になっている方が便利である。
Majordomoはperlで書かれているのでmajordomoの中のメッセージ部分を自分で日本語訳しながら書き換えられるが、世の中には親切な人達がいらっしゃって、高知大学の菊地さんが作られたのを「Nobさん」が改良して日本語化パッチを公開されている。→ 遂にリンク先がなくなりました。
ダウンロード:1.94.5用パッチ → 遂にリンク先がなくなりました。
これを使って、majordomoにpatchを当てます。
$ su
# su - majordom
$ ls (majordomoのあるディレクトリーであることを確認)
$ zcat majordomo-1.94.5-jp.patch.gz | patch
これで、メッセージ文は日本語化されたが、EUCコードであるためメールすると文字が読めないので、sendmailに送り込む前にjis(ISO-2022)にする。
このために、jsendmailの名前で以下の内容のスクリプトファイルを作る。
#! /bin/sh
/usr/local/bin/nkf -j | /usr/sbin/sendmail $*
そして、chmod +x jsendmailでjsendmailに実行権限を与えて、majordomo.cfの
$sendmail_commandを以下のように書き換えます。
$sendmail_command = "/usr/sbin/sendmail"; を
$sendmail_command = "/usr/local/majordomo/jsendmail"; とします。
これで、目出度し目出度し。 応答が日本文になります。
2004.12.15
FreeBSDはDefaultでsendmailがインストールされる。
もう今時はsendmailより新しいpostfixとかqmailなどを使うべきなのかもしれにが、体に染み付いた習慣から抜けられなくて、sendmailをそのまま使うことになっている。
以前はsendmailの設定ファイルであるsendmail.cfを作るのにxxxxx.defなどという設定ファイルの予備ファイルのようなものを作って、sendmail.cf作成用専用コンパイラーでsendmail.cfを作っていた。 が、最近はfreebsd2.mc等と名付けられたmc fileのサンプルがあるので、これをコピーして適当な名前で例えばmycomputer.mcなどと変えて、編集の後makeすればmycomuter.cfが出来上がるのでsendmail.cfに名前を変えて出来あがりとなる。
しかし、大概は最初からあるsendmai.cfで十分で、次に述べるaccessとlocal-host-namesのファイルと他のサーバからの中継を許す場合のみrelay-domainsのファイルを作る。
1.access
cyberspammer.com 550 We don't accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
myhome.mydomain.com RELAY
10.77.14. RELAY
のように記述しrootになって
su-2.05b# makemap hash /etc/mail/access < /etc/mail/access
とすると、access.dbが出来上がる。
2. local-host-names
本来のホスト名と別名でも受けたい場合は次のように2つ書いて置く。
myhome.mydomai.com
another.name.co.jp
3. relay-domains
リレーを許してあげるドメインがあれば、relay-domainsの名前のファイルを
作り許可するドメイン名を列記しておけばよい。
最後に忘れてならないのは/etc/rc.confに
sendmail_enable=”YES”
の一行を追加し、rebootすれば立ち上がる。
1. インストール
Majordomoのインストールは今回portsでmake installで一発で入れた。
手抜きだが便利です。
# cd /usr/ports/mail/majordomo
# make install clean
手動だとMajordomoが使うユーザ名やグループ名を登録したり、sendmail.cfで指定されているsendmailの位置が/usr/sbin/senmailで無く手直しが必要など、結構手間取るのだが、portsだと、環境に合わせてmakeしてくれるので手間がかからない。
問題は、sequencerを使ってメールのタイトルに[abcd: 0123]のようなシーケンスを振ろうとすると返信で[abcd:0124]Re:[abcd:0123]・・・・ のようにシーケンス番号が重なってしまうことである。
これはsequencerの153行目あたりを自称nob & tamotsuさんがアドバイスしてくれているように以下の修正をして重なりを防止する。
ただし、outlook expressはメールヘッダーがMIMEの規定に違反していて、重なりを防止できない。
が、昨日outlookで実験したらOKだった。 新しい版数では対処できているのか?
while (<STDIN>) {
+ # by nob & tamotsu
+ if (/^Subject:/) {
+ s/[rR][eE]:.*[([].*d+[)]]/Re:/;
+ s/[rR][eE]:s*[rR][eE]:/Re:/g;
+ s/[rR][eE]:s*[rR][eE]:/Re:/g;
+ }
+
print IN $_;
}
あとは、/usr/local/majordomo/listsにtouch test(ML list名)を作り、touch test.seqでシーケンス番号のためのファイルを作る。 そして
#chown majordom *
#chgrp majordom *
としてグループ、オーナーともにmajordomにしておく。
また、必要ならtest.infoとtest.intoも説明文のファイルとして適当な内容のファイルも作る。
2. aliasesについて
インストールが終わるとメールのaliasesにEntryを追加してnewaliasesコマンドで修正を 反映させる。 以下はaliasesへの追加例。
owner-owner: nakamura
majordomo: "|/usr/local/majordomo/wrapper majordomo"
majordom: majordomo
majordomo-owner: nakamura
owner-majordomo: nakamura
test: "| /usr/local/majordomo/wrapper sequencer -l test -n -h
HOST名 test-going" (上の行から連続して記述)
test-going::include:/usr/local/majordomo/lists/test
owner-test:nakamura
test-request:"|/usr/local/majordomo/wrapper request-answer test"
test-approval:owner-test
test-owner:owner-test
ところで、メールのタイトルにシーケンス番号を付けるsequencerのparameterなんて知らなくて人の真似をしてaliasesに書いていたが、今回調べたら下記のようになっていた。
-A moderate
-a: approve passwd
-d debug
-f: sender 指定
-h: ML Hostname 指定
-I: restrict_post
-l: Mailing List の名前
-m: mailer option
-M: max length
-n seq を使って番号管理をする
-N Archive の写しを作る + -n 機械
-p: precedence
-R purge Received
-r: Reply-To: を使う。引数に宛先を書く( host名 付)
: が付いているのは 後に更に引数を付けるもの。
(3) メーリングリストの作成
majordomo宛てに
subscribe test
end
の内容のメールを送り、testに登録する。
登録の手続きのメールが送られてくるので、その手順に従って作業(authorize)を進める。
/usr/local/majordomo/lists内に作られたtest.configを編集すれば、シーケンス番号の付け方、認証の仕方などが変えられる。
2004.12.11
MHonArcは/usr/ports/www/mhonarcでmake install cleanと入力してインストールする。
1. MHonArcの文字化け対策
MHonArcは出力をEUCにすると行頭が改行コードの変換ミスで”(B “のようなものが付く。
以前 iso2022jp.pl をPatchして直したが、どこを直したか忘れている。
/usr/local/share/MHonArcにある iso2022jp.pl を見てみる。
以前より大分変わっていて対処しようとした後が見える。
115行目あたりに
$ret =~ s/^\033\(B//; が見つかる。
行頭にESCに続いて(Bが現れたら削除しようと言うもので、html化されたものを見たら、これでよさそうだが、うまく行かない。
結局行頭にかかわらずESCに続いて(Bが現れたら削除するように”^”記号を削除して
$ret =~ s/\033(B//; としたらうまく行った。
2. 出力htmlのフォーマットの設定
個々の出力htmlファイルの出力はxxxxx.rcというrc fileで指定する。
設定ファイルの置き場所は/usr/local/lib/MHonArcである。
このファイルで出力htmlのヘッダー部など細かく指定できる。
以下はサンプル。
======================================
<!--コメントはこの形式で書きます -->
<!-- "Resource"には1行で指定するものと -->
<!-- <NAME>データ</NAME>の形式で指定するものがあります -->
<MIMEARGS>
text/plain:default=iso-2022-jp
</MIMEARGS>
<CHARSETCONVERTERS>
plain; iso_2022_jp::str2html; iso2022jp.pl
iso-2022-jp; iso_2022_jp::str2html; iso2022jp.pl
</CHARSETCONVERTERS>
<REVERSE>
<!-- Date index, Thread indexの並び順を指定します -->
<!-- SORT は mailのDate header順-->
<!-- REVERSE は逆順になります-->
<!-- SUBSORT は Subject header順です-->
<TIMEZONES>
JST:9
</TIMEZONES>
<!-- UTC/GMTからの時差を指定します-->
<!-- defaultにJSTはない-->
<EXCS>
reply-to
in-reply-to
sender
Resent
</EXCS>
<!-- mailのheaderで無視するものを指定します -->
<!-- receivedとかX-はdefaultで無視されますので、
必要なものを追加します-->
<!-- Date index あるいは Subject indexの設定 -->
<IDXFNAME>
index.html
</IDXFNAME>
<!-- Date/Subject indexのfile名を指定します -->
<!-- defaultは maillist.htmlになってます-->
<TITLE>
Test
</TITLE>
<!-- Date/Subject indexのタイトル名を指定します -->
<!-- defaultは Mail indexになってます-->
<!-- HTMLのTITLEと、Date/Subject indexの表題になります-->
<IdxPgBegin>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html;
charset=euc-jp">
<link rel="stylesheet" type="text/css" href="../style1.css">
<TITLE>$IDXTITLE$</TITLE>
</HEAD>
<body style="background-color: rgb(240, 255, 255);">
<IMG SRC="../../dog.gif" ALIGN=LEFT>
<H2>$IDXTITLE$</H2>
</IdxPgBegin>
<!-- Date/Subject indexのHTML header部分を指定します -->
<!-- $*****$ は MHonArcのResourceです -->
<!-- $IDXTITLE$ は TITLE resourceで指定した値になります -->
<ListBegin>
[ <A HREF="../../index.html"></A> |
<A HREF="../index.html">Main Index</A> |
<A HREF="$TIDXFNAME$">Thread Index</A> ]
<font icolor="#008b8b"><i>Last updated: $LOCALDATE$</i></FONT>
<BR CLEAR=LEFT>
<HR>
<UL>
</ListBegin>
<!-- Date/Subject indexのmailがリスト表示されるまでの頭の部分を
指定します -->
<!-- $TIDXTITLE$ は TTITLE resourceで指定した値になります -->
<LISTEND>
</UL>
<HR>
[ <A HREF="../../index.html"></A> |
<A HREF="../index.html">Main Index</A> |
<A HREF="$TIDXFNAME$">Thread Index</A> ]
</LISTEND>
<!-- Date/Subject indexのmailがリスト表示された後の部分を指定します -->
<!-- $TIDXTITLE$ は TTITLE resourceで指定した値になります -->
<LiTemplate>
<LI><STRONG>$SUBJECT$</STRONG>
<EM><FONT SIZE="-1" COLOR="#008b8b">$FROM$<
</FONT>
</EM>
</LI>
</LiTemplate>
<!-- Date/Subject indexのmailでのリスト表示の仕方を指定します -->
<!-- Thread indexの設定 -->
<TTITLE>
ml (by thread)
</TTITLE>
<!-- Thread indexのタイトル名を指定します -->
<!-- defaultは Mail Thread indexになってます-->
<TIdxPgBegin>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<link rel="stylesheet" type="text/css" href="../style1.css">
<TITLE>$TIDXTITLE$</TITLE>
</HEAD>
<body style="background-color: rgb(240, 255, 255);">
<IMG SRC="../../dog.gif" ALIGN=LEFT>
<H2>$TIDXTITLE$</H2>
</TIdxPgBegin>
<!-- Thread indexのHTML header部分を指定します -->
<THead>
[ <A HREF="../../index.html">Top Page</A> |
<A HREF="../index.html">Main Index</A> |
<A HREF="$IDXFNAME$">Date Index</A> ]
<BR CLEAR=LEFT>
<HR>
<UL>
</THead>
<!-- Thread indexのmailがリスト表示されるまでの頭の部分を指定します -->
<!-- $IDXTITLE$ は TITLE resourceで指定した値になります -->
<TFoot>
</UL>
<HR>
[ <A HREF="../../index.html">Top Page</A> |
<A HREF="../index.html">Main Index</A> |
<A HREF="$IDXFNAME$">Date Index</A> ]
</TFoot>
<!-- Thread indexのmailがリスト表示された後の部分を指定します -->
<!-- $IDXTITLE$ は TITLE resourceで指定した値になります -->
<!-- 個々のmailの表示 -->
<MsgPgBegin>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<link rel="stylesheet" type="text/css" href="../style1.css">
<TITLE>$SUBJECTNA:72$ </TITLE>
<LINK REV="made" HREF="mailto:$FROMADDR$">
</HEAD>
<BODY BGCOLOR="#faf0e6">
</MsgPgBegin>
<!-- mailの頭の部分を指定します -->