2016-05-17 10 views
4

を使用してGmailでメールを送信します。昨日から、このスクリプトは4種類のLinuxコンピュータで正常に動作していました。今度は次のメッセージが返されます:私はこのperlスクリプトを持っているPerlの

Couldn't start TLS: SSL connect attempt failed because of handshake problems error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version at scriptname.pl line 7

Gmail SMTPサービスの変更に関するドキュメントは見つかりませんでした。どのようにできるのか?

おかげ

+0

[関連](http://stackoverflow.com/questions/34455133/error-sslv3-alert-handshake-failure-using-netsmtptls)、[また、(http://stackoverflow.com/questions/26385603/) Facebookの-SDK-FOR-PHP-エラーcurlexception-35-error14094410ssl-routinesssl3)、[また](http://openssl.6102.n7.nabble.com/TLS-ALERT-PROTOCOL-VERSION-Error-td12978.html ) – 123

答えて

0

「をオンにします」されていることを確認します。 Net :: SMTP :: TLSの代わりに、私はMIME :: Liteを使用しました。

#!/usr/bin/perl 
use MIME::Lite; 
use Net::SMTPS; 

my $file="/var/www/myweb/myfile.txt"; 
open(FILE, $file) or die "Can't read file 'filename' [$!]\n"; 
$document = <FILE>; 
close (FILE); 
my $msg = MIME::Lite ->new ( 
From => '[email protected]', 
To => '[email protected]', 
Subject => 'mail subject', 
Data => qq{ 
<body> 
Text message body HTML format. <p> $document </p> 
</body> 
}, 
Type => 'text/html; charset=UTF-8' 
); 
my $USERNAME = '[email protected]'; 
my $PASSWORD = 'password'; 

my $smtps = Net::SMTPS->new("smtp.live.com", Port => 587, doSSL=> 'starttls', SSL_version=>'TLSv1'); 

$smtps->auth ($USERNAME, $PASSWORD) or DIE("Could not authenticate with mail.\n"); 

$smtps ->mail('[email protected]'); 
$smtps->to('[email protected]'); 
$smtps->data(); 
$smtps->datasend($msg->as_string()); 
$smtps->dataend(); 
$smtps->quit; 

私はGmail.comではなくOutlook.comサービスを使用しています。

ありがとうございました!

+0

"Net :: SMTP :: TLSの代わりに、MIME :: Liteを使用しました。これは間違っています。 Net :: SMTP :: TLSをNet :: SMTPSに置き換えました。 MIME :: Liteは、メッセージを作成するためにのみ使用しますが、メッセージは送信しません。送信はNet :: SMTPSで行われ、Net :: SMTPの(最近のバージョン)でもやっていたはずです。実際、Net :: SMTPSはNet :: SMTPだけを使用しますが、Net :: SSLGlueに似ています。 –

4

Net::SMTP::TLSは、2006年からメンテナンスされていないで、それは不可能(原因与えられたパラメータのより厳密なチェックに)IO ::ソケット:: SSLの現在のバージョンで使用するようにするバグがあり、現在のサイトと(原因SSL 3.0を優先する)。これらのバグは、ネット:: SMTP :: TLSを変更することで固定することができ、またはIO ::ソケット:: SSL変更することで回避することができます(行うには間違ったことですが、これを伝播し、十分なサイトがあります)。

私の推測では、あなたがこのモジュールを使用しようとネット:: SMTP :: TLSを変更することによって、またはIO ::ソケット:: SSLを変更することで、どちらか、それを動作させるためにいずれかのいくつかの変更を加えたことです。そしていくつかのアップデートのために、これらの変更の一部は今行っていません。バグの性質上、これにより、gmailのサポートを受けていないSSL 3.0を試してみる可能性があります。

私の推薦:ネット:: SMTP :: TLS遠く離れ投げるとネット:: SMTP(コアモジュール)を使用します。最近のバージョン3.x(リリース2014)は、TLSとIPv6をネイティブにサポートしています(IO :: Socket :: SSLがインストールされている場合)。 perl 5.22以降に含まれています。あなたは最新バージョンを使用できない場合は、可能なネット:: SMTPの古いバージョンではSSLを使用して作るNet::SSLGlue::SSLをインストールすることができます。 https://www.google.com/settings/security/lesssecureapps

+0

Net :: SMTP :: TLSをNet :: SMTPに変更すると、スクリプトのすべての構文も変更されます。私はそれがどのように動作するか分からないので、どのように動作するかを見ることができます。あなた – Xuti

+0

@Xutiありがとう:ネット:: SMTP :: TLSのインタフェースがネット:: SMTPのインターフェース後に設計されていたので、おそらくモジュール名別に何も変更する必要はありません。しかし、オブジェクトを作成した直後に '$ smtp-> starttls'を呼び出す必要があります。詳細については、[Net :: SMTPのドキュメント](https://metacpan.org/pod/Net::SMTP)をご覧ください。 –

0

移動し、最後に、私は、スクリプトを少し変更することを選択した

+0

こんにちは、はい、オンになっています。ありがとうございました! – Xuti

+0

このアドバイスはSMTP認証エラーに役立ちますが、TLSプロトコルエラーでは役に立ちません。 –

関連する問題