14-6. メ−リングリストとFAX (1) メ−リングリストについて * 本書でのメ−リングリスト利用の目的 自前でメ−リングリストを運用するのはどうしたらいいか。顧客に新製品のお知らせなど、 一斉にメ−ルを送りたい訳である。これだとメ−リングリストというより、ただの同報通 信のメ−ルである。読者は参加せずに、メ−ルを受けるだけというのは、メ−ルマガジン というらしい。プロバイダでこのようなメ−ルマガジン(メ−リングリスト)のサ−ビス をしている所を利用する方が、手っ取り早くていいのでないか。しかし、ざっと調べたみ たところ、自社ドメイン名のメ−ルアドレスで配信してくれるプロバイダはなかった。そ れにユ−ザの追加や削除をするのに、IIJ なんかの例だが、いちいちメ−ルを送ってやる という。Majordomo や fml そうろうの管理しかできない。これでは困る。 銭払ってまで 受けるサ−ビスではない。個人ならまぐまぐという手もあるだろうが、企業ではネ−。 メ−ルを送るユ−ザの数やメ−ルのサイズも問題である。夜中中に全員にメ−ルを配送し 終わるかどうか。次の日までもつれこんでしまうと、こりゃ問題だ。通常のメ−ルに差し 障りが出てしまう。128 Kbps 専用線ならメ−ルのサイズこれこれで、 ユ−ザ数はこれこ れまで。制限を設けて使うようにしなければならない。それ以上になったら、お金をちょ っとばか出して、プロバイダのサ−ビスを利用するかである。あるいは、その前にメ−ル を高速に配信するように sendmail を他の MTA ソフトウェアに変えると。sendmail はそ のままで、配信だけに smtpfeed を使うとかするかである。ともかくフリ−ソフトの fml を、とりあえずインスト−ルしてみることにしよう。しかし、かなりややこしそ。機能が 一杯あって何がなんやらよく分からないというのが第一印象。 * メ−リングリストいろいろ [ sendmail の /etc/aliases を使う ] 簡単には、100や200のユ−ザなら、メ−ルサ−バの /etc/aliases ファイルにエン トリを記述していけばいよい。社内での連絡用のメ−リングリストなんかには、これでい いだろう。include 文で部長のグル−プ、課長のグル−プとか分けると、管理がし易くな り、いいかも知れない。しかし問題は、この登録作業を誰がやるかということである。結 局、これもネットワ−ク管理者の仕事になってしまうのでないか。 [ 自分のパソコンから CC や BCC で送る ] ネットワ−ク管理者に関係なく個人でできる。しかし、これはメ−リングリストではない。 メ−ルのいっせい配信に過ぎない。十人や二十人ぐらいだったからいいが、何百人とかだ と設定者本人も困るし、管理者もこのような事例が増えると困る。あくまでも個人レベル での利用に止めるべきであろう。 [ メ−リングリスト専用のソフトを使う ] フリ−ソフトの Majordomo, fml, LISTSERV, qmail の ezmlm などを使う。ezmlm は使い 易く高速処理ができるとのこと。Cobalt Qube3 に入っているのはMajordomo。distribute というソフトもある。これはメ−ルを保存するとか、連番を付けるとかメ−リングリスト 用の便利なソフト。大量のメ−ルを配信するには sendmail なら smtpfeed を内部で使う、 あるいは qmail を使うとよい。smtpfeed は CF ツ−ルの中村氏が作成した。 [ 有料の同報通知サ−ビスを使う ] 例えば、(株)アイアイジェイメディアコミュニケ−ションズの同報通知サ−ビスというの がある。初期5万円、3千アドレスで半年5万円単位。次が6千、最高9千アドレスであ。 る。電子メ−ルアドレスは xxx@iijnet.or.jp となる。メ−ル配送経路情報の削除、シ− ケンス番号の添付、Reply-To: の添付。メ−ルでメンバ−の登録、削除を行う。発信者は 5人まで指定できる。1998/04 のパンフレットより、現在も内容、料金は変わっていない。 [ 有料のメ−リングリスト・サ−ビスを使う ] アイアイジェイメディアコミュニケ−ションズ( IIJ-MC )のサ−ビス。初期5千円。最高 3千アドレスまでで3万円/年。メ−ルアドレスは xxx@iijnet.or.jp というようになる。 ここでできたメ−リングリストが公開されている。個人のから企業のから、いろいろあっ た。茶道のも1つあったので、試しに説明の返信をもらうててメ−ルを送ってみた。宛先 は request@iijnet.or.jp、本文に info tyanoyu などと記入してメ−ルを送る。 しばら くして案内のメ−ルが返ってきた。 [ フリ−のメ−リングリスト・サ−ビス ] インタ−ネット上の無料のメ−リングリストのサ−ビス。主に個人利用である。一応こう いうのもあるよということで。FreeML、http://www.freeml.com/、これはメ−ルの最後に 広告が入る。eグル−プ http://www.egroups.co.jp/。 WWWでメンバ−登録、削除がで き、気軽にメ−リングリストの設置ができるのが特徴。メ−ルと掲示板機能が合体したよ うな仕組みである。小生が1つ入っているメ−リングリストも、ホ−ムペ−ジの中に幾つ かフォ−ラムがあって投稿する。1日1回、投稿された内容が1本のメ−ルになって来る。 [ QuickML というのが出て来た http://quickml.com/ ] fml のメ−リングリストの検討がちっとも進まない内に、QuickML という簡単にメ−リン グリストを作ったり、消したりできるメ−リングリストのソフトが開発された。社内でち ょっと使うようなメ−リングリストにはいいみたい。日本の人が開発した。どうしてメ− リングリストのソフトは設定がややこしいのという疑問から、自分で作ることになったと いう。Majorodomo も浮気してみようと思ったが、ややこしさは同じぐらいみたい。 [ ASP 形態のメ−ル配信サ−ビスを使う ] Application Service Provider 老舗のメ−ル配信サ−ビスというのがある。トライコ−ン(株) http://www.tricorn.net/ のアウトバ−ンというらしい。ASP 形態で提供する、法人向けのデ−タベ−ス連動型電子 メ−ル配信システムのレンタルサ−ビス。配信先のメ−ルアドレスをDBで管理してくれ る。DBはサ−ビス会社にある。インデックスデジタル(株)、(株)カレンという会社も同 様なサ−ビスをする。これらは単にメ−ルを送るだけというのでなく、積極的にメ−ルを 販売に活用しようという視点がある。Eメ−ル・マ−ケティングという言い方がある。 [ 有料の同報配信ソフトを使う ] パソコン用で、電子メ−ル同報配信ソフト "白やぎさん" というのが、僅かにあったのみ。 14,800 円+税。一度に千通まで送信できるという。 http://www.inac.co.jp/shiroyagi/。 白やぎさん.comという配信サ−ビスもある。初期1万円。1万通までのコ−スで月1万円。 エラ−メ−ルの処理を自動でやってくれる。http://www.yagi3.com/。 * 参考 「Software Design」`21/04、P.140〜148、"fmlによるメ−リングリストの管理"。 > fml の開発者、深町賢一氏の記事。http://www.fml.org/ が深町氏のサイト。 http://www.kt.rim.or.jp/~atsato/ml > メ−リングリスト開設の手引き。ここの人、初心者向けの本も書いている。 「fmlメ−リングリスト管理」2000/06/23, 2,800 円税別、オ−ム社開発局。 > 梅垣まさひろ、寺村綾子 著す。 「ASCII network PRO」 2000/11, 特集1:仕事に活かすメ−ルサ−ビス。メ−ル配信をビ > ジネスに活かすメ−ルマ−ケティング、今すぐ使えるASPサ−ビス大集合。 * fml の検討のあげく `22/07 もうメ−リングリストのソフトを設定するのは止めにする。とうとう挫折しました。もし 設定してもメンバ−の増減を、 小生のとこではメ−ルサ−バである Sun のマシンで作業 するハメになる。これは営業さんなど素人さんには無理で、結局のところ我々ネットワ− ク管理者がめんどうみることになってしまうのは目に見えている。fml のWWWアクセス の画面では、大量のメンバ−を管理するのは難しいと思う。小生とこの場合、顧客への情 報提供のためのメ−ルで数千人になる。 では素人さんに telnet で Sun にアクセスして、 fml のコマンドでメンバ−の追加、削除してもらうか。これも無理だと思う。 そうこうする内に営業さんとこは自分で、適当なソフトを見つけた。我々だとどうしても サ−バタイプのを検討してしまうのだが。 そのソフト、パソコン用で Microsoft Access と連動し、CC や BCC ではなく1通ずつ送るという代物。http://www.newsbit.co.jp/ ニ ュ−スビット(株)が販売している BitMailPro。ダウンロ−ド価格 18,900 円(税込)。 送 信時間をタイマ−予約できる。メ−ル本文や件名などの文字列を自動で挿入できる。なか なかいいでないか。この他、来たメ−ルを分析して自動的にデ−タベ−スを作って行って くれる BitplusPRO 18,900 円、顧客管理デ−タベ−ス BitData 5,250 円もある。 (2) fml ソフトの基本設定 * 準備 fml は Perl をメ−ル処理に使っている。Perl は最新のバ−ジョンの 5.6 を入れること にする。この Perl は、内部で GNU のデ−タベ−スの gdbm を使っている。gdbm の実態 はライブラリの libgdbm.so.2 である。そのままでは # perl -v とやると "ld.so.1: 重 大なエラー: libgdbm.so.2: open に失敗しました" というエラ−が出る。gdbm をインス ト−ルして、# setenv LD_LIBRARY_PATH /usr/local/lib とすれば、その場で perl を実 行することはできる。しかしデ−モン処理のバックグラウンドでは "libgdbm.so.2: open failed" とエラ−になってしまう。Solaris ではライブラリは /usr/lib 内はデフォルト で見るようになっているので、それで対処することにする。 ftp://sunsite.sut.ac.jp/sun-info/solaris-binaries/sparc 6100369 Apr 13 2000 perl.5.6.0.SPARC.Solaris.2.6.pkg.tgz << 6100 Kbytes 37968 Jan 15 2000 GNUgdbm.1.8.0.SPARC.Solaris.2.6.pkg.tgz # /bin/csh; setenv PATH /usr/local/bin:/usr/ccs/bin:$PATH # zcat perl.5.6.0.SPARC.Solaris.2.6.pkg.tgz | tar xvf - # pkgadd -d. perl5 # zcat GNUgdbm.1.8.0.SPARC.Solaris.2.6.pkg.tgz | tar xvf - # pkgadd -d. GNUgdbm # ln -s /usr/local/lib/libgdbm.so.2 /usr/lib/libgdbm.so.2 # /usr/local/bin/perl -v This is perl, v5.6.0 built for sun4-solaris .. Larry Wall * メ−ルストアのホストの設定確認 # hostname /etc/resolv.conf このファイルはなし。 hostB /etc/hosts /etc/sendmail.cf 万能 sendmail.cf です。 ------------------------------------- ---------------- |127.0.0.1 localhost |DDnix.co.jj |192.168.1.1 hostB hostB.nix.co.jj |Dj$w | | | | # ps -ef | grep sendmail root ... /opt/trend/ISADMIN/IScan.adm/bin/IScanHttpd -f /opt/trend/... | ↑幾つか InterScan のデ−モンが走っている。 root ... /etc/iscan/sendmail root ... /etc/iscan/sendmail << InterScanが25番ポ−トでメ−ルを取る。 root ... /usr/lib/sendmail -q1h << これまでの sendmail、8.8.5 静的タイプ。 * ソフトのダウンロ−ド # ftp ftp.fml.org << fmlのソフトをともかくダウンロ−ドする。安定版 ftp> cd pub/fml/stable を取ってくる。毎週のように新しいのが出ている。 ftp> get fml-4.0-stable-20010924.tar.gz 2415652 bytes # groupadd -g 100 fml << fml をインスト−ルするホストでの作業。 fml の # useradd -g 100 -u 100 fml UID, GID は100番以上にすること。 # cat /etc/passwd << 最後にユ−ザ fml が追加されたことを確認する。 | fml:x:100:100::/home/fml:/bin/sh # su fml << fml# はユ−ザ fml で作業していることを示す。 fml# /bin/csh fml# setenv PATH /usr/local/bin:$PATH fml# cd /usr/local/source/fml fml# zcat fml-4.0-stable-20010924.tar.gz | tar xvf - fml# mv fml-4.0-stable-20010924 fml40 fml# ls -F fml-4.0-stable-20010924.tar.gz fml40/ fml# cd fml40;ls -F INSTALL.en@ bin/ drafts/ module/ www/ INSTALL.jp@ cf/ etc/ ntinstall.cmd Makefile contrib/ libexec/ sbin/ README.en@ databases/ makefml src/ README.jp@ doc/ messages/ sys/ ↑ 4 Mbyte もある。消してもよい。du -k で見たら doc 以下 5498 Kbyte あった。 fm40 全体は 10762 Kbyte。/usr/local/fml の doc は 5491 Kbyte あった。 * インスト−ル # mkdir /usr/local/fml << これら2つのディレクトリを作って ユ−ザ、グル−プ # mkdir /var/spool/ml とも fml にし chmod 755 とやる。 fml# cd /usr/local/fml fml# perl makefml install | DOMAIN NAME [nix.co.jj] << よければ [Return] キ−。 FQDN [hostB.nix.co.jj] << EXEC FILES DIRECTORY [/usr/local/fml] << TOP LEVEL ML DIRECTORY [/var/spool/ml] << Language (Japanese or English) [Japanese] << TimeZone (TZ: e.g. +0900, -0300) [+0900] << | ---Install the Fml system to /usr/local/fml. (y/n) [n] y << ここは y を指定。 fml# ./makefml newml intra << /var と /var/spool が group writable とワ−ニング | が出た。一応念のため、 後から # chmod g-w /var と done. # chmod g-w /var/spool をやった。 /var/spool/ml/intra/aliases ---------------------------------------------------- |intra: :include:/var/spool/ml/intra/include |intra-ctl: :include:/var/spool/ml/intra/include-ctl |intra-request: intra-admin |intra-admin: fml |owner-intra: fml |owner-intra-ctl: fml /etc/mail/aliases << 変更する前にバックアップを取って置こう。 ---------------------- |nobody: /dev/null |Postmaster: katou |MAILER-DAEMON: katou |root: katou | | *** /etc/sendmai.cf はこれまでのまま *** | | |最後に /var/spool/ml/intra/aliases の中身を記入する # newaliases /etc/mail/aliases: 30 aliases, longest 154 bytes, 1912 bytes total * とりあえずテストする fml# ./makefml add intra katou@nix.co.jj << intra という ML にユ−ザ katou を DO "add katou@nix.co.jj" for intra mailing list. 加える。 done. fml# /usr/ucb/mail -v intra@nix.co.jj << とりあえずユ−ザ fml のままで送っ Subject: 333 てみる。 sss . これもログである。 送信終了 ↓ fml# intra@nix.co.jj... aliased to :include:/var/spool/ml/intra/include :include:/var/spool/ml/intra/include... including file /var/spool/ml/intra/include /var/spool/ml/intra/include: line 1: sending to "|/usr/local/fml/fml.pl /var/spool/ml/intra " "|/usr/local/fml/fml.pl /var/spool/ml/intra "... Connecting to prog... "|/usr/local/fml/fml.pl /var/spool/ml/intra "... Sent ユ−ザ fml はインスト−ルするためのアカウントで、ここでは intra という ML のメン バ−にはしていない。送ったメ−ルはどこにも届かない。/var/mail ディレクトリに fml という未配送のメ−ルが残る。このような内容になっていたら、fml は正常に働いている。 fml# cat /var/mail/fml From intra-admin@nix.co.jj Thu Sep 27 11:20:48 2001 | NOT MEMBER article from fml | From intra-admin@nix.co.jj Thu Sep 27 11:20:50 2001 | あなたはこのメーリングリスト のメンバーではありません。 | * INDY でユ−ザ katou で試してみる indy% Mail -v intra@nix.co.jj Subject: test_intra こんにちは . EOT intra@nix.co.jj... Connecting to mail via smtp... 220-InterScan Version 3.5-Build_SOL_1044 $Date: 04/20/2000 16:23:0044$: Ready 220 hostB.nix.co.jj ESMTP Sendmail 8.8.5/nix.1.0 ready at Mon, 1 Oct 2001..(JST) | INDY の Zmail で届いたメ−ルを見る --------------------------------------- |From: katou *** 発信者は katou であることに注意 *** |Date: Mon Jul 22, 7:36am +0900 |To: intra@nix.co.jj | |Cc: | |Subject: test_intra | |------------------------------------------------------------------------------| |Reply-To: intra@nix.co.jj | |X-ML-Name: intra | |X-Mail-Count: 00007 | |X-MLServer: fml [fml 4.0 STABLE (20010...)]; post only (only members can post)| |X-ML-Info: If you have a question, send e-mail with the body | | "help" (without quotes) to the address intra-ctl@nix.co.jj; | | help= | |Precedence: bulk | |Lines: 6 | |List-Id: intra.nix.co.jj | |List-Software: fml [fml 4.0 STABLE (20010924/4.0.3_ALPHA)] | |List-Post: | |List-Owner: | |List-Help: | |List-Unsubscribe: | | | |こんにちは | -------------------------------------------------------------------------------- (3) fml の CGI の設定 * sendmail.cf と cgi-bin の準備 /etc/sendmail.cf << 万能 sendmail.cf です。 ----------------------------------------------- |#OA/etc/mail/aliases |OA/etc/mail/aliases, /var/spool/ml/etc/aliases | | |#T root daemon uucp |T root daemon fml # newaliases /etc/mail/aliases: 30 aliases, longest 154 bytes, 1912 bytes total /var/spool/ml/etc/aliases: 6 aliases, longest 40 bytes, 160 bytes total # cat /etc/passwd fml:x:100:100::/usr/people/fml:/bin/sh << /usr/people/fml を作る。 # cat /etc/group fml::100: # cd /usr/people << cgi-bin プログラムを置く所を作る。 # mkdir fml; chown fml fml; chgrp fml fml fml# mkdir public_html * Apache の準備 # cd /usr/local/source/apache_1.3.9 # ./configure --enable-suexec --suexec-caller=nobpdy Configuring for Apache, Version 1.3.9 | /usr/local/apache/conf/httpd.conf 関係するところのみ記述 ---------------------------------- |ServerType standalone |Port 80 |User nobody |Group nobody |ServerAdmin katou@nix.co.jj |ServerName hostB |DocumentRoot "/usr/local/apache/htdocs" | |UserDir public_html ここの5行で、ユ−ザ用のディレク | トリでも cgiプログラムを実行でき | AllowOverride FileInfo AuthConfig Limit るようにする。 | Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI | | |HostnameLookups Off |ErrorLog /usr/local/apache/logs/error_log |AddHandler cgi-script .cgi ここコメントアウトする。 # cd /usr/local/apche/bin # ./apachectl start << /usr/local/apache/conf/httpd.conf を見る。 # tail /usr/local/apache/logs/error_log | ... [notice] Apache/1.3.9 (Unix) configured -- resuming normal operations ... [notice] suEXEC mechanism enabled (wrapper: /usr/local/apache/bin/suexec) * fml 用 CGI スクリプトのインスト−ル fml# cd /usr/local/fml fml# ./makefml admin.cgi config <<< makefml --- FML CGI Configuration Interface --- >>> 0 END 1 USE_MOD_SSL YES 2 REAL_CGI_PATH /usr/local/fml/www/share/cgi-bin/fml 3 CGI_AUTHDB_DIR /usr/local/fml/www/authdb 4 CHANGE PASSWORD 5 REMAKE CGI SCRIPTS 6 MTA sendmail 7 HOW TO UPDATE ALIAS newaliases which ? (0-7) [0] 0 CGI configuration is saved in /usr/local/fml/.fml/cgi.conf Q: Can I recreate cgi scripts? (y/n) [n] y done. fml# 先ず 1 を選んで n を入れ、SSL は使わないとする。 次は 2 を選んで /usr/people/fml/public_html/cgi-bin/fml と入れる。 次は 4 を選んで user は fml として、パスワ−ドを henomohe と入れる。 次は 5 を選んで CGI スクリプトを作成する。/usr/people/fml/ 下にできる。 # cat /usr/local/fml/www/authdb/admin/htpasswd fml:EW9vJsnryDn6A # ls -a /usr/people/fml/public_html/cgi-bin/fml/admin .htaccess makefml.cgi menubar.cgi newml.cgi index.cgi menu.cgi mlmenu.cgi rmml.cgi * WWWブラウザからのアクセス http://192.168.1.1/~fml/cgi-bin/fml/admin/menu.cgi ユ−ザ fml で、パスワ−ド henomohe で入る。 ML のユ−ザ登録と削除ができる。リストも見ることができる。しかしまだ、あまり使い 勝手がいいとはいえない。一人、二人の追加程度にはいいが。 * インスト−ル後のディレクトリ&ファイル # cd /var/spool/ml;ls -F etc/ intra/ << # makefml newml intra やると intra/ ができた。 # ls -F intra << これはインスト−ル直後の状態です。 Makefile confirm fmlwrapper.h include spool/ aliases crontab guide include-ctl welcome cf deny help include-mead config.ph fmlwrapper.c help-admin objective # ls -F etc aliases aliases.pag fml/ tmp/ aliases.dir crontab/ qmail/ # cd /usr/local/fml; ls -F Configurations@ default_config.ph fml.pl* makefml* jcode.pl bin/ libexec/ cf/ databases/ drafts/ ほか一杯 xxx.pl ファ etc/ module/ sbin/ sys/ www/ doc/ イルがある。 # ls bin Archive.pl cron.pl gen_summary.pl popfml_master.sh Archive.sh daemon.pl inc_via_pop.pl resend.pl anoncvs daily.pl more_secure_cf.pl split_and_msend.pl archive.pl daily_master.sh msend_master.sh spool2html.pl archive.sh dns_check.pl multipart.pl translate.pl base64decode.pl emumail.pl newsyslog.sh weekend-msend.sh base64encode.pl expire.pl passwd.pl cksum.pl fml_local.pl pmail.pl confirmd_master.sh fwix.pl pop2recv.pl # ls -F www MEMO.Japanese cgi-bin/ examples/ share/ Makefile conf/ lib/ template/ authdb/ etc/ sbin/ (4) メ−ルからFAXを送る `22/04 * EWSによるファックス・サ−バ かつて HylaFax というフリ−ソフトを苦心して、INDY に入れて試したことがある。そこ でやや強引なきらいもあるが、せっかくなので、ここにファックス・サ−バの話を入れ込 んでしまいたい。実は sendmail からもファックスを送ることができるのである。 8.8.5 のリリ−スノ−トに既に FlexFAX の文字が見える。sendmail 8.9.1 では Sam Leffler's HylaFAX software の文字が、それに FAX_MAILER_PATH,FAX_MAILER_ARGS,FAX_MAILER_MAX といったパラメ−タが載っている。しかし sendmail、あるいは qmail からファックスを 送る記事というのは、インタ−ネットも含めて雑誌など見たことがない。最新のsendmail でも、まだ実験的な扱いのようである。そもそも、EWSからファックスを送るというの が、今でもあまりなじみがないことである。 かつて検討した時、INDY 用には英語対応の Z-FAX。日本語対応では Sun 用にセイコ−電 子工業の FaxLink があったぐらいである。Windows パソコンには、 ソニ−の VAIO を買 った際、ファックスの送受信ソフトがついてきた。ファックス装置そうろうのビジュアル な絵が出て、面白がって触ってみたものである。 最近では Linux に mgetty+sendfax を 入れての記事を見かける。昨今ではメ−ルが全盛だが、コンピュ−タでファックスを制御 し、つまりファックス・サ−バのソフトを使って、いっせいにファックス送るとか。メ− ルの Subject: の特定な記述からFAXで自動返信するとか、まだまだファックスの利用 価値はある。今一度、ファックスの利用を見直してみたいものである。 * HylaFax の概要 ここでは1995年当時、INDY IRIX 5.3 へインスト−ルを試みた資料から、エッセンス をまとめてみた。モデムは SUNTAC MS288AF を使用した。HylaFAX は Shilicon Graphics のEWSで元々開発されたFAX通信ソフトで、当初は FlexFAXという名称で呼ばれてい た。このソフトは INDY で唯一、いやEWSで唯一、日本語対応可能なフリ−のFAXソ フトだった。Plain Text, PostScript, GIF などおよそあらゆる形式のファイルをFAX することができた。現在は Linuxを初めとして、大方のEWSに対応している。FAXの クライアント・ソフトも GFax という Linux GNOME 用など多数できている。 HylaFAX の 日本語サイトはない、また資料も少ない。http://www.hylafax.org/ を直接見られたい。 INDY 用のオリジナル英語版は簡単にインスト−ルでき、 FAXの送信も問題なくできた。 しかし日本語を送信するには、かなり大変なことだった。文字をFAXのイメ−ジに変換 するのに、英語なら INDY に最初から入っている Xpsview で間に合った。 それが日本語 だと、日本語対応にした Ghostscript が必要になった。かつ Ghostscript を tiff 対応 にもしておく必要があった。これで本文は日本語が出るようになる。後、細かなところで FAX出力部のタグ記入部。これはFAXの上部に付く日付やペ−ジ数などである。この 部分の日本語対応には、C++のソ−スまでいじることになってしまった。そもそもタグ を出さないようにして逃げるとか、だいぶ考えたものである。 * 参考資料など http://www.ipa.go.jp/STC/CHYUSYOU/ipa01.html 1997 年の報告 > IPAの中小企業情報化促進システム研究開発事業として、"インタ−ネットで地域中小企 業の商品紹介・検査・受発注を行う仕組み" の報告がある。ここで HylaFAX 3.0plが用 いられている。マシンは Solaris 2.4 で, CERN httpd 3.0, POSTGRE95 1.0, sendmail, txtps 1.4 ポストスクリプト変換フィルタ, jconv 3.0 漢字コ−ド変換フィルタを使用。 「もっと知りたい INDY! ス−パ−パワ−ガイドブック」 平成7年3月、技術評論社 > おまけ CD-ROM に flexfax-v2.2.2pl1-tar.Z が入っていた。平成7年というと 1995年 である。まだ小生のともダイアルアップでさえ、インタ−ネット接続していなかった。 「UNIX USER」 No.9 SEP.1 1994 > おまけ CD-ROM にFlexFAX 日本語対応パッチ jfaxcover-1.1.tar.gz, v2.2.2.patch-01 textfmt-patch.shar が入っていた。1994 No.7 号では FlexFAX の特集が組まれた。 * インスト−ル ftp.sgi.com:/sgi/fax/binary/hylafax-irix5-v3.0pl0-inst.tar を取ってきて、INDY の インスト−ル専用コマンド inst でインスト−ルした。 % cat /etc/inittab << モデムをシリアル・ポ−トの2番に接続するとした。 t2:23:off:/sbin/getty -N ttyf2 dx_38400 % cat /etc/gettydefs << dx_38400 があることを確認すること。 dx_38400# B38400 # B38400 SANE TAB3 HUPCL #\r\n\n$HOSTNAME login: #dx_38400 % telinit q << INDY では inittab を変更した場合、やっておくこと。 % cd /usr/local/sbin % faxaddmodem << モデムのチェックと設定を自動的にする。 Verifying that your system is setup properly for fax service... Done verifying system setup. Serial port that modem is connected to []? ttyf2 << これ入力した。 | CountryCode: 81 こんなように出て来る。適当にパラメ− AreaCode: 566 タを変更したりする。そして制御ファイ FAXNumber: +81.xxx.xx.xxxx ルは /var/spool/fax/etc/config.ttyf2 LongDistancePrefix: 0 に、この場合できた。小生は、これから InternationalPrefix: 001 ModemResetCmds: AT&F2 をコメントにし DialStringRules: etc/dialrules たり、ModemHardFlowCmd: AT\Q2 に変更 SessionTracing: 11 したり、パルスダイアルの電話のために RingsBeforeAnswer: 1 ModemDialCmd: ATDP%s を追加したりし SpeakerVolume: off た。 また、0発信する場合は ATDP0,%s GettyArgs: "-h %l dx_%s" にするとか。自動設定とはいっても、い LocalIdentifier: +14159657824 ろいろ修正が実際には必要だった。 TagLineFont: etc/lutRS18.pcf TagLineFormat: "From %%l|%c|Page %%p of %%t" MaxRecvPages: 25 | 続く * とりあえずテストしてみる % /usr/local/sbin/faxq -m /dev/ttyf2 << faxq デ−モンを起動する。 % sendfax -d 電話番号 data.ps << FAXを送ってみる。 request id is 3 (group id 3) for host localhost (1 file) % faxstat << ちゃんと送っているか調べる、この表示はOKです。 Server on localhost:FIFO for all modems: Running. Job Modem Destination Time-To-Send Sender Status 3 any +810566921159 katou itunori Being processed % faxstat << 送り終わった状態です。 Server on localhost:FIFO for all modems: Running. * HylaFAX のコマンド % sendfax -d 0電話番号 file.ps 0発信にて内線からファックスを送る。 % sendfax -n -d xxxx file.ps ファックスカバ−をつけない。 % sendfax -m -d xxxx file.ps きれいなFAXを送る。 % sendfax -a 9:00 -d xxxx file.ps 午前9時に送る。 % sendfax -k "now+2hour" file.ps 2時間後までに送信できなかったら中止する。 % sendfax -t 10 file.ps 10回送信を試みる。 % faxstat 送信ジョブの一覧を表示する。 % faxstat -h hostA hostA ノ−ドで faxq デ−モンが稼働している。 % faxrm Job番号 送信待ちのジョブを取り止めにする。 % faxlater 送信待ちのジョブの状態を変更する。 % xxx2tiff < file | sendfax -d xxxx % xxx2ps < file | sendfax -d xxxx faxq デ−モンが稼働していないかおかしい場合、 sendfax コマンドをかけると faxstat で Queue される。その後 faxq を正しく起動させると、電話をかけてFAXを送る。 * 日本語対応 [ プレ−ン・テキスト ] plain text は textfmt というプログラムで PostScript に変換し、FAXの元デ−タに するようになっている。この textfmt は英語版なので、 日本語対応にさせることが必要 である。パッチを当ててコンパイルし直し、できた textfmt を /usr/local/sbin にコピ −する。それに typerules ファイルを以下のように変更する。 これでリュウミン体の日 本語がでる。一般の文書ではリュウミン体がなじみやすいので、普通はこのままでいいだ ろう。"-u -j GothicBBB-Medium-H -p 11 -s %s >%o <%i" にすれば、ゴシック体になる。 /usr/local/lib/fax/typerules の最後ところを -p から -u にして EUC 対応にする ------------------------------------------------------------------------------- |0 byte x ps %F/textfmt -f Courier-Bold -u -p 11 -s %s >%o <%i [ PostScript ファイル ] Ghostscript を tiff 対応にすること。これは "1-2.イントラネット構築の指針" の付録 "Netscape Navigator の設定" を参考のこと。それに Ghostscriptを内部的に使うように、 ps2fax コマンドのリンクを ps2fax.gs に変更すること。 % ls -l で lrwxr-xr-x .. ps2fax -> ps2fax.gs。 [ FAXカバ−(送付案内部) ] /usr/local/lib/fax/faxcover.ps -------------------------------------------------------- |%!PS-Adobe-2.0 EPSF-2.0 << PostScript ファイルの印しです。 |%%BoundingBox: 21 3 588 788 | | |%/drawlogo { |% | << ロゴを表示しないようにする。 |%} def << 消すか % でコメントにすること。 | |/drawtext { |gsave |% 1.4 inch 10.2 inch moveto << オリジナルの状態。 |% /Helvetica-BoldOblique findfont 23 scalefont setfont |% (SiliconGraphics) show |% 1.42 inch 9.95 inch moveto |% /Helvetica-Bold findfont 14 scalefont setfont |% (Computer Systems) show | | 0.8 inch 10.2 inch moveto << 用紙の左に少しよした。 | /Ryumin-Light-EUC-H findfont 23 scalefont setfont | (日丸工業(株)) show << EUCコ−ドを指定のこと。 | 1.05 inch 9.95 inch moveto | /Times-Roman findfont 14 scalefont setfont | (Hinomaru Industry) show |grestore |} def | | |%drawlogo << ロゴを表示しないようにする。 |drawtext | | |/Helvetica-SHOWISO findfont 24 scalefont setfont |95 415 M (Company:) S |/Ryumin-Light-EUC-H findfont 20 scalefont setfont << 日本語フォントを指定する。 |225 415 M () S 225 415 M /to-company IS |/Helvetica-SHOWISO findfont 24 scalefont setfont << すぐに英語フォントに戻す。 |146 373 M (From:) S | | to-company には送信先の会社名が入る。これを日本語で記入したいなら、 その前の行で 日本語フォントを指定する。ただし、日本語を使ったらその後の行で、英語フォントをた だちに指定しなおすこと。これをやっておかないと stack エラ−がおきる。 * FAXカバ−確認用コマンド sendfax コマンドを実行すると、faxq デ−モンから faxsend コマンドが起動される。そ の faxsend の中では、FAXカバ−作成コマンド faxcover と faxcover.ps ファイルか ら、送信時FAXカバ−の xxx.ps ファイルが作成される。faxcover コマンドで、-C を 指定しないと、デフォルトで faxcover.ps を使う。faxcover.ps をコピ−して cover.ps とし、この PostScript ファイルをいろいろいじってみる。qq.ps は実際のFAXカバ− のイメ−ジである。Ghostscript で表示して確認できる。 % faxcover -C cover.ps -f katou -n 022 << ディスプレイにだ−と出てくる。 % faxcover -C cover.ps -f katou -n 022 > qq.ps << リダイレクションする。 % faxcover -C cover.ps -f katou -n 電話番号 -x 西洋情報 -t 山田様 -c hellow -p 2 -r ddd -l sss > qq.ps --------------------------------- | FAX Cover Sheet ※ -l の指定はどこにも出ない。 | | To: 山田様 -t 山田様 |Fax Number: 電話番号 -n 電話番号 | Company: 西洋情報 -x | From: katou -f katou | Re: ddd -r ddd | Send Page: 2 -p 2 | Comments: hellow -c hellow (5) HylaFAX のインスト−ル後 `22/04 * スプ−ルディレクトリとファイル : /var/spool/fax/ recvq/ : 受信したFAXデ−タがたまる。 docq/ : 実際の送信デ−タのスプ−ラ。FAXを送らずにイメ−ジを確認だけした い場合、モデムのモジュラ−・ジャックをはずしておくと PostScript と tiff 形式でFAXイメ−ジが残る。 sendq/ : 送信ジョブの記述。docseqf, grpseqf, seqfというファイルに、FAXを 送った回数が記入される。実際の運用には、cron で消去するなどする。 status/ : 状態メッセ−ジが書き込まれる。ttyf2ファイル名で "Waiting for modem to come ready" と、ここでは書かれていた。 tmp/ : 正常に送信した場合、何もできない。失敗した場合、送信しようとしたデ −タが snd000555 というような PostScript ファイル名でできる。xv コ マンドで表示できる。 etc/ : xferlog というログが残る。xferstats コマンドで見れる。どこに送った か、ちゃんと送ったか、送信時のスピ−ドなどが記録される。相手FAX の名前がシフトJISだとログが化けていた。 info/ : 送信先の電話番号分のファイルができる。log ファイルはずっと積み重な log/ : って残るので、適当に消去すること。xferlog だけチェックすればいい。 xferlog -------------------------------------------------------------------------------- |09/27/95 18:38 SEND ttyf2 1 katou@hostA "+81052xxxyyyy" "052xxxyyyy" 14400 | 1-D MR 2 1:25 "" これは名古屋のコンピュ−タ会社に送った時のログ。相手は G4-FAX を使用していたので 14400 bps で送信したことが分かる。"052xxxyyyy" 部には相手FAXの名前が入る。 こ れはFAXの機械に最初付けられた名前である。この例では単なる電話番号が名前になっ ている。別なところ、社内のFAXに内線で送ったみたところ、シフトJISでカタカナ で書かれていて、文字が化けてしまっていた。info や log ディレクトリにできるファイ ルも同様、FAXの名前のところが化けていた。 * INDY での起動スクリプト /etc/init.d/hylafax ----------------------------------------------------------------- |#! /bin/sh |# VERSION: v3.0pl0113 |# DATE: Fri Apr 14 12:25:52 PDT 1995 |# TARGET: mips-sgi-irix5.2 |# fax server control |# NB: This script assumes faxgetty processes are managed by init | |IS_ON=/etc/chkconfig |DIR=/var/spool/fax |FAXQ=/usr/local/sbin/faxq | |if test ! -x $IS_ON ; then | IS_ON=true |fi |if $IS_ON verbose ; then | ECHO=echo |else # For a quiet startup and shutdown | ECHO=: |fi |case $1 in |'start') | if $IS_ON fax && test -x $FAXQ; then | $ECHO "HylaFAX Queue Manager." | $FAXQ -m /dev/ttyf2 << ただの $FAXQ からこのように修正。 | fi | ;; |'stop') | $DIR/bin/faxquit | ;; |*) | echo "usage: /etc/init.d/hylafax {start|stop}" | ;; |esac * INDY へのインスト−ル内容 % ls /usr/local/bin faxcover faxmail faxrm faxstat fax2ps faxalter sendfax sendpage % ls /usr/local/sbin dialtest faxgetty libfaxserver.so probemodem tsitest faxabort faxinfo libfaxutil.so ps2fax.exe typetest faxaddmodem faxmsg libtiff.so recvstats xferstats faxanswer faxq lockname sgi2fax faxcron faxquit ondelay tagtest faxd.recv faxsend pagesend textfmt % cd /var/spool/fax; ls -F FIFO bin/ docq/ info/ recvq/ status/ FIFO.ttyf2 config/ etc/ log/ sendq/ tmp/ % ls -F bin faxrcvd notify pollrcvd ps2fax.dps transcript mkcover notify.awk ps2fax ps2fax.gs % ls -F etc config cover.templ dialrules.europe dpsprinter.ps hosts config.ttyf2 dialrules dialrules.sf-ba xferlog lutRS18.pcf % ls /usr/local/lib/fax faxcover.ps pagesizes typerules /etc/services /etc/inetd.conf これらのファイルに追加になった部分。 -------------- -------------------------------------------------------------- |fax 4557/tcp |fax stream tcp nowait fax /usr/local/sbin/faxd.recv faxd.recv /etc/passwd と /etc/aliases にも追加された所がある。 * FlexFAX タグ記入制御の検討 ( 検討メモ、何かの参考に ) ・デフォルトの設定状態 LocalIdentifier: +14159657824 TagLineFont: etc/lutRS18.pcf TagLineFormat: "From %%l|%c|Page %%p of %%t" ↓ FAXの縦の上にタグが記入される ------------------------------------------------------------- |From +14159657824 1995 化けた日付の文字 .. JST Page 1 of 1 # date 1995年10月 6日(金曜日) 15時50分18秒 JST date コマンドの表示を記入しようとしているが、 lutRS18.pcf が日本語対応でないので 化けている。 ・TagLineFont を日本語フォントにすればいいのでないか? # cat /usr/lib/X11/fonts/misc/fonts.dir Km14.pcf.Z --mincho-medium-r-normal--14-130-75-75-c-140-jisx0208.1983-0 Km14.pcf.Z を uncompress して、/var/spool/fax/etc にコピ−する。 TagLineFont: etc/Km14.pcf << 変更する TagLineFormat: "From %%l|%c|Page %%p of %%t" ↓ ダメ。タグ全体が全く読めないぐらい化けてしまった。 ※理由、Km14.pcf は -jisx0208.1983-0 の最後の文字が 0 で、JIS コ−ドである。 EUC コ−ドでなければならない。 ・タグの化ける部分は日本語の日付けだから、英語の日付けにしたらどうか? /usr/local/bin/jfax ------------------------ INDY は日本語を使うように初期設定 |#!/bin/csh したので、FAX 送るときだけ英語 |set LANG_ORIG = $LANG モ−ドにしてみる。 |setenv LANG C ↓ |sendfax -m -d 00566921159 data.ps これもダメ!!。タグを出力するとこ |setenv LANG $LANG_ORIG ろでは、日本語のつもりらしい。 最後の行 setenv LANG $LANG_ORIG をとってもダメ。 ・faxsend をシェルスクリプトに置き換えてみたらどうか? # mv faxsend faxsend.eng 名前を変更する /usr/local/sbin/faxsend ------------------------------- |#!/bin/csh |set LANG_ORIG = $LANG |setenv LANG C | |echo $* > /nissei/cad/kaou/tempo | |/usr/local/sbin/faxsend.eng $* |setenv LANG $LANG_ORIG これもダメ。実行モジュ−ルでないと反応しない。 ちゃんと実行すれば tempo ファイル に引き数が記入されるはずである。tempo ファイルはできなかった。 ・タグ部分の確認ユ−ティリティ % tagtest usage: tagtest [-m format] [-o out.tif] [-f font.pcf] input.tif tagtest -o out.tif -f luRS18.pcf -m "From %%l|%c|Page %%p of %%t" fax.tif これはテストのためにある。実際の送信には使われない。タグの入ったイメ−ジを確認す るにはいい。 ・実際の送信に使われるコマンド % ls -lu で最後に使われた時刻を見て調べた faxq,faxsend /var/spool/fax/bin 以下全て、ps2fax.dps も使われている? /var/spool/fax/etc/config, config.ttyf2,hosts,luRS18.pcf * FlexFAX のタグの時刻記入部プログラム ( 検討メモ、何かの参考に ) ・TagLine.c++ の時刻をとってくる部分 sendfax コマンドを実行すると、faxq デ−モンから faxsend が起動される。faxsend コ マンドの中で TagLine.c++ の FaxModem::setupTagLine がタグの情報を作っている。 肝 心なのは下記の strftime で、 locale の設定によって英語にするか日本語にするか決め られる。locale はプログラムの中で setlocale によって設定される。setlocale が使わ れているのは、sendfax.c++ と faxApp.c++ であり、setlocale(LC_TIME, ""); と記述さ れている。これは % printenv で見られるEWS設定の locale を使えということである。 ここら辺りのことを踏まえてプログラムを修正すれば、日本語対応にできるだろう。 class Sys { public: static time_t now(void) { return ::time(0); } 現在の暦時間を得る }; void FaxModem::setupTagLine(const FaxRequest& req) { time_t t = Sys::now(); tm* tm = ::localtime(&t); char line[1024]; ロケ−ル固有のフォ−マットにしたがって時刻を表示。 ::strftime(line, sizeof (line), conf.tagLineFmt, tm); ・テスト・プログラム #include #include #include #include main(void) { setlocale( LC_ALL,"C" ) ; // LC_TIME も含め全部ロケ−ルを英語にする。 // setlocale( LC_TIME,"C" ) ; time_t t ; if ( -1 != time(&t) ) printf( ctime(&t) ) ; tm* tm = ::localtime(&t); // 現地時間になおす char line[1024]; // 時刻を修飾する strftime(line, sizeof (line), "%c", tm); printf( "%s\n",line ) ; } % CC test1.C -o test1 1). setlocale( LC_TIME,"ja_JP.EUC" ); の場合 Wed Oct 11 13:31:27 1995 1995年10月11日(水曜日) 13時31分27秒 JST 2). setlocale( LC_TIME,"C" ); の場合 Wed Oct 11 13:32:23 1995 Wed Oct 11 13:32:23 1995