perl error-无法在未定义的值上调用方法“domain”

时间:2013-09-02 20:31:38

标签: perl email smtp core

#!/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

我需要做什么?

1 个答案:

答案 0 :(得分:2)

Net::SMTP找到mailhost并建立SMTP连接时遇到问题是否已经发生?我看到您直接从文档中获取了脚本 - 您必须为mailhost提供实际值。

如果您已经进一步阅读了文档,特别是new方法的文档,那么您已找到this interesting snippet

  

new([HOST] [,OPTIONS])

     

这是新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声明所有变量。这有助于发现更多错误。