私はRubyの超初心者であり、IMAPライブラリで遊んでいます。以下のプログラムは動作するようですが、すべてのメッセージがロードされるまで永遠に続きます。私は10を表示したいだけのように、出力をX個のメッセージに制限する方法はありますか?私はそれが何らかの「封筒なら」と思っていますが、そこに置くべきものは分かりません。ありがとう!私は、新しい質問をするが、以下からアイデア「SINCE」、どのように私はすべてのメール(配列の要素)フェッチの回数を表示していました使用する必要があり、ここで場合、または適切な場合Ruby IMAPで条件付きで使用する方法
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
わかりませんか?
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を置きます。私はどのようにa)リストされたすべての電子メールの最後にのみ結果を入れ、b)配列内の要素の真の数を見つけるか?
OK、第二部を考え出し:開始位置を指定(ここでは0です)
imap.search(["SEEN"]).slice(0, 10).each do |message_id|
...
end
最初のパラメータ、および:あなたが唯一のN個の結果を得るためにslice
を使用することができます
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
検索は配列を返しているだけなので、各要素を反復するのではなく、最初の10個の要素を見ることができます。 –