ruby IMAP STARTTLS意味着自动断开连接?

时间:2014-09-09 15:45:45

标签: ruby imap

我正在尝试编写一个简单的IMAP客户端,它连接到IMAP服务器,该服务器强制执行STARTTLS。 当我执行命令STARTTLS时,服务器连接被删除。另一方面,STARTTLS的文档有点薄,无法确切地知道问题所在。

匿名命令:

1.9.2-p320-railsexpress :001 > require 'net/imap'
 => nil 
1.9.2-p320-railsexpress :002 > imap = Net::IMAP.new('SOME_HOST', 143, false)
 => #<Net::IMAP:0x0000000ba43138 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x0000000ba430e8>, @host="SOME_HOST", @port=143, @tag_prefix="RUBY", @tagno=0, @parser=#<Net::IMAP::ResponseParser:0x0000000ba42be8 @str="* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS LOGINDISABLED] Dovecot ready.\r\n", @pos=110, @lex_state=:EXPR_BEG, @token=nil, @flag_symbols={}>, @sock=#<TCPSocket:fd 9>, @usessl=false, @responses={}, @tagged_responses={}, @response_handlers=[], @tagged_response_arrival=#<MonitorMixin::ConditionVariable:0x0000000ba42ad0 @monitor=#<Net::IMAP:0x0000000ba43138 ...>, @cond=#<ConditionVariable:0x0000000ba42aa8 @waiters=[], @waiters_mutex=#<Mutex:0x0000000ba42a58>>>, @continuation_request_arrival=#<MonitorMixin::ConditionVariable:0x0000000ba42a30 @monitor=#<Net::IMAP:0x0000000ba43138 ...>, @cond=#<ConditionVariable:0x0000000ba42a08 @waiters=[], @waiters_mutex=#<Mutex:0x0000000ba429b8>>>, @idle_done_cond=nil, @logout_command_tag=nil, @debug_output_bol=true, @exception=nil, @greeting=#<struct Net::IMAP::UntaggedResponse name="OK", data=#<struct Net::IMAP::ResponseText code=#<struct Net::IMAP::ResponseCode name="CAPABILITY", data="IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS LOGINDISABLED">, text=" Dovecot ready.">, raw_data="* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS LOGINDISABLED] Dovecot ready.\r\n">, @client_thread=#<Thread:0x007f416ed31420 run>, @receiver_thread=#<Thread:0x0000000ba41b58 run>> 
1.9.2-p320-railsexpress :004 >   imap.starttls
 => #<struct Net::IMAP::TaggedResponse tag="RUBY0001", name="OK", data=#<struct Net::IMAP::ResponseText code=nil, text="Begin TLS negotiation now.">, raw_data="RUBY0001 OK Begin TLS negotiation now.\r\n"> 
1.9.2-p320-railsexpress :006 >   imap.disconnected?
 => true 

我在2.0.0-p353-railsexpress中得到了相同的行为。

这是正确的行为,如果是,如何正确使用ruby与STARTTLS IMAP服务器?

感谢和问候!

1 个答案:

答案 0 :(得分:0)

客户端和服务器都正常工作,直到客户端应该启动TLS协商。在那之后,IMAP层不知道发生了什么。您将在某处启用TLS调试日志记录或嗅探网络数据包以取得进一步进展。