BashスクリプトEメールは出力のhtml部分を無視しません。

BashスクリプトEメールは出力のhtml部分を無視しません。

ル。私はHTMLに関連するすべてを殺しました。 2つの変数RとG(赤と緑を表す)が宣言されました。

マイメールステータス[0;32mGLOBAL_STATUS=正常、明らかに色ではありません。

変数 GLOBAL_STATUS=OK -> no color にコメントを付けると、メールで受信されます。

美しいです。グリーンGLOBAL_STATUS = OKとマークされたEメールを受け取るのに役立ちます。


コードのこの部分を作成しましたが、受信予定のメールには印刷されません。 GLOBAL_STATUS = OK(緑)☹

メールの上部に次のように表示されます。<h1> <span style='color:green;'> GLOBAL_STATUS = OK </span></h1><br/><br/><br/>

電子メールの終わり:<html> <body> <br><br><br> </body> </html>

私は何が間違っていましたか?HTML、本文などを削除してみましたが、電子メールの先頭はまだ同じです。<h1> <span style='color:green;'> GLOBAL_STATUS = OK </span></h1><br/><br/><br/>

#echo "<html> ">>$LOG
#echo "<body>" >> $LOG
#echo "<br><br><br>" >> $LOG
#echo "<br><br><br>" >> $LOG
R='\033[0;31m'
G='\033[0;32m'
content="tmp.txt"
global_status=0
while read line; do
   if [[ "$line" == *"KO"* && "$global_status" == "0" ]]; then
         echo -e "\n\n\n $line";
         ((global_status=!global_status));
         echo -e "\n $global_status"
   fi
   echo "$line" >> $content
done < $LOG

#echo "<h1>" > $LOG
if [ "$global_status" -eq 0 ]; then
     echo -e "${G}GLOBAL_STATUS = OK" > $LOG
else 
     echo -e "${R}GLOBAL_STATUS = KO" > $LOG
fi
cat $content >> $LOG
rm tmp.txt
#echo "</body>" >> $LOG
#echo "</html>" >> $LOG
mail -s "Check Back" [email protected] < /home/check_back.log

答え1

これに焦点を当ててください:

美しいです。グリーンGLOBAL_STATUS = OKとマークされたEメールを受け取るのに役立ちます。

発生する可能性のある問題の1つはContent-typeヘッダーです。メッセージをプレーンテキスト()で表示すると、text/plainそのまま表示される可能性が高くなります。タイプをとしてマークするには、ヘッダーを変更する必要がありますtext/html

たとえば、mailDebianbsd-mailxパッケージのコマンドを使用すると、少なくともGmailが受け取るコマンドと同じように機能する必要があります。

#!/bin/sh

[email protected]
mail -s "colortest" -a 'Content-Type: text/html; charset="UTF-8"' "$emailaddr" << EOF
<html>

<h1> <span style='color:green;'>  GLOBAL_STATUS = OK </span></h1>
</h1>
<p>
Blah blah...
</p>

</html>
EOF

少なくともこの特定のバージョンは、オーバーライドされない限り、mailコンテンツタイプをtext/plainデフォルト値に設定します。よりマニュアルページ-aMIME ヘッダーに関する注意事項です。

気づくこのツールの異なるバージョンはmail異なる場合があります。、タイトルの設定方法が異なる場合があります。また、HTML構文をまったく確認していません。実際に使用する正しいDOCTYPEなどを確認したい場合があります。Content-Transfer-EncodingメッセージにASCII以外の文字を使用している場合は、エンコード(ヘッダー)を確認することもできます。

text/plainまた、これを正しく実行するには、バリアントを含むいくつかの部分で構成されるMIMEメッセージを生成する必要がありますtext/html。私もそこに行くつもりはない。

コードの場合、入力ファイルで文字列を探してKOファイル全体を渡す場合は、grepシェルループの代わりに使用できます。おそらくこの方向に何かがあるでしょう(テストされていません):

#!/bin/sh

[email protected]
status=XXX
color=xxx
subject=test
inputfile=foo.txt
msgfile=$(mktemp)
if grep -qe KO "$inputfile"; then
    status='GLOBAL_STATUS = KO'
    color=red
else
    status='GLOBAL_STATUS = OK'
    color=green
fi

> "$msgfile"
cat <<EOF >> "$msgfile" 
<html>
<h1><span style='color:$color;'> $status </span></h1>
</h1>
<pre>
EOF
cat "$inputfile" >> "$msgfile"
cat <<EOF >> "$msgfile" 
</pre>
</html>
EOF

mail -s "$subject" -a 'Content-Type: text/html; charset="UTF-8"' \
    "$emailaddr" < "$msgfile"

rm -f "$msgfile"

答え2

したがって、このスクリプトの最後のステップは、サーバーの日付を比較し、それを今日の日付と比較することです。サーバーの日付が今日の日付ではない場合、DATE = JA。

これを試しました:

LOG="/home/check_back.log"
date="date +%d-%m-%y -r"
datemail=$(date "+%d-%m-%y")
>LOG

For each server the date is read and printed in the email with: 
echo " " && $date /tmp/check_back.log"  >>$LOG

if [[ $date -lt $datemail ]]; then
    check_date='DATE = KO'
    color='red'
fi

エラーが発生しました: [[date +%d-%m-%y -r: コマンドが見つかりません。私のコードが各サーバーの日付を読み取れないようですが、どうすればよいかわかりません。誰でも助けることができますか?助けてくれてありがとう。

関連情報