Bash 스크립트 이메일은 출력에서 ​​html 부분을 무시하지 않습니다.

Bash 스크립트 이메일은 출력에서 ​​html 부분을 무시하지 않습니다.

르. 나는 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.

예를 들어 mailDebian 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기본값으로 설정합니다. 보다매뉴얼 페이지-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 = 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: 명령을 찾을 수 없습니다. 내 코드가 각 서버의 날짜를 읽지 못하는 것 같은데 어떻게 해야 할지 모르겠습니다. 누구든지 도와줄 수 있나요? 도움을 주셔서 미리 감사드립니다.

관련 정보