连接到localhost失败(连接被拒绝)没有(更多)重试

时间:2014-05-21 06:13:12

标签: perl sendmail

我想使用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,
);

任何帮助表示感谢。

1 个答案:

答案 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
        };