我编写了一个简单的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.
请帮我详细说明我需要检查以正确发送邮件。
先谢谢
答案 0 :(得分:2)
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
处理邮件。