佐藤です。

なにげに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