Perl:SMTP 无法连接到邮件服务器
Perl: SMTP failed to connect to mail server
我编写了一个简单的 Perl 脚本来使用 MIME::Lite 和 Net::SMTP 模块发送邮件。但它导致了错误,"SMTP Failed to connect to mail server: A non-blocking socket operation could not be completed immediately".
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.
请帮助我具体检查哪些内容才能正确发送邮件。
提前致谢
如果你运行在一个配置良好的Linux服务器上,如果你取出
你可能会有更好的运气
use Net::SMTP
和
MIME::Lite->send('smtp', $host, Timeout=>60);
并且只让 MIME::Lite
使用它的默认值——通常它会让 sendmail
处理消息。
MIME::Lite / Net::SMTP v3.* - 通过 smtp.gmail.com
发送
Q1: 你能在smtp.gmail.com
telnet smtp (25) 端口吗?您收到 SMTP 问候消息了吗?
telnet smtp.gmail.com 25
A1: 否 => 很可能您到 smtp 端口的传出连接被阻止以避免 传出 垃圾邮件。
Q2: 你能在smtp.gmail.com
telnet msa (587)端口吗?您收到 SMTP 问候消息了吗?
telnet smtp.gmail.com 587
A1: 是 => 通过 msa (587) 或 smtps (465) 发送。 MIME::Lite
可以使用 Net::SMTP
版本 3.*.
连接到 smtps (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);
很抱歉回答我自己的问题,但这可能对某人有所帮助。
经过一个月的搜索,我终于找到了为什么我的套接字无法使用正确的主机和密码连接到 SMTP。在我看来,IO::Socket 模块崩溃了。我已经 将 IO::Socket 替换为新的,并且一切正常。我想,模块崩溃的原因可能是我从不同站点手动下载所需模块并将其放置在 Perl 库中而不是从 Perl 包管理器中放置的方式。
谢谢
我编写了一个简单的 Perl 脚本来使用 MIME::Lite 和 Net::SMTP 模块发送邮件。但它导致了错误,"SMTP Failed to connect to mail server: A non-blocking socket operation could not be completed immediately".
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.
请帮助我具体检查哪些内容才能正确发送邮件。
提前致谢
如果你运行在一个配置良好的Linux服务器上,如果你取出
你可能会有更好的运气use Net::SMTP
和
MIME::Lite->send('smtp', $host, Timeout=>60);
并且只让 MIME::Lite
使用它的默认值——通常它会让 sendmail
处理消息。
MIME::Lite / Net::SMTP v3.* - 通过 smtp.gmail.com
发送Q1: 你能在smtp.gmail.com
telnet smtp (25) 端口吗?您收到 SMTP 问候消息了吗?
telnet smtp.gmail.com 25
A1: 否 => 很可能您到 smtp 端口的传出连接被阻止以避免 传出 垃圾邮件。
Q2: 你能在smtp.gmail.com
telnet msa (587)端口吗?您收到 SMTP 问候消息了吗?
telnet smtp.gmail.com 587
A1: 是 => 通过 msa (587) 或 smtps (465) 发送。 MIME::Lite
可以使用 Net::SMTP
版本 3.*.
连接到 smtps (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);
很抱歉回答我自己的问题,但这可能对某人有所帮助。
经过一个月的搜索,我终于找到了为什么我的套接字无法使用正确的主机和密码连接到 SMTP。在我看来,IO::Socket 模块崩溃了。我已经 将 IO::Socket 替换为新的,并且一切正常。我想,模块崩溃的原因可能是我从不同站点手动下载所需模块并将其放置在 Perl 库中而不是从 Perl 包管理器中放置的方式。
谢谢