ル。私は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
。
たとえば、mail
Debianbsd-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
デフォルト値に設定します。よりマニュアルページ-a
MIME ヘッダーに関する注意事項です。
気づくこのツールの異なるバージョンは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: コマンドが見つかりません。私のコードが各サーバーの日付を読み取れないようですが、どうすればよいかわかりません。誰でも助けることができますか?助けてくれてありがとう。