르. 나는 HTML과 관련된 모든 것을 죽였습니다. 2개의 변수 R과 G(빨간색과 녹색을 나타냄)가 선언되었습니다.
내 이메일 상태[0;32mGLOBAL_STATUS = 정상, 분명히 색상이 아닙니다.
변수 GLOBAL_STATUS = OK -> no color에 주석을 달면 이메일로 수신됩니다.
아름답습니다. 녹색 GLOBAL_STATUS = OK로 표시된 이메일을 받을 수 있도록 도와주세요.
코드의 이 부분을 작성했지만 수신 예정인 이메일에 인쇄되지 않습니다. 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로 표시된 이메일을 받을 수 있도록 도와주세요.
발생할 수 있는 문제 중 하나는 Content-type
헤더일 수 있습니다. 메시지를 일반 텍스트( )로 표시하면 text/plain
그대로 표시될 가능성이 높습니다. 유형을 로 표시하려면 헤더를 변경해야 합니다 text/html
.
예를 들어 mail
Debian bsd-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 = KO.
이것을 시도했습니다 :
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: 명령을 찾을 수 없습니다. 내 코드가 각 서버의 날짜를 읽지 못하는 것 같은데 어떻게 해야 할지 모르겠습니다. 누구든지 도와줄 수 있나요? 도움을 주셔서 미리 감사드립니다.