diff --git a/lib/mail/network/retriever_methods/imap.rb b/lib/mail/network/retriever_methods/imap.rb index 76c900152..0b3e30127 100644 --- a/lib/mail/network/retriever_methods/imap.rb +++ b/lib/mail/network/retriever_methods/imap.rb @@ -75,7 +75,10 @@ def find(options=nil, &block) start do |imap| options[:read_only] ? imap.examine(options[:mailbox]) : imap.select(options[:mailbox]) + uids = imap.uid_search(options[:keys], options[:search_charset]) + .to_a # older net-imap may return nil, newer may return ESearchResult struct + .sort # RFC3501 does _not_ require UIDs to be returned in order uids.reverse! if options[:what].to_sym == :last uids = uids.first(options[:count]) if options[:count].is_a?(Integer) uids.reverse! if (options[:what].to_sym == :last && options[:order].to_sym == :asc) ||