murmur
「E−MAILからFAXへの転送」


1999年6月7日 10:00AM

 E−MAILからFAXへの送信プログラムを開始した。色んな解説書には「mgetty+sendfax」が多く載っていたが、どうもシリアルポートを監視するものらしいので止めた。(そのポートにはダイアルアップサーバとなっているので・・)
 それで、ほんの少ししか情報がない、efaxを採用することにした。それは、インターネット情報に、「簡単なファックスプリントサーバーをつくるには」とあったからである。

「簡単なファックスプリントサーバーをつくるには」

今日は、多くの情報を集めるだけにした。FAX 送受信ソフト efaxのページにも情報があった。


1999年6月10日 2:00PM

 さっそく、始めようとしたが、「簡単なファックスプリントサーバーをつくるには」の通りには簡単には出来なかった。
@CLASSでまず躓く、ドキュメントには 2.0にするように一方的に書かれているが、調べたところ自分のモデムのクラスは2でこの違いは大きい(当然だが、自分のモデムにあわせる)
Aファックスデバイスをmknodで作成する方法の通りに行いテストをしてみたが、うんともすんとも??。それで、シンポリックリンクをしているmodemにするも動かず、終には、直接デバイス /dev/ttyS0 を指定したらできた。(これだから、素人には難しいのだ)
 後は、トーンかパルスかだから問題なく設定

 さて、その次の難関は、日本語というマルチバイトという大きな壁であった。「FAX送受信ソフト efax」には、日本語化のパッチがあるのでダウンロードしようとしたのだが、サーバーにアクセス出来ず、困った。日本語はむりか・・・・・


1999年6月16日 6:00PM

 efaxをもっと研究して、解決策を求めた。まず、efaxの在処を調べ(/usr/bin/fax)そのスクリプトを解析した。すると、txtファイルのほかに、PSファイル(ポストスクリプト)を扱えるようだったので、PSファイルに変換してみることにした。psconvが標準ツールなので、これを使いPSファイルに変換して、FAX送信をしてみた、バッチリOK!!。複数ページにも対応しているラッキー!!!これで日本語もすんなりFAXできた。(^^;


1999年6月17日 6:00PM

 次に、メールサーバからPOP3でメールを受け取りテキストに変換するプログラム作成である。まあ何処でも実行できるようにJAVAでつくりことにする。TCP/IP 110ポートで簡単にメールサーバにPOP3プロトコルでアクセスできた。
 
コマンド パラメータ 説明
USER ユーザ名 ログイン
PASS パスワード
STAT メッセージ数取得
LAST 取得メッセージ番号
QUIT 終わり

 一応、メッセージを取るところまでは、成功した。Y(^^)Y


1999年6月21日 5:00PM

 ここでも、日本語の問題に遭遇した。メールヘッダの件名:subjectの日本語である。7単位の国が最初に作ったもんだから、8単位の世界はのけもの状態である。UNICODEで設計し直してほしいもんだ、でもそんなことをいってても仕方ないので調べることにした。インターネットを物色してMIME変換を解説してるページを探した。なかなか見つからなかったが、やっと

「メールヘッダの日本語SubjectをISO−2022−JPに変換する方法」
が見つかった、そこの解説を参考にして、JAVAで作成した。4時間ぐらい掛かったちょっとしんどかった、何故なら、JAVAとCとの言語の違いがあるためであった。
 しかし、フィルタ・編集したメイルの内容は、EUCではなく当然ISO−2022−JPであったので、漢字変換をしなければならないことに気づいた。
 漢字変換といえばnkfで 「nkf -e ファイル名」 でOK!!でも、マニュアルを見たら何と何とMIME変換があるではないか・・・・(;; JAVAのコードが徒労になった。
 でも、MIMEとEUC変換のパラメータ順序が大きく影響する。以下のようにパラメータを与える。
 nkf -m -e ファイル名 > 出力ファイル名 MIMEを先に・・・・


1999年6月22日 5:00PM

 さらに、メールのテストをしてみると添付ファイルの処理が、抜けていた。意味不明の文字列をファックスに流すのは、ちと酷である。添付ファイルの名前だけを表示することにした。
 しかし、内容についてはよく分からないので、メイルに添付ファイルを入れてその解析をした。解析によると、Content-Type:multipart/mixedになっていると複合メイルらしいことがわかった、さらにその区分文字列がその次の行に"--------XXXXXXXXXX"という形式であらわされているらしく、区切りの所にはその文字列が入っていた。そこで XXXXXXXX を切り出して区切り文字と比較することにした。
 文字とバイナリファイルとの違いは、Content-Type:のtext/plainで区別できるらしくて、この場合のみメイル分と判断して処理をした。 ふっーこれでやっとJAVAプログラムが完成した。

 残っているのは、時間起動でメイル2ファックスを起動する方法である。(メイルがあるかどうかは、JAVAのコードに、STATとLASTの差分で判断)解説書には、あまり乗せられていない分野である。でも、「分からない時はetcに行け」の格言通り(自分で勝手に作った)etcに行きcronを調べた(cronぐらいは知っていた)、まずcrontabが目に付いた
      6 01 * * * * root run-parts /etc/cron.hourly
      7 02 1 * * * root run-parts /etc/cron.daily
      8 02 2 * * 0 root run-parts /etc/cron.weekly
      9 02 3 1 * * root run-parts /etc/cron.monthly

のように、時間・日・週・月のディレクトリに分けられて、そのディレクトリに含まれているファイルが起動されるしくみであるようだ。それで、hourlyに行きlogcheckを参考に作成した。
    #!/bin/sh
    /home/java/fax/GMAIL userid passwd telno <-は作ったコマンド

1時間単位に起動してくれて、うまくファックス送信できた。(^o^)


(無断転写を禁ずる、参考にならないと思うが・・・)