使用shell脚本发送邮件不起作用

时间:2014-08-20 08:03:10

标签: shell email sh

我需要发送一封关于使用shell脚本部署应用程序的邮件。 为此,我刚刚创建了一个shell脚本并使用

进行了测试
#!/bin/bash

TO_ADDRESS="to.person@domain.com"
FROM_ADDRESS="from.me@domain.com"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo ${BODY}| mail -s ${SUBJECT} ${TO_ADDRESS} -- -r ${FROM_ADDRESS}

但是在运行此脚本时,它的打印方式如下:

You have new mail in /var/spool/mail/jaykay

jaykay

中创建了一个名为/var/spool/mail/的文件
  • 为什么会这样?

  • 如何使用shell脚本发送邮件?

输出文件看起来像

From jaykay Wed Aug 20 04:08:53 2014
Return-Path: <jaykay>
Received: (from jaykay@localhost)
    by e7021.com (8.14.4/8.14.4/Submit) id s7K98rdu004168;
    Wed, 20 Aug 2014 04:08:53 -0500
From: Jini K Johny <jaykay>
Message-Id: <201408200908.s7K98rdu004168@e7021.com>
Date: Wed, 20 Aug 2014 04:08:53 -0500
To: to.person@domain.com, -r, --, from.me@domain.com
Subject: Test mail
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

hai friend, this mail is automated from shell script for Release automation.

1 个答案:

答案 0 :(得分:2)

您的根本问题是必须使用正确的引用。这基本上是每天都会在这里提出问题的副本。

如果没有引号,$SUBJECT中的第二个标记将被解释为要发送的地址。

  • 系统会提交一封电子邮件,以便发送至mail"Test mail"中的第二个字)。

  • 地址无法投放,因此您会收到退回邮件。

  • 退回邮件已发送到您的收件箱。

  • 您的shell会通知您收件箱中有新消息。

此外,您的mail版本似乎无法理解--选项,因此它只被视为另外一个要发送的地址。 (我想,你会从中获得一条退回邮件。)因为-r选项也被解释为另一个要发送的地址,所以你得到一个传出邮件的副本(如Bcc:)在您尝试在$FROM_ADDRESS中指定的邮箱中。

当然,修复很简单:

#!/bin/bash

TO_ADDRESS="to.person@domain.com"
FROM_ADDRESS="from.me@domain.com"
SUBJECT="Test mail"
BODY="hai friend, this mail is automated from shell script for Release automation."

echo "${BODY}" | mail -s "${SUBJECT}" "${TO_ADDRESS}"  # -- -r "${FROM_ADDRESS}"

(这里的curlies并不是必需的,但我保留了它们,因为你的代码已经存在了。)

E.g。 this recent answer有关于何时以及如何准确引用的指导。

mail程序实际上是一个相当薄的包装器;你可以做这样的事情;

/usr/lib/sendmail -oi -t -f "$FROM_ADDRESS" <<____HERE
From: My Name <$FROM_ADDRESS>
To: Your Name <$TO_ADDRESS>
Subject: $SUBJECT

$BODY
____HERE

... /usr/lib/sendmail的路径很可能是许多系统上的其他路径。

(对于奖励k00lness积分,请添加X-Mailer: Look, I can put anything I like here!

我在这里猜测你的意思是sendmail -f "$FROM_ADDRESS"设置信封发件人地址(而不是-r,我无法在任何地方找到这些地址。)