module Mail class IMAP require 'net/imap' def initialize(values) self.settings = { :address => "localhost", :port => 110, :user_name => nil, :password => nil, :authentication => nil, :enable_ssl => false }.merge!(values) end attr_accessor :settings def first(options = {}, &block) imap = Net::IMAP.new(settings[:address], settings[:port], settings[:enable_ssl]) imap.login(settings[:user_name], settings[:password]) imap.examine('INBOX') uids = imap.uid_search('ALL') uids = uids[0,options[:count]] if options[:count] uids.each do |message_id| fetch_data = imap.uid_fetch(message_id, ['BODY.PEEK[HEADER]']) fetch_data.each{|fd| yield Mail.new(fd.attr['BODY[HEADER]'])} end end end end