Не удается найти метод объекта «new» через пакет «IO :: Socket :: SSL» (возможно, вы забыли загрузить «IO :: Socket :: SSL»?) - PullRequest
1 голос
/ 25 октября 2019

Мы используем Perl 5, версия 18, subversion 1 (v5.18.1).

Ранее мы подключали outlook 2007 для подключения через Mail :: IMAPClient Module с использованием имени пользователя и пароля, поскольку для использования SSL или TLS не требовалось. Теперь мы перенесли outlook на 2016 год, и в этой версии необходимо ввести SSL или TLS.

Я попытался добавить код SSL в сценарий Perl, и он завершается неудачно, как показано ниже:

Не удается найти метод объекта "new" с помощью пакета "IO :: Socket :: SSL" (возможно, вы забыли загрузить "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
   ),

Может кто-нибудь помочь, если правильно добавить модуль ssl в клиент IMAP. Требуется ли обновить Perl 5 до последней версии, чтобы использовать SSL или TLS (используя метод starttls?).

Кроме того, как мы можем узнать, какой модуль IMAPclient мы используем?

Яконечно, чего-то не хватает. Не уверен, так как я наивен, работая в Perl.

Ответы [ 2 ]

5 голосов
/ 25 октября 2019

Невозможно найти метод объекта "new" через пакет "IO :: Socket :: SSL" (возможно, вы забыли загрузить "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
   ),
);
3 голосов
/ 25 октября 2019

Обычно это означает, что вы забыли строку с «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()"
...