sendmail 명령을 사용하여 변수에 저장된 html 형식 이메일을 보냅니다.

sendmail 명령을 사용하여 변수에 저장된 html 형식 이메일을 보냅니다.

아래 스크립트는 내 Linux 서버에서 제대로 실행됩니다.

(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Test Subject";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "<html><head><title>HTML E-mail</title></head>
<body><p>Test Body Message</p></body></html>";
) | sendmail -t

그런데 아래와 같이 스크립트를 수정하면 "헤더에 수신자 주소를 찾을 수 없습니다"라는 오류가 나옵니다.변수를 사용하여 아래 코드를 연습할 수 있습니까? sendmail을 제외한 파일이나 다른 메일 명령을 사용하고 싶지 않습니다..

var1='(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Test Subject";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "<html><head><title>HTML E-mail</title></head>
<body><p>Test Body Message</p></body></html>";
)'

echo ${var1} | sendmail -t

답변1

명령 대체는 줄 끝을 공백으로 대체합니다.

  • ;"대신 사용";
  • tr \; '\n'줄 끝을 다시 활성화하는 데 사용됩니다 .
  • awk를 사용하여 공백으로 첫 번째 문자 들여쓰기 취소
  • To:실을 먼저 넣어주세요

이는 어느 정도의 추악함을 가져옵니다.

var1=$(
echo "To: [email protected];"
echo "From: [email protected];"
echo "Subject: mail HTML ;"
echo "Content-Type: text/html;"
echo "MIME-Version: 1.0;"
echo ";"
echo "<html><head><title>HTML E-mail</title></head>
body><p>Test Body Message</p></body></html>"
)

## can be one-lined, pipe symbol (|) continue line.
echo ${var1} | tr \; '\n' |
awk 'length == 1 || NR == 1 {print $0} length && NR > 1 { print substr($0,2) }'  |
sendmail -t

그러나 일부 HTML 코드(예: &aacute;리디렉션 &aacute)가 손상되어 이제 메일이 첨부 파일을 보낼 수 있다는 것을 알고 계셨습니까?

man mail
   -A, --attach=FILE
          attach FILE
mail -A <(generate HTML result) [email protected]

답변2

변수 정의에서 echo 명령을 제거합니다.

관련 정보