1

我们正在使用 Perl 5,版本 18,subversion 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 工作时很天真。

4

2 回答 2

5

无法通过包“IO::Socket::SSL”定位对象方法“new”(可能您忘记加载“IO::Socket::SSL”)

你忘记加载了IO::Socket::SSL吗?

use IO::Socket::SSL;

它甚至在文档中的示例中:

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
   ),
);
于 2019-10-25T10:28:18.687 回答
3

通常,这意味着您忘记了“使用 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()"
于 2019-10-25T09:51:32.400 回答