【问题标题】:couldn't start TLS [Perl]无法启动 TLS [Perl]
【发布时间】:2015-12-15 05:03:56
【问题描述】:

我正在尝试使用 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;

我也试过: 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

【问题讨论】:

  • 你能贴一张在`HKLM\System\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols`下展开的所有键和子键的截图吗?

标签: windows perl ssl


【解决方案1】:

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(...)

【讨论】:

  • 嗨 Steffen,感谢您的回答,在使用您的代码 perl sys me 编辑我的代码后:无法通过包“Net::SMTP”定位对象方法“starttls”
  • @user3001228:那么您没有使用最近的 Net::SMTP。在我的代码示例中,我对 3.03 或更高版本有明确要求,因为该功能仅在我描述的版本 3 之后可用。
  • 好的,我安装了 "libnet-3.07" 但 sys : Net::SMTP 需要 3.07 版本——这只是 2.34 版本。什么问题??!!??
  • @user3001228:我的猜测是您没有正确安装它,并且旧版本的 Net::SMTP 在新版本之前的包含路径中。
  • 好的,我终于安装了 Net::SMTP 3.07 版,我的代码没有任何错误但没有发送任何邮件!
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2017-02-23
  • 1970-01-01
  • 2012-01-18
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多