无法通过包“ IO :: Socket :: SSL”找到对象方法“新”(也许您忘记加载“ IO :: Socket :: SSL”了吗?)

时间:2019-10-25 09:13:56

标签: perl sockets ssl imapclient

我们正在使用Perl 5,版本18,版本1(v5.18.1)构建。

之前,我们使用用户名和密码连接Outlook 2007以通过Mail :: IMAPClient模块进行连接,因为不需要使用SSL或TLS。现在,我们已将Outlook迁移到2016年,在此版本中,必须引入SSL或TLS。

我试图在Perl脚本中添加SSL代码,但失败如下:

  

无法通过包“ IO :: Socket :: SSL”找到对象方法“ new”(也许您忘记加载“ IO :: Socket :: SSL”?)


我的代码:

$client = Mail::IMAPClient->new(
   server   => $Eserver,
   User     => $Euser,
   Password => $Epassword,
   ssl      => 1,
   port     => 993,
   Socket   => IO::Socket::SSL->new
   (  Proto    => 'tcp',
      PeerAddr => $Eserver,
      PeerPort => 993, # IMAP over SSL standard port
   ),

如果有人以正确的方式在IMAP客户端中添加ssl模块,请帮忙。是否需要将Perl 5升级到最新版本以使用SSL或TLS(使用starttls方法?)。

此外,我们如何知道我们正在使用哪个IMAPclient模块?

我确定有些东西丢失了。不确定,因为我在Perl工作时很幼稚。

2 个答案:

答案 0 :(得分:5)

  

无法通过包“ IO :: Socket :: SSL”找到对象方法“新”(也许您忘记加载“ IO :: Socket :: SSL”)

您忘了加载IO::Socket::SSL吗?

use IO::Socket::SSL;

the documentation中的示例中甚至存在:

use IO::Socket::SSL;
my $imap = Mail::IMAPClient->new
 ( User     => 'your-username',
   Password => 'your-password',
   Socket   => IO::Socket::SSL->new
   (  Proto    => 'tcp',
      PeerAddr => 'some.imap.server',
      PeerPort => 993, # IMAP over SSL standard port
   ),
);

答案 1 :(得分:3)

通常,这意味着您忘记了“ use PackageName;”行。

$ perl -le "IO::Socket::SSL->new()"
Can't locate object method "new" via package "IO::Socket::SSL" (perhaps you forgot to load "IO::Socket::SSL"?) at -e line 1.

且没有错误

$ perl -le "use IO::Socket::SSL; IO::Socket::SSL->new()"