我需要发送一封关于使用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.
答案 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
,我无法在任何地方找到这些地址。)