我正在编写一个Perl脚本来连接到需要通过端口143进行TLS的IMAP服务器。服务器不支持通过SSL连接。到目前为止,我发现Perl IMAP模块仅支持SSL,而不支持TLS。
是否有任何提供TLS支持的Perl IMAP模块?到目前为止,我看过:
净:: IMAP 网:: IMAP ::简单 净:: IMAP客户端::
Net :: IMAP :: Client支持SSL但不支持TLS。
有什么想法吗?
答案 0 :(得分:2)
你创建一个后来被转换的非ssl套接字,“如果你想使用IO :: Socket :: INET替代品,比如IO :: Socket :: SSL,这也很有用。”
http://search.cpan.org/dist/Mail-IMAPClient/lib/Mail/IMAPClient.pod#Socket
...在这里创建方法参考时......
http://metacpan.org/pod/IO::Socket::SSL#METHODS
此处的示例可以轻松调整
http://cpansearch.perl.org/src/SULLR/IO-Socket-SSL-1.24/example/ssl_client.pl
答案 1 :(得分:2)
是的,但是TLS!= SSL。要使TLS工作,您需要创建一个普通套接字,处理IMAP STARTTLS命令,然后将其转换为SSL套接字。虽然IO :: Socket :: SSL可以像这样“升级”套接字,但STARTTLS协商是IMAP协议的一部分,因此不会“重新发明轮子” - 您正在使IMAP客户端模块的每个用户重新发明轮子必须处理在过程中出现的协议的那部分(包括任何其他的碎片,例如空闲事件),“手动”!
我想有可能打开一个套接字,转储任何收到的东西,然后向它发送“STARTTLS \ r \ n”,然后调用start_SSL并希望最好。当然,除非你手动执行,否则没有能力检查,你必须查看IMAP RFC。
邮件:: IMAPClient 内置了TLS处理,虽然在我只想下载某些部分的情况下我遇到了处理多部分邮件的问题 - 如果你仍然抓住整个邮件这没关系。但对我来说,搜索还在继续!