我想使用perl发送电子邮件,但是当我按如下方式执行命令时:
#./sendmail.sh "par1" "par2" "par3"
我收到错误消息"连接到localhost失败(连接被拒绝)没有(更多)重试"
sendmail.sh:
/usr/bin/perl /code/sendmail.pl "$1" "$2" "$3"
;
sendmail.pl:
#!/usr/bin/perl -w
use Mail::Sendmail;
my $event1 = shift(@ARGV);
my $event2 = shift(@ARGV);
my $time = shift(@ARGV);
#my $info = shift(@ARGV);
my $datetime = `/bin/date "+20%y-%m-%d %H:%M:%S"`;
chomp $datetime;
$msg = "This is Monitor System speak:\n
The system discovers the events at $datetime.
Something may be abnormal, please check it. The detail is below:\n";
$msg = $msg."$event1 and $event2 at $time\n";
$msg = $msg."\n";
$msg = $msg."Any problem, check it from http://map_test.php\n\n\n";
$mail_subject = "Abnormal";
sendmail(
From => 'localhost',
To => 'test@mail.com',
Subject => $mail_subject,
Message => $msg,
);
任何帮助表示感谢。
答案 0 :(得分:3)
smtp代表简单的邮件传输协议。 当您需要发送电子邮件时,您的邮件客户端需要与将接受该消息的smtp服务器通信。通常,您的互联网服务提供商将提供smtp主机。如果你查看你的邮件客户端,它需要配置一个能够发送邮件的smtp服务器。
好的,所以当你安装Mail :: Sendmail模块时,它不知道你的smtp服务器是什么。你可以告诉它。它提供了localhost
的默认值,如果您的服务器正在运行sendmail守护程序,则通常为true。
Mail :: Sendmail的配置存储在名为
的变量中%邮件:: Sendmail的:: mailcfg
您可以使用以下代码段更改sendmail服务器的值:
unshift @{$Mail::Sendmail::mailcfg{'smtp'}} , 'my.smtp.server';
您需要将这行代码添加到脚本中以设置smtp服务器。
它将此服务器添加到一个也包含localhost的数组中。 因此,如果两个主机都不工作,它仍然会打印一条关于localhost的错误消息,这有点令人困惑。
如果使用Data :: Dumper打印mailcfg变量的内容,它将如下所示:
#!/usr/bin/perl
use Mail::Sendmail;
use Data::Dumper;
unshift @{$Mail::Sendmail::mailcfg{'smtp'}} , 'my.smtp.server';
print Dumper(\%Mail::Sendmail::mailcfg);
应该返回:
$VAR1 = {
'retries' => 1,
'smtp' => [
'my.smtp.server',
'localhost'
],
'delay' => 1,
'port' => 25,
'from' => '',
'debug' => 0,
'tz' => '',
'mime' => 1
};