 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Reading Mail with IMAP (written by John Wells) | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'net/imap'
conn = Net::IMAP.new('mail.myhost.com', 143)
conn.login('username', 'password')
conn.search(['FROM', 'jabba@huttfoundation.org']).each do |sequence|
    fetch_result = conn.fetch(sequence, 'ENVELOPE')
    envelope = fetch_result[0].attr['ENVELOPE']
    printf("%s - From: %s - To: %s - Subject: %s\n", envelope.date, 
  	   envelope.from[0].name, envelope.to[0].name, envelope.subject)
end | Wed Feb 08 14:07:21 EST 2006 - From: The Hutt Foundation - To: You - Subject: Bwah! Wed Feb 08 11:21:19 EST 2006 - From: The Hutt Foundation - To: You - Subject: Go to do wa IMAP | Error! (Exception?) Here's stdout: Net::IMAP::NoResponseError: incorrect password or account name from /usr/lib/ruby/1.8/net/imap.rb:971:in `get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in `send_command' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in `send_command' from /usr/lib/ruby/1.8/net/imap.rb:374:in `login' from (irb):3 Net::IMAP::BadResponseError: no mailbox selected from /usr/lib/ruby/1.8/net/imap.rb:973:in `get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in `send_command' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in `send_command' from /usr/lib/ruby/1.8/net/imap.rb:1140:in `search_internal' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1136:in `search_internal' from /usr/lib/ruby/1.8/net/imap.rb:675:in `search' from (irb):4 | 
| puts "#{conn.responses["RECENT"]} new messages, #{conn.responses["EXISTS"]} total" | 10 new messages, 1022 total | new messages, total | 
| uids = conn.search(["FROM", "jabba@huttfoundation.org"]).collect do |sequence|
  fetch_result = conn.fetch(sequence, "UID")
  puts "UID: #{fetch_result[0].attr["UID"]}"
end | UID: 203 UID: 206 | Error! (Exception?) Here's stdout: Net::IMAP::BadResponseError: no mailbox selected from /usr/lib/ruby/1.8/net/imap.rb:973:in `get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in `send_command' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in `send_command' from /usr/lib/ruby/1.8/net/imap.rb:1140:in `search_internal' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1136:in `search_internal' from /usr/lib/ruby/1.8/net/imap.rb:675:in `search' from (irb):11 | 
| puts conn.uid_fetch(203, 'BODY[TEXT]')[0].attr['BODY[TEXT]']
class Net::IMAP
  def get_msg_info(msg_sequence_num)
    # code we used above
    fetch_result = fetch(msg_sequence_num, '(UID ENVELOPE)')
    envelope = fetch_result[0].attr['ENVELOPE']
    uid = fetch_result[0].attr['UID']
    info = {'UID'     => uid,
            'Date'    => envelope.date,
            'From'    => envelope.from[0].name,
            'To'      => envelope.to[0].name,
            'Subject' => envelope.subject}
  end
end
conn.search(['BEFORE', '01-Jan-2006', 
             'SINCE', '01-Jan-2000']).each do |sequence|
    conn.get_msg_info(sequence).each {|key, val| puts "#{key}: #{val}" }
end | ... | Net::IMAP::BadResponseError: no mailbox selected from /usr/lib/ruby/1.8/net/imap.rb:973:in `get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in `send_command' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in `send_command' from /usr/lib/ruby/1.8/net/imap.rb:1152:in `fetch_internal' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1150:in `fetch_internal' from /usr/lib/ruby/1.8/net/imap.rb:712:in `uid_fetch' from (irb):15 Net::IMAP::BadResponseError: no mailbox selected from /usr/lib/ruby/1.8/net/imap.rb:973:in `get_tagged_response' from /usr/lib/ruby/1.8/net/imap.rb:1022:in `send_command' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1007:in `send_command' from /usr/lib/ruby/1.8/net/imap.rb:1140:in `search_internal' from /usr/lib/ruby/1.8/monitor.rb:229:in `synchronize' from /usr/lib/ruby/1.8/net/imap.rb:1136:in `search_internal' from /usr/lib/ruby/1.8/net/imap.rb:675:in `search' from (irb):29 |