在ruby中支持IMAP IDLE

9 ruby imap ruby-on-rails

好吧,我已经好几个小时了.我认为带有ruby 1.9的net/imap.rb支持idle命令,但还没有.

任何人都可以帮我实现吗?从这里开始,我会这样做:

class Net::IMAP
  def idle
    cmd = "IDLE"
    synchronize do
      tag = generate_tag
      put_string(tag + " " + cmd)
      put_string(CRLF)
    end
  end

  def done
    cmd = "DONE"
    synchronize do
      put_string(cmd)
      put_string(CRLF)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但imap.idle只是返回零.

Pet*_*ter 8

我遇到了这个老问题,想自己解决.原来的提问者已经消失了 - 哦.

以下是如何使用IMAP闲置Ruby(这非常酷).这使用原始问题中的引用块和此处的文档.

imap = Net::IMAP.new SERVER, :ssl => true
imap.login USERNAME, PW
imap.select 'INBOX'

imap.add_response_handler do |resp|
  # modify this to do something more interesting.
  # called every time a response arrives from the server.
  if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
    puts "Mailbox now has #{resp.data} messages"
  end
end

imap.idle  # necessary to tell the server to start forwarding requests.
Run Code Online (Sandbox Code Playgroud)


Bar*_*cat 1

你确定它不起作用吗?您是否查看过它通过套接字发送的字符串?

经过一番挖掘后,除非启用了调试,否则 put_string 看起来会返回 nil,这就是 imap.idle 返回 nil 的原因。

因此,您的空闲方法可能会很好地工作,因为它不会抛出错误。

这有助于解释这种行为吗?

如果你想使用调试,请使用Net::IMAP.debug = true