#!/usr/local/bin/ruby =begin 翻訳魂メールエージェント "MailHon" ver 0.1 2000/10/04 江端智一 E-mail:See http://www.kobore.net/mailAddress.gif  言うまでもありませんが、本ソフトウェアは 無保証です。本ソフトウェア の影響によりどのような事が起ころうとも当方は一切の責任を持ちません。 青山和光様の作品である「翻訳魂の ruby クライアント」 (http://www.omronsoft.co.jp/SP/pcunix/clientpark.html)を使用して、オム ロンソフト社の翻訳サーバソフト「翻訳魂」を、電子メールで利用可能とする メールエージェントです。 +------+ +------+ +-------+ (*1) +------+ +-|ユーザ| [SMTP] |メール| [SMTP] | |[honyaku]|翻訳魂| | | |<------>| |<------>|MailHon|<------->| | | |メーラ| [POP] |サーバ| [POP] | | |サーバ| | +------+ +------+ +-------+ +------+ +------+ (*1)「翻訳魂」用通信プロトコル (http://www.omronsoft.co.jp/SP/download/pcunix/sdk.html#honyaku) MailHonに対してメールを送ると、MailHonがそのメールを翻訳魂サーバに転 送し、翻訳魂サーバから得られた翻訳結果を、メールの送信元ユーザに自動的 に返送します。 MailHonの使用、およびプログラム許諾条項に関しては、 http://www.kobore.net/mailhon.txt を御参照下さい。 =end require "net/pop" require "net/smtp" require "honyaku2" require "kconv" property = <",""タグで囲まれた文章の検知 doc = mailText mailText = "" startPoint = 0 while(1) honyakuHead = doc.index("", startPoint) if (honyakuHead == nil) break end honyakuTail = doc.index("", honyakuHead + 9) if (honyakuTail == nil) break end # 9 -> sizeof("") 10 -> sizeof("") mailText += doc[honyakuHead + 9 .. honyakuTail-1] + ' ' startPoint = honyakuTail + 10 end if (mailText == "") mailText = doc + ' ' # ' 'は、文字化け回避策 end # 行頭空白を全削除 text = mailText mailText = "" text.each do |line| line = line.gsub(/^ */,'') mailText += line end print mailText, "\n" ##### mailText の 英/日文判定 doc = "" if (Kconv::guess(mailText) == 0) # 英文 mode = "ej" else mode = "je" # 日文 mailText = Kconv.toeuc(mailText) mailText.each do |line1| doc += line1.chop! # 改行削除 end mailText = doc end ##### 翻訳作業の実施 begin honRes = "" honyakuSession.trns_divide_sentence(mailText,mode).each() do |sentence| honRes << "\n" << "[原] " << sentence << "\n" if sentence.is_need_trans? honRes << "[訳] " << honyakuSession.translate_one(sentence) << "\n" else honRes << "[訳]" << sentence << "\n" end end rescue HonyakuError # エラーメッセージの作成 honRes = "Error(#{$!}) #{honyakuSession::ERROR_MESSAGE[$!.to_s]}\n" STDERR.print honRes # 管理者へのエラー通知 smtpSession.start() smtpSession.sendmail(honRes,sender,mailHonAdmin); # 終了処理 if honyakuSession honyakuSession.close end exit rescue Errno::ECONNREFUSED # エラーメッセージの作成 honRes = "Error: transration server is not running." STDERR.print honRes # 管理者へのエラー通知 smtpSession.start() smtpSession.sendmail(honRes,sender,mailHonAdmin); # 終了処理 if honyakuSession honyakuSession.close end exit end ##### 翻訳メールヘッダ部の作成 # from行の作成 from = Kconv.tojis(from) from = from.split(//,1).pack('m') ; from = from.chomp # to行の作成 to = to.chomp to = Kconv.tojis(to) # subject行の作成 subj = '[MailHon]' + subj subj = Kconv.tojis(subj) subj = subj.split(//,1).pack('m'); subj = subj.chomp head = <