From: "佐藤 大輔" Date: 2000-07-12T12:18:31+09:00 Subject: [ruby-list:23805] net/smtp 佐藤です。 なにげにWanderlustのキューを見てメールを送るツールというのを書いていたの ですが、 [densuke@yuzu densuke]$ ruby mread.rb /usr/lib/ruby/1.4/net/smtp.rb:117:in `do_start': undefined method \ `gethostname' for Net::Socket:Class (NameError) from /usr/lib/ruby/1.4/net/protocol.rb:166:in `start' from /usr/lib/ruby/1.4/net/protocol.rb:76:in `start' from mread.rb:16 という形で停止しています。 SMTP.start('localhost', 25) do |smtp| にて、gethostnameメソッドが呼べなくなっているのが原因のようです。 ソースコード(1.4.5)のext/socketの中を読むと、gethostnameが特異メソッド になっていました。どうやってコールすればいいのでしょう。 やりかけのコードのため、動くかはともかくとして、現状のソースを入れておき ます。 #!/usr/bin/ruby require 'mailread' require 'socket' require 'net/smtp' include Net QUEUEDIR="~/Mail/queue" queue = File.expand_path(QUEUEDIR) Dir.chdir(queue) list = Dir["[0-9]*"].sort do |a, b| a.to_i <=> b.to_i end SMTP.start('localhost', 25) do |smtp| list.each do |item| print "sending #{item}..." m = Mail.new(item) from = m.header["From"] tmp_to = [] tmp_to.push(m.header["To"]) tmp_to.push(m.header["Cc"]) if m.header.include?("Cc") tmp_to.push(m.header["Bcc"]) if m.header.include?("Bcc") tmp_to.flatten! to = [] tmp_to.each do |item| to.push(item.split(/\s*,\s*/)) end end $stdout.flush smtp.ready(from, to) do |adapter| open(item).each do |line| adapter.write line end end print "OK.\n" end -- みらいちゃんを愛する人に悪い人はいません(c)おかのまりも 「みらいちゃん」って誰?な方は http://www.wdic.org で検索だだだ 佐藤 大輔/densuke@ga2.so-net.ne.jp