电子邮件发送通过perl脚本工作,但不是shell脚本

时间:2013-07-09 21:38:53

标签: perl shell email unix scripting

电子邮件发送在perl中工作,但在shell中。我的shell脚本是对的吗?

如果Perl脚本是工作,看起来服务器SMTP conf是正确的。如何找出导致电子邮件不能在shell脚本中工作的原因?

My perl script:

#!/usr/bin/perl -w

use strict;
use warnings;
use Net::SMTP;

sub sendmail();

my $email       = 'abc@xyz.com';
my $smtp_server = '10.233.1.199';

sub sendmail() {
    my $s = Net::SMTP->new($smtp_server);
    $s->mail($email);
    $s->to($email);
    $s->data();
    $s->datasend("Subject: Test");
    $s->datasend("\n");
    $s->datasend("Testing\n");
    $s->dataend();
    $s->quit;
}
sendmail();

Shell script:

  #!/bin/sh

SUBJECT="some subject"
smtp=10.233.1.199
EMAIL=abc@xyz.com
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

1 个答案:

答案 0 :(得分:0)

您必须导出smtp变量,否则mailx将无法看到它。像这样:

#!/bin/sh

SUBJECT="some subject"
export smtp=10.233.1.199
EMAIL=abc@xyz.com
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

顺便说一下smtp变量在我的系统中的man mailx中没有提到,也没有在我有权访问的另一个Linux系统中提到过。但我发现它在an answer on superuser.com中提到过。也就是说,我不确定这会在man mailx中没有提到它的系统上有效,但是如果它适用于你那么好。