4

我正在编写一个 Perl 脚本来连接到需要通过端口 143 进行 TLS 的 IMAP 服务器。该服务器不支持通过 SSL 进行连接。到目前为止,我发现的 Perl IMAP 模块只支持 SSL,不支持 TLS。

是否有任何提供 TLS 支持的 Perl IMAP 模块?到目前为止,我已经看过:

网络::IMAP 网络::IMAP::简单网络::IMAP::客户端

Net::IMAP::Client 支持 SSL 但不支持 TLS。

有什么想法吗?

4

2 回答 2

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

于 2009-05-05T19:44:59.543 回答
2

是的,但是 TLS != SSL。要使 TLS 工作,您需要创建一个普通套接字,处理 IMAP STARTTLS 命令,然后将其转换为 SSL 套接字。虽然 IO::Socket::SSL 可以像这样“升级”套接字,但 STARTTLS 协商是 IMAP 协议的一部分,因此不是“重新发明轮子”——您正在让 IMAP 客户端模块的每个用户重新发明轮子必须“手动”处理在此过程中出现的协议部分(包括任何其他零碎,例如空闲事件)!

我想有可能打开一个套接字,转储接收到的任何内容,然后将“STARTTLS\r\n”发送到它,然后调用 start_SSL 并希望最好。当然,除非您手动执行此操作,否则那里没有功能检查,为此您必须查看 IMAP RFC。

Mail::IMAPClient内置了 TLS 处理,尽管在我只想下载某些部分的情况下处理多部分消息时我遇到了问题——如果你无论如何都要抓取整个消息,这无关紧要。不过,对我来说,搜索仍在继续!

于 2011-05-29T13:41:48.170 回答