【问题标题】:Is there a Perl IMAP module with TLS support?是否有支持 TLS 的 Perl IMAP 模块?
【发布时间】:2010-10-23 23:59:24
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: perl imap ssl


    【解决方案1】:

    您创建了一个稍后转换的非 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

    【讨论】:

    • 恐怕我对此了解的不够多,无法对需要编码的内容进行编码。我真的在寻找一个内置提供此功能的模块。换句话说,我想简单地启动一个 IMAP 连接并指定“TLS => 1”。另一方面,如果您能更详细地说明如何使用上述方法获得支持 TLS 的 IMAP 模块,我也会很高兴。
    • 使用 io::socket 建立网络连接,然后将该连接交给 mail::imapclient。它不会尝试建立自己的连接,而是使用为它做的一个用途。这使您可以使用可以召集的任何机制。这是一件好事,因为我们真的不希望 mail::imapclient 程序员重新发明轮子并处理网络问题。
    【解决方案2】:

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

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

    Mail::IMAPClient 内置了 TLS 处理,尽管在我只想下载某些部分的情况下处理多部分邮件时遇到了问题 - 如果您仍然要抓取整个邮件这没关系。不过,对我来说,搜索仍在继续!

    【讨论】:

    • 我已经发现了零件的问题。文档中有一个小错误:要获取 body-structure 对象上零件的 id,请使用 ->id not ->bodyid asdocumented。
    • Mail::IMAPClient 对我来说也是最好的邮件模块。
    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 2012-09-20
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2023-03-20
    相关资源
    最近更新 更多