2010-11-07 89 views
1

我在使用perl发送邮件时遇到问题。当我输入以下命令: my $ smtp = Net :: SMTP-> new($ ServerName,Debug => 0); $ ServerName =“localhost”。 $ smtp没有设置。它是空的。有人可以告诉我为什么它没有适当设置的原因。由于相同的脚本正在我的其他Linux服务器上运行。在Linux上使用perl发送SMTP邮件的邮件

帮助是真正的赞赏。

感谢 DD

回答

0

您是否尝试过启用调试?

$smtp = Net::SMTP->new(
Host => 'mailhost', 
Hello => 'my.mail.domain', 
Timeout => 30, 
Debug => 1, 
); 

然后看看调试输出说什么。

+0

是的,我试过..可惜没有现身在控制台上。我相信它通过应该打印在控制台上的stderr写入。请介意帮助我跟踪调试日志? – user343283 2010-11-07 16:00:26

+0

好的,如果可以的话,我会尝试重现您的问题,然后发布更多。 – sleske 2010-11-07 16:21:05

+0

是的,显然“调试”不报告任何错误。奇怪的 :/。 – sleske 2010-11-07 22:53:57

2

Net::SMTP,看起来,它的错误处理方式非常不尽人意。 你能做的最好的是:

my $smtp = Net::SMTP->new($ServerName) 
      or die "Unable to connect to SMTP server '$ServerName'"; 

即使经过Debug => 1显得无能为力时,它不能创建对象。

超过三年没有新版本的libnet(包括Net :: SMTP)。有一个从2010年5月这也似乎有一些改善一个developer release:它documents

On failure undef will be returned and [email protected] will contain the reason for the failure.

(最近的适当的释放并没有这样做。)

如果你愿意尝试安装该开发者版本,你可以提高你的代码:

my $smtp = Net::SMTP->new($ServerName) 
      or die "Unable to connect to SMTP server '$ServerName': [email protected]"; 

可能的原因您的连接失败:

  • $服务器名称不是一个有效的主机名
  • 在$服务器名称
  • 没有运行SMTP服务的服务器并不像标准问候语,localhost.localdomain。将Hello => 'your.fully.qualified.host.name'传递给构造函数。

您可以尝试连接到命令行上的SMTP服务器,在那里你想运行此脚本的主机上:

$ telnet smtp.example.com 
EHLO localhost.localdomain 
quit 
+1

感谢朋友。实际上sendmail服务没有运行。调试信息不​​会抛出任何使生活痛苦以认同这样一个愚蠢问题的错误是非常奇怪的。 – user343283 2010-11-07 17:08:34