【问题标题】:email send works via perl script but not shell script电子邮件发送通过 perl 脚本而不是 shell 脚本工作
【发布时间】:2013-07-07 16:19:21
【问题描述】:

电子邮件发送在 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"

【问题讨论】:

  • Shell 脚本看起来没有错误。但是假设您的示例代码中有虚拟数据,您的变量的实际值可能存在问题。我很惊讶您的 smtp 变量有任何影响。可以导出吗?此外,All Caps 更为典型。或完全注释掉。查看邮件代理是否发回了错误响应? mail 。祝你好运。
  • 是的,导出成功了。谢谢!!

标签: perl shell email unix scripting


【解决方案1】:

您必须导出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 中未提及的系统,但如果它适用于您,那就太好了。

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多