Perl:SMTP无法连接到邮件服务器

时间:2016-02-10 13:33:16

标签: windows perl email smtp

我编写了一个简单的Perl脚本,使用MIME :: Lite和Net :: SMTP模块发送邮件。但是它导致了错误," SMTP无法连接到邮件服务器:无法立即完成非阻塞套接字操作"

我试过的Perl脚本,

use strict;
use warnings;
use MIME::Lite;
use Net::SMTP;

my $from = 'agnesgrusteven@gmail.com';
my $to = 'agnesgrusteven@gmail.com';
my $host = 'smtp.gmail.com';

my $subject = 'A test  message by script ';
my $body = "Please ignore this message as this is test from Perl scripts ";

my $msg = MIME::Lite->new (
  From => $from,
  To => $to,
  Subject => $subject,
  Type =>'multipart/mixed'
) or die "Error creating multipart container: $!\n";

$msg->attach (
  Type => 'TEXT',
  Data => $body
) or die "Error adding the text message part: $!\n";

MIME::Lite->send('smtp', $host, Timeout=>60);
$msg->send;

我遇到的实际错误

G:\>perl SampleEmail.pl
SMTP Failed to connect to mail server: A non-blocking socket operation could not
 be completed immediately.
 at SampleEmail.pl line 26.

请帮我详细说明我需要检查以正确发送邮件。

先谢谢

3 个答案:

答案 0 :(得分:2)

MIME :: Lite / Net :: SMTP v3。* - 通过smtp.gmail.com发送

Q1 :您可以在smtp.gmail.com处使用teknet smtp(25)端口吗?你有SMTP问候消息吗?

telnet smtp.gmail.com 25

A1 :否=>很可能阻止了与smtp端口的传出连接,以避免传出垃圾邮件。

Q2 :您可以在smtp.gmail.com telnet msa(587)端口吗?你有SMTP问候消息吗?

telnet smtp.gmail.com 587

A1 :YES =>通过msa(587)或smtps(465)发送。 MIME::Lite可以使用Net::SMTP版本3连接到smtps(465)端口。*。
[警告:请参阅MIME::Lite 3.030 - NET::SMTP with smtps (port 465)]

# use smtps (465) port - it requires Net::SMTP version 3.*
# use debugging (Debug=>1) for initial tests
MIME::Lite->send('smtp', $host, SSL=>1, Timeout=>60,
  AuthUser=>$user,AuthPass=>$pass
  Debug=>1);

答案 1 :(得分:1)

很抱歉回答我自己的问题,但这对某人有帮助。

经过一个月的搜索后,我发现为什么我的套接字无法使用正确的主机和密码连接到SMTP。在我的事情中,IO :: Socket模块崩溃了。我已经用新的替换了IO :: Socket ,整个过程都有效。我想,模块崩溃的原因可能是我从不同站点手动下载所需模块并将其放在Perl lib而不是Perl Package Manager中的方式。

谢谢

答案 2 :(得分:-1)

如果你在配置良好的Linux服务器上运行它,如果你拿出来,你可能会有更好的运气

use Net::SMTP

MIME::Lite->send('smtp', $host, Timeout=>60);

并让MIME::Lite使用其默认值 - 通常它允许sendmail处理邮件。