无法启动 TLS [Perl]

use*_*228 2 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   =>      '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;
Run Code Online (Sandbox Code Playgroud)

我也试过:http : //www.techieshelp.com/how-to-enable-ssl-3-0-server-2008-sbs-2008/

https://social.technet.microsoft.com/Forums/windowsserver/en-US/74a45b74-8d84-4308-ba14-02e4bc724e27/ssl-v3-on-windows-2008?forum=winservergen

Ste*_*ich 5

Net::SMTP::TLS 很旧,很旧。最后一个版本是 2006 年的。而且有问题。这些错误会导致您遇到的问题。有一个非官方的替代品 Net::SMTP::TLS_ButMaintained 但这也认为自己已被弃用(2013 年的最新版本)。

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

我建议您改用Net::SMTP的最新版本。从 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(...)
Run Code Online (Sandbox Code Playgroud)