Я супер-новичок в Ruby и играю с библиотекой IMAP. Программа, показанная ниже, работает, но работает до тех пор, пока не будут загружены все сообщения. Как бы я ограничил вывод количеством сообщений X, как если бы я хотел показать только 10? Я представляю, что это что-то вроде «если конверт =» - но не знаю, что туда положить. Спасибо!
require 'net/imap'
imap = Net::IMAP.new('mail.domain.com')
imap.authenticate('LOGIN', ' ', ' ')
imap.examine('INBOX')
imap.search(["SEEN"]).each do |message_id|
envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
puts "#{envelope.from[0].name}: \t#{envelope.subject}"
end
Не уверен, если уместно здесь или мне следует задать новый вопрос, но, используя идею "SINCE" снизу, как мне отобразить количество всех полученных писем (элементов в массиве)?
imap.examine('INBOX')
imap.search(["SINCE", "17-Feb-2012"]).each do |message_id|
envelope = imap.fetch(message_id, "ENVELOPE")[0].attr["ENVELOPE"]
puts "#{envelope.from[0].name}: \t#{envelope.subject}"
puts "#{envelope.count}"
end
Выше ставится число 10 после каждой строки, независимо от количества возвращенных писем. Как бы я а) только поместил результат в конец всех перечисленных писем и б) нашел истинное количество элементов в массиве?
ОК, разобрался со второй частью:
require 'net/imap'
imap = Net::IMAP.new('mail.domain.com')
imap.authenticate('LOGIN', 'username', 'password')
imap.examine('INBOX')
mail_count = imap.search(["SINCE", "20-Feb-2012"])
puts mail_count.count