em-imap
em-imap copied to clipboard
Listener active even after stopped ?
Hi,
require 'em-imap'
EM.run do
client = EM::IMAP.new("imap.gmail.com",993,true)
client.connect.bind! do
client.login("[email protected]","some_gmail_password")
end.bind! do
client.select("INBOX")
end.bind! do
idler = client.idle
idler.listen do |response|
if (response == "stop" rescue nil)
puts "Stop"
idler.stop
idler.callback do
puts "Stop: Callback"
end
elsif (response == "start" rescue nil)
puts "Still Listening"
elsif (response.name == "EXISTS" rescue nil)
puts "Ooh, new emails!"
idler.stop
idler.callback do
# ... process new emails
end
end
end.errback do |e|
puts "Idler recieved an error: #{e}"
end
EM.add_periodic_timer(2) do
idler.receive_event "start"
end
EM.add_timer(6) do
idler.receive_event "stop"
end
end
end
Output:
Still Listening Still Listening Stop Still Listening Stop: Callback Still Listening Still Listening Still Listening Still Listening ... ... ...
Listener is active even after stopped, is this normal behavior ?
Thanks
@ConradIrwin any help ?
Hi @gkrcode,
This was actually intentional. If you're using the listener API you should add a .stopback{}
that cleans up your event senders.
The IDLE
command relies on this behaviour because if it stopped receiving events after you call .stop
, it would never internally hear the "command OK" response in order to be able to .succeed
.
That said, it's pretty confusing... Maybe I should rethink how it is structured.
Thanks @ConradIrwin,
If you're using the listener API you should add a .stopback{} that cleans up your event senders.
I don't get it please share a code sample.
That said, it's pretty confusing... Maybe I should rethink how it is structured.
+1 Looking forward :)
Hi @gkrcode
Have you found the solution for this issue? And one more question to you how can we actually get emails within idle.callback
block? It is giving <struct Net::IMAP::TaggedResponse tag="RUBY0003", name="OK", data=#<struct Net::IMAP::ResponseText code=nil, text="IDLE terminated (Success)">, raw_data="RUBY0003 OK IDLE terminated (Success)\r\n">
but I don't know how can I get actual email from this response?
Hi @nazarhussain , I am no longer using em-imap :(
@gkrcode Do you find any alternate for it? I want to achieve this task, if you can guide me in it. https://github.com/ConradIrwin/em-imap/issues/7