我有一个使用Mail::Sender
的第一个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 => 'absender@absender.de',
to => 'empf@empf.de',
subject => 'Funktionstest',
} );
$av_tmp_SENDER->MailMsg( {
to => 'empf@empf.de',
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
有人可以给初学者一个提示吗?!
答案 0 :(得分:2)
您需要检查返回的Mail::Sender->new
是否有效。在这种情况下,它返回-1
。然后,当您尝试在值为MailMsg
的变量上调用-1
时,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
而不是undef
或0
是什么意思?
答案 1 :(得分:1)
...欢迎使用Stack Overflow和Perl
如果持不同意见者让你失望,我很抱歉,但最终他们是对的 - Stack Overflow是一个英语网站
问题是您在创建Mail::Server
对象时未指定SMTP服务器。大多数互联网服务提供商都允许您访问其SMTP服务器作为交易的一部分
如果您不知道SMTP服务器的URL,那么您应该在线检查或致电支持部门以了解它的用途。您可能还需要提供您的用户名和密码
您需要与他们核对并提供服务器的URL到new
电话。以下代码假定您拥有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 => 'my.email@gmail.com',
authpwd => 'Herringbone-pattern-1989',
} );
die "Return code $sender" unless ref $sender;
my $status = $sender->MailMsg( {
to => 'my.friend@gmail.com',
from => 'my.email@gmail.com',
subject => 'Funktionstest',
msg => 'noch ein bisschen text',
} );
die "Return code $status" unless ref $status;
print "Die e-Mail wurde verschickt";