Как ограничить использование условных с Ruby IMAP - PullRequest
0 голосов
/ 21 февраля 2012

Я супер-новичок в 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

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Вы можете использовать slice, чтобы получить только N результатов:

imap.search(["SEEN"]).slice(0, 10).each do |message_id|
  ...
end

Первый параметр (здесь 0) указывает начальную позицию, а второй - общее количество, которое вам нужно.

Примечание: на основе реализации метода поиска IMAP базовый вызов может по-прежнему получать все сообщения с сервера.

0 голосов
/ 21 февраля 2012

imap.search отправляет команду поиска в почтовый ящик, возвращает массив или порядковые номера сообщений.Каждый блок работает на всех из них.Вы также можете попытаться ограничить число результатов поиска, указав некоторые ограничивающие ключи, например SINCE и BEFORE.

imap.search("BEFORE", "30-Jan-2012", "SINCE", "1-Jan-2012") 

ссылка на документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...