我有这个perl脚本:
#!/usr/bin/perl
use Net::SMTP::TLS;
my $file="/var/www/myweb/textfile.txt";
my $smtp = new Net::SMTP::TLS(
'smtp.gmail.com',
Hello => 'smtp.gmail.com',
Port => 587,
User => 'mymail@gmail.com',
Password => 'mypassword',
);
$smtp->mail('mymail@gmail.com');
$smtp->to('destinationmail@hotmail.com');
$smtp->data();
$smtp->datasend("Subject: Subject of mail \n");
$smtp->datasend("\n");
#make sure file exists
if (-e $file) {
$smtp->datasend("body of the mail");
#read the file one line at a time
open( RFILE, "<$file" )||print "could not open file";
while (my $line = <RFILE>){
$smtp->datasend("$line");
}
close(RFILE) || print "could not close file";
}
else {
#print "did not find the report $file ";
exit 1;
}
#End the message.
$smtp->dataend();
#Close the connection to your server.
$smtp->quit();
此脚本打开textfile.txt并将其内容放入电子邮件正文中。从昨天开始,这个脚本在4台不同的Linux计算机上运行良好。现在它返回此消息:
无法启动TLS:由于握手问题,SSL连接尝试失败 错误:1409442E:SSL例程:SSL3_READ_BYTES:tlsv1警报协议 scriptname.pl第7行的版本
我没有找到任何有关Gmail SMTP服务更改的文档。我该怎么办?
由于
答案 0 :(得分:4)
Net::SMTP::TLS自2006年以来一直没有维护,并且有一些错误导致无法使用当前版本的IO :: Socket :: SSL(由于更严格地检查给定参数)和当前站点(由于首选对于SSL 3.0)。这些错误可以通过修改Net :: SMTP :: TLS来修复,也可以通过修改IO :: Socket :: SSL来解决(这是错误的做法,但有足够的网站传播这个)。
我的猜测是你试图使用这个模块并进行一些更改,以使其工作,通过修改Net :: SMTP :: TLS或修改IO :: Socket :: SSL。由于一些更新,这些修改的一部分现在已经消失。由于错误的性质,这可能会导致您尝试SSL 3.0不支持的SSL 3.0。
我的建议:远离Net :: SMTP :: TLS并使用Net :: SMTP(核心模块)。最新版本3.x(2014年发布)本机支持TLS和IPv6(如果安装了IO :: Socket :: SSL)。它包含在perl 5.22+中。如果您无法使用最新版本,则可以安装Net::SSLGlue::SSL,这样可以使用旧版本的Net :: SMTP。
答案 1 :(得分:0)
答案 2 :(得分: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 => 'sender@hotmail.com',
To => 'recipient@hotmail.com',
Subject => 'mail subject',
Data => qq{
<body>
Text message body HTML format. <p> $document </p>
</body>
},
Type => 'text/html; charset=UTF-8'
);
my $USERNAME = 'sender@hotmail.com';
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('sender@hotmail.com');
$smtps->to('recipient@hotmail.com');
$smtps->data();
$smtps->datasend( $msg->as_string() );
$smtps->dataend();
$smtps->quit;
我使用Outlook.com服务而不是GMail。
谢谢!