2016-05-01 14 views
0

我有一个使用Mail::Sender第一Perl程序:Perl的错误消息,也许你忘了装载

#!/usr/bin/perl 

use warnings; 

use Getopt::Long; 

use autodie; # die if problem reading or writing a file 

use Mail::Sender; 

my $av_tmp_SENDER = Mail::Sender->new({ 
    from => '[email protected]', 
    to  => '[email protected]', 
    subject => 'Funktionstest', 
}); 

$av_tmp_SENDER->MailMsg({ 
    to  => '[email protected]', 
    subject => 'Funktionstest', 
    msg  => "noch ein bisschen text" 
}); 

print "Die e-Mail wurde verschickt"; # The email was sent 

然后我收到此错误信息:

Can't locate object method "MailMsg" via package "-1" (perhaps you forgot to load "-1"?) at ./av_perl_02.pl line 

是否有人可以给初学者的提示?!

+5

** 1 **请使用英文。 ** 2 ** *总是*'使用严格'! – Biffen

+0

@Biffen'S /请/总是/' – andlrc

+3

@andlrc:我不认为任何伤害来自一个小礼貌,特别是当“请”在所有使用比芬一样,没有分寸任何意义。它也是一个重要的Perl问题区分*请写你的文章在英文*请*使用英文* * IMO是一件可怕的事情,仅次于'使用诊断' – Borodin

回答

2

您需要检查什么Mail::Sender->new返回是有效的。在这种情况下,它返回-1。然后,当您尝试对值为-1的变量调用MailMsg时,Perl会将该值解释为类(包)名称,并假定您的意思是调用该类上的方法。

的一个好方法,以测试一个构造函数的返回值与ref功能:

my $av_tmp_SENDER = Mail::Sender->new(...) 
if (ref($av_tmp_SENDER) eq 'Mail::Sender') { 
    # Use the new object 
} 
else { 
    # Print a message 
} 

当然,该模块的文档可以指示其它的检查。例如,这是什么意思,它返回-1而不是undef0

1

...并欢迎堆栈溢出,并与Perl

对不起,如果反对者把你赶走,但最终他们是正确的,Stack Overflow是一个英文网站

的问题在于,当您创建Mail::Server对象时,您没有指定SMTP服务器。大多数互联网服务提供商给你访问到他们的SMTP服务器作为交易

的一部分,如果你不知道你的SMTP服务器的URL,那么你应该检查线路或呼叫支持中心,了解它是什么。你可能还需要提供用户名和密码

你需要检查他们和服务器到new呼叫提供的URL。下面的代码假设您有一个Gmail帐户,并且Google的SMTP服务器位于smtp.gmail.com

此代码将报告任何错误,请致电new或致电MailMsg。错误代码为负数,您可以在Return codes section of the Mail::Sender documentation

#!/usr/bin/perl 

use utf8; 
use strict; 
use warnings 'all'; 

use Mail::Sender; 

my $sender = Mail::Sender->new({ 
    smtp => 'smtp.gmail.com', 
    authid => '[email protected]', 
    authpwd => 'Herringbone-pattern-1989', 
}); 

die "Return code $sender" unless ref $sender; 

my $status = $sender->MailMsg({ 
    to  => '[email protected]', 
    from => '[email protected]', 
    subject => 'Funktionstest', 
    msg  => 'noch ein bisschen text', 
}); 

die "Return code $status" unless ref $status; 

print "Die e-Mail wurde verschickt"; 
+0

O.K. - 感谢提示 - 正如我所说,我是一个总新手。 在这个例子中,我只是想发一封邮件,因为我常做的shell命令mailx的,因为我的Ubuntu mashine有一个后缀的安装运行。 我在网上寻找的例子,并遇到这一个。但是,必须有一种方法来发送邮件并让现有的后缀处理它。顺便说一下:postfix被配置为只接受来自本地网络的邮件。 谢谢 Karl-Heinz – averlon