From: kikutani@... Date: 1999-05-04T23:20:42+09:00 Subject: [ruby-list:14130] Re: pop3 via firewall きくたにです。古い話を持ち出しますが、 [ruby-list:13517] で青山さんはおっしゃいました。 : [ruby-list:12956] を引用すると、FWTK への対応はこんな感じのようです。 : : def fw_telnet(host) : ENV['TELNET_GATEWAY'] or raise "please setenv TELNET_GATEWAY." : fw = Telnet.new('Host'=>ENV['TELNET_GATEWAY']) : fw.waitfor(/>\Z/){|c| print c } : fw.print "connect #{host}" : fw : end : : というようなのを用意しておいて、 : : host = Telnet.new('Proxy'=>fw_telnet('foo.bar.co.jp')) : : とか、 : : nif.rb ではこんな感じです。 : : nif = Nifty.new({'id' => 'ID', : 'password' => 'PASSWORD', : 'log' => Time.now.strftime("%Y%m%d.log"), : 'Proxy' => fw_telnet('r2.nifty.ne.jp')}) この新telnet.rbを使って、以下のものを書き直したいんですが、 どうもやりかたがわかりません。 class ProxyPop3 def initialize (pop_proxy, pop_host, pop_port=110, timeout=20) # STDOUT.reopen(open("/dev/null", "w")) @proxy = Telnet.new( {"Host" => pop_proxy, "Timeout" => timeout, "Telnetmode" => FALSE} ) # STDOUT.reopen(stdout) @proxy.cmd({"String" => sprintf("telnet %s %d", pop_host, pop_port), "Match" => /^\+OK/}) @mails = [] end attr("mails") def login(pop_user, pop_pass) @proxy.cmd({"String" => "user " + pop_user, "Match" => /^\+OK/}) @proxy.cmd({"String" => "pass " + pop_pass, "Match" => /^\+OK/}) msgs = @proxy.cmd({"String" => "list", "Match" => /^\./}) nums = msgs.scan(/(\d+)\s+\d+\r\n/).collect{|i| i[0]} nums.each do |n| # I dont know how to delete 1st +OK line and last dot line in a smart way s = @proxy.cmd({"String" => "retr " + n, "Match" => /^\./}).split(/\r\n/) str = [] s.each_with_index do |l, i| unless (i == 0 and l =~ /^\+OK/) or (i == s.size-1 and l =~ /^\./) str << l end end @mails[n.to_i] = str.join("\n") end end def delete(m) i = @mails.index(m) return nil unless i @proxy.cmd({"String" => "DELE " + i.to_s, "Match" => /^\+OK/}) TRUE end def delete_by_idx(i) @proxy.cmd({"String" => "DELE " + i.to_s, "Match" => /^(\+OK|-ERR)/}) TRUE end def logout @proxy.cmd("quit") end end あと、コメントになってる STDOUT.reopen(open("/dev/null", "w")) は、 telnet.rb でSTDOUTに書き出されるメッセージを抑制したいんですが これやると何も返ってこなくなっちゃいます。 こんどできる標準popライブラリでは、火壁ごしの機能も 入れてほしいですね。 -- Kikutani, Makoto kikutani@sprintmail.com