0
#!/usr/bin/perl -w

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');
print $smtp->domain,"\n";
$smtp->quit;

我运行这个 pl 文件并得到错误“无法在未定义的值上调用方法“域””,并且在这个 pl 文件中:

#!/usr/bin/perl -w

use Net::SMTP;

$smtp = Net::SMTP->new('mailhost');

$smtp->mail($ENV{USER});
$smtp->to('postmaster');

$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();

$smtp->quit;

我收到错误Can't call method "mail" on an undefined value

我需要做什么 ?

4

1 回答 1

2

您是否想过在查找SMTP 和建立 SMTP 连接Net::SMTP时遇到问题?mailhost我看到您直接从文档中获取脚本——您必须为mailhost.

如果您进一步阅读了文档,尤其是该new方法的文档,您会发现这个有趣的片段

新的([主机] [,选项])

这是一个新Net::SMTP对象的构造函数。HOST是需要 SMTP 连接的远程主机的名称。

失败undef时将返回并$@包含失败的原因。

所以让我们打印出失败的原因:

my $mailhost = "your mailhost";
my $smpt = Net::SMTP->new($mailhost) or die "Can't connect to $mailhost: $@";

die使用错误消息中止您的程序。此消息应该告诉您更多关于实际错误的信息。

请注意,文档中的示例代码不一定用于实际项目——它只是为了展示模块的功能。对于真实代码,始终 use strict; use warnings位于代码的顶部,并使用my. 这有助于发现更多错误。

于 2013-09-02T20:40:19.047 回答