为什么 sendmail 在不同 shell 中的工作方式不同?

为什么 sendmail 在不同 shell 中的工作方式不同?

bash当我直接在shell中运行以下代码时,它会起作用:

SUBJECT="SUBJECT-"`date`;
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f  $MAIL_FROM $MAIL_TO;

但是当我尝试在如下脚本中运行它时......

mail.sh的内容:

#!/usr/bin/ksh

SUBJECT="SUBJECT-"`date`;
MAIL_FROM="[email protected]";
MAIL_TO="[email protected]";
MAIL_CC="[email protected]";
MAIL_FILE="/path/of/html/body.html";
(echo -e "Subject: $SUBJECT\nMIME-Version: 1.0\nFrom: $MAIL_FROM\nTo:$MAIL_TO\nCc:$MAIL_CC\nContent-Type: text/html\nContent-Disposition: inline\n\n";/bin/cat $MAIL_FILE) | /usr/sbin/sendmail -f  $MAIL_FROM $MAIL_TO;

我得到以下结果...

$ sh mail.sh #Mail sent but the body is in text format containing "-e Subject: SUBJECT-Wed Jan 30 04:45:42 EST....."以及呈现为文本的 HTML 代码。

$ bash mail.sh # Mail is received with mail body containing correct HTML format.

看来echo -ebash可以识别它。但是当我使用“#!/usr/bin/bash”并运行脚本时,$ sh mail.sh我仍然收到文本格式的邮件。

为什么会这样..?预先感谢您的建议。

答案1

索拉里斯号echo

$ echo -e foo
-e foo

不像大多数其他命令那样工作echo

$ bash
$ echo -e foo
foo 
$ which echo
/usr/bin/echo
$ type -t echo
builtin

内置bash版本按预期工作,ksh内置版本保留 Solaris 行为(在使用选项时,echo行为通常取决于系统)。ksh普通应该在, noecho中工作:ksh-e

$ ksh
$ echo -e "foo\nbar"
-e foo
bar
$ echo "foo\nbar"
foo
bar

所以你有一个索拉里斯问题,而不是一个发送邮件问题 :-)

您可以尝试printf一种更便携的方式来执行此操作。

相关内容