bash
シェルから直接次のコードを実行すると機能します。
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.
bashがそれを認識しているようですecho -e
。ただし、「#!/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
通常はecho
働くべきです。いいえ:ksh
-e
$ ksh
$ echo -e "foo\nbar"
-e foo
bar
$ echo "foo\nbar"
foo
bar
だからあなたはソラリス質問、一つでもなくメールを送信質問:-)
printf
これを行うには、より移植性の高い方法を試すことができます。