是否有支持TLS的Perl IMAP模块?

5
我正在编写一个Perl脚本来连接到需要在143端口上使用TLS的IMAP服务器。该服务器不支持通过SSL连接。到目前为止,我找到的Perl IMAP模块仅支持SSL,而不支持TLS。
是否有任何提供TLS支持的Perl IMAP模块?到目前为止,我看过了以下模块:
Net::IMAP Net::IMAP::Simple Net::IMAP::Client
其中,Net::IMAP::Client支持SSL但不支持TLS。
您有什么想法吗?
2个回答

2

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

我猜可能可以打开一个套接字,转储接收到的任何内容,只需向其发送“STARTTLS\r\n”,然后调用start_SSL并希望一切顺利。当然,除非您手动执行此操作并查看IMAP RFC,否则没有能力检查。

Mail::IMAPClient内置了TLS处理,尽管我在处理多部分消息时遇到了问题,在这种情况下,我只想下载某些部分-如果您无论如何都要获取整个消息,则这并不重要。对我来说,搜索还在继续!


我已经找出了零件的问题所在。文档中有一个小错误:要获取身体结构对象上零件的ID,请使用->id而不是文档中记录的->bodyid。 - epitaph
Mail::IMAPClient 对我来说也是最好的邮件模块。 - MichielB

2

很抱歉,我对此了解不足,无法编写所需的代码。我真的在寻找一个内置此功能的模块。换句话说,我想简单地发起一个IMAP连接并指定“TLS => 1”。另一方面,如果您能稍微详细地说明如何使用上述方法获得带有TLS支持的IMAP模块,我也会很高兴。 - Peter Wood
使用io::socket建立您的网络连接,然后将该连接移交给mail::imapclient。它不会尝试建立自己的连接,而是使用您为其创建的连接。这使您可以使用任何您能够想到的机制。这是一件好事,因为我们真的不希望mail::imapclient程序员重新发明轮子并处理网络连接。 - hpavc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接