Windows 不能';t启动TLS[Perl]

Windows 不能';t启动TLS[Perl],windows,perl,ssl,Windows,Perl,Ssl,我正在尝试用perl发送电子邮件。我的代码在linux上运行,没有错误。 但当我在windows server 2008 r2上运行代码时,perl sys: 无法启动TLS:不支持SSL版本SSLv3 我的perl代码: #!/usr/bin/perl use Net::SMTP::TLS; use 5.010; my $mailer = new Net::SMTP::TLS( 'smtp.mail.yahoo.com', Hello =>

我正在尝试用perl发送电子邮件。我的代码在linux上运行,没有错误。 但当我在windows server 2008 r2上运行代码时,perl sys:

无法启动TLS:不支持SSL版本SSLv3

我的perl代码:

#!/usr/bin/perl

use Net::SMTP::TLS;
use 5.010;

my $mailer = new Net::SMTP::TLS(
        'smtp.mail.yahoo.com',
        Hello   =>      'smtp.mail.yahoo.com',
        Port    =>      587,
        User    =>      'someEmail@yahoo.com',
        Password=>      'password');
    $mailer->mail('someEmail@yahoo.com');
    $mailer->to('someEmail@yahoo.com');
    $mailer->data();
    $mailer->datasend("From: someEmail@yahoo.com\n");
    $mailer->datasend("To: someEmail@yahoo.com\n");
    $mailer->datasend("Subject: test&test\n");
    $mailer->datasend("Content-type: text/html\n\n");
    $mailer->datasend("\n");
    $mailer->datasend"test test ste  tset\n");
    $mailer->dataend();
    $mailer->quit;
我也试过:


Net::SMTP::TLS很旧,非常旧。最后一个版本是2006年的。而且是马车。这些错误会导致你的问题。有一个非官方的替代品Net::SMTP::TLS_,但它被保留了下来,但它认为自己也被弃用了(最新版本从2013年开始)

摆弄Windows的SSL控件也无济于事,因为Perl不会使用Windows的SSL堆栈,而是使用OpenSSL

我建议您改用的最新版本。自版本3.0以来,它支持两种TLS,即显式使用STARTTLS(这是您所需要的)和隐式直接连接到SSL端口。它甚至支持IPv6

使用当前的Net::SMTP、最近的IO::Socket::SSL(用于SSL部分)和Authen::SASL(用于登录部分),您可以执行以下操作:

use strict;
use warnings;
use Net::SMTP 3.03;
my $mailer = Net::SMTP->new(
    'smtp.mail.yahoo.com',
    Hello   =>      'smtp.mail.yahoo.com',
    Port    =>      587,
);

$mailer->starttls();
$mailer->auth('someEmail@yahoo.com','password');
$mailer->mail(...)

你能发布一张在“HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols”下展开的所有密钥和子密钥的屏幕截图吗?嗨,Steffen,谢谢你的回答,在用你的代码编辑我的代码后perl sys me:无法通过包“Net::SMTP”@user3001228找到对象方法“starttls”:那么你没有使用最新的Net::SMTP。在我的代码示例中,我对3.03或更高版本有明确的要求,因为该功能仅在我描述的版本3之后可用。好的,我安装了“libnet-3.07”,但需要sys:Net::SMTP版本3.07——这只是版本2.34。什么是问题@user3001228:我猜您没有正确安装它,并且旧版本的Net::SMTP在新版本之前就在您的包含路径中。好的,最后我安装了Net::SMTP版本3.07,我的代码没有任何错误,但没有发送任何邮件!