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 -e
bash可以识别它。但是当我使用“#!/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
一种更便携的方式来执行此操作。