필자는 POP3을 사용하여 Gmail 계정에서 메일을 가져 오는 Perl 스크립트를 작성했습니다. Gmail이 POP3를 사용할 때 SSL 또는 TLS 연결을 요구하기 시작한 지 얼마되지 않아 스크립트가 손상되었습니다.펄에서 TLS가있는 POP3 - 시작하는 데 도움이 되나요?
use YAML;
use Net::SSLGlue::POP3;
use Mozilla::CA;
use Email::Find;
use Data::Dumper;
use LWP::Simple;
my $email_finder = Email::Find->new(\&process_email);
my $verbose = 1;
my $email_account = '[email protected]';
my $email_password = 'somepassword';
my $mail_server = "mail.mydomain.net";
print("\nStarted\n") if ($verbose);
$pop = Net::POP3->new($mail_server) || die("Could not log on to server.");
print(" - starttls using " . Mozilla::CA::SSL_ca_file() . "\n") if ($verbose);
$pop->starttls(
SSL_verify_mode => 1,
SSL_ca_file => Mozilla::CA::SSL_ca_file()
) || die "Can't perform starttls: $!";
내 문제 : 다음
#!/usr/bin/env perl
use strict;
use warnings;
use Net::SSLGlue::POP3;
use Mozilla::CA;
my $host = 'pop.aol.com';
my $login = '[email protected]';
my $pass = '4Radfsai8fsfd9sdf9sdf';
my $pop3 = Net::POP3->new($host) || die "Can't connect to $host: $!";
$pop3->starttls(
SSL_verify_mode => 1,
SSL_ca_file => Mozilla::CA::SSL_ca_file(),
) || die "Can't perform starttls: $!";
my $messages = $pop3->login($login, $pass)
|| die "Failed to authenticate login $login on $host: $!";
print "There are $messages messages on $host for $login.\n";
는 (일부 세부 사항은 보안상의 이유로 변경) 내 정확한 코드의 일부입니다 :
나는이 샘플 코드를 포함 마이크 B의 블로그에 this interesting post 발견 그게 ...
$pop->starttls(
SSL_verify_mode => 1,
SSL_ca_file => Mozilla::CA::SSL_ca_file()
) || die "Can't perform starttls: $!";
... 나는 이유를 말할 수 없다. 어떤 제안?
UPDATE는 ... 당신 스테 감사드립니다.
$pop = Net::POP3->new($mail_server, Debug => 1)
|| die("Could not log on to server.");
print(" - starttls using " . Mozilla::CA::SSL_ca_file() . "\n") if ($verbose);
$pop->starttls(
SSL_verify_mode => 1,
SSL_ca_file => Mozilla::CA::SSL_ca_file()
) || die "Can't perform starttls: $!\n" . $IO::Socket::SSL::SSL_ERROR;
오류 메시지가 지금 :
Net::POP3>>> Net::POP3(2.29)
Net::POP3>>> Net::Cmd(2.29)
Net::POP3>>> Exporter(5.63)
Net::POP3>>> IO::Socket::INET(1.31)
Net::POP3>>> IO::Socket(1.31)
Net::POP3>>> IO::Handle(1.28)
Net::POP3=GLOB(0xb41980)<<< +OK Dovecot ready.
- starttls using /usr/local/share/perl/5.10.1/Mozilla/CA/cacert.pem
Net::POP3=GLOB(0xb41980)>>> STLS
Net::POP3=GLOB(0xb41980)<<< +OK Begin TLS negotiation now.
Can't perform starttls:
**SSL connect attempt failed with unknown error error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate
verify failed at (my script) line 26.**
이인가 기본적으로 말을 내가 디버그 => 1, 출력 $ IO :: 소켓 :: SSL :: SSL_ERROR 추가하여 내 코드를 업데이 트했습니다 , "Mozilla :: CA 인증서가 작동하지 않습니다."