2015-12-14 59 views
0

我試圖用perl發送電子郵件。我的代碼在linux上運行,沒有錯誤。 但當我在Windows Server 2008 r2上運行我的代碼時,perl sys:無法啓動TLS [Perl]

無法啓動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 =>  '[email protected]', 
     Password=>  'password'); 
    $mailer->mail('[email protected]'); 
    $mailer->to('[email protected]'); 
    $mailer->data(); 
    $mailer->datasend("From: [email protected]\n"); 
    $mailer->datasend("To: [email protected]\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

+0

你能發佈在HKLM \ System \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ Protocols \'下展開的所有鍵和子鍵的屏幕截圖嗎? – bentek

回答

3

的Net :: SMTP :: TLS是老很老。最後一個版本是從2006年開始的。它是越野車。這些錯誤會導致您遇到的問題。有一個非官方的替換網:: SMTP :: TLS_ButMaintained,但這也認爲自己也被棄用(從2013年的最後一個版本)。

由於Perl不會使用來自Windows的SSL堆棧,而是使用OpenSSL,所以它也無助於擺脫Windows的SSL控制。

我建議您改用Net::SMTP的最新版本。自3.0版以來,它支持這兩種TLS,即明確使用STARTTLS(這就是你需要的),並且直接連接到SSL端口是隱含的。它甚至支持IPv6。

與當前的Net :: SMTP,最近的IO ::插座:: SSL(用於SSL部分)和認證介紹:: 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('[email protected]','password'); 
$mailer->mail(...) 
+0

嗨Steffen,謝謝你的回答,編輯我的代碼後,你的代碼Perl系統我:無法通過包「Net :: SMTP」找到對象方法「starttls」 – user3001228

+0

@ user3001228:那麼你沒有使用最近的網:: SMTP。在我的代碼示例中,我明確要求3.03或更高版本,因爲該功能僅在版本3之後可用,如我所述。 –

+0

確定我安裝了「libnet-3.07」,但需要sys:Net :: SMTP版本3.07 - 這只是版本2.34。什麼是問題?? !! ?? – user3001228