Ruby - Imap服务器连接在2天后断开连接,即使每25分钟重新连接一次

时间:2014-03-10 07:36:14

标签: ruby imap

我登录IMAP服务器:

imap = Net::IMAP.new("imap.gmail.com")
imap.login("username", "password")
imap.select("inbox")

然后我使用IMAP IDLE来获取邮件。由于imap服务器连接在30分钟后自动断开连接,我每隔25分钟重新连接到IMAP服务器。

这一切正常,直到这种情况持续超过48小时。当我执行 imap.logout

时出现以下错误

错误消息:

IOError closed stream - ["org/jruby/ext/openssl/SSLSocket.java:664:in `syswrite'",
"/opt/jruby-1.7.6/lib/ruby/shared/jopenssl19/openssl/buffering.rb:318:in `do_write'",
"/opt/jruby-1.7.6/lib/ruby/shared/jopenssl19/openssl/buffering.rb:415:in `print'",
/opt/jruby-1.7.6/lib/ruby/1.9/net/imap.rb:1210:in `put_string'", 
"/opt/jruby-1.7.6/lib/ruby/1.9/net/imap.rb:1182:in `send_command'", 
"/opt/jruby-1.7.6/lib/ruby/1.9/monitor.rb:211:in `mon_synchronize'", 
"/opt/jruby-1.7.6/lib/ruby/1.9/monitor.rb:210:in `mon_synchronize'", 
"/opt/jruby-1.7.6/lib/ruby/1.9/net/imap.rb:1177:in `send_command'", 
"/opt/jruby-1.7.6/lib/ruby/1.9/net/imap.rb:352:in `logout'"

imap对象:

#,raw_data =“*确定Gimap已准备好接收来自54.242.66.175的请求v74mb152689693qgv \ r \ n”>,@ mon_owner = nil,@ client_thread =#,@ tagged_response_arrival =#,@ second =#&gt ;,@ sock =#>,@ sync_close = true,@ rbuffer =“”,@ hostname =“”,@ io =#,@ sync = true,@ wbuffer =“RUBY0041 LOGOUTRUBY0042 LOGOUTRUBY0043 LOGOUTRUBY0044 LOGOUTRUBY0045 LOGOUTRUBY0046 LOGOUTRUBY0047 LOGOUTRUBY0048 LOGOUTRUBY0049 LOGOUTRUBY0050 LOGOUTRUBY0051 LOGOUTRUBY0052 LOGOUTRUBY0053 LOGOUTRUBY0054 LOGOUTRUBY0055 LOGOUT“>,@ tagno = 55,@ tagged_responses = {},@ host =”imap.gmail.com“,@ exception = nil,@ usessl = true,@ port = 993,@ tag_prefix = “RUBY”,@ mon_count = 0,@ receiver_thread =#,@ response = {“FLAGS”=> [[:已回答,:已标记,:草稿,:已删除,:已查看,“$ Phishing”,“$ NotPhishing” ]],“确定”=> [#,text =“允许标记。”>,#,text =“UID有效。”>,#,text =“预测下一个UID。”>,#,文字=“”>],“PERMANENTFLAGS”=> [[:已回答,已标记,:草稿,:已删除,:已查看,“$ Phishing”,“$ NotPhishing”,:*]],“UIDVALIDITY”=> [651 870578],“EXISTS”=> [1661],“RECENT”=> [0],“UIDNEXT”=> [1835],“HIGHESTMODSEQ”=> [“288129”],“BYE”=> ; [#]},@ response_handlers = [],@ continuation_request_arrival =#,@ second =#>,@ receiver_thread_terminating = false,@ logout_command_tag =“RUBY0040”,@ debug_output_bol = true,@ parser =#true ,: Flagged = > true,:Draft => true,:Deleted => true,:Seen => true,:* => true},@ token = nil,@ str =“RUBY0040 OK 73 good day(Success) \ r \ n“>,@ mon_mutex =#,@ idle_done_cond =#,@ second =#>>

任何人都能解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

如果在调用logout方法时已关闭与Imap服务器的连接,则会收到此错误。

您可以通过在拨打电话之前检查连接来防止这种情况

imap.logout unless imap.disconnected?

希望这会对你有所帮助。