Cron 작업은 HTML을 출력합니다. 메일을 HTML로 보내는 방법

Cron 작업은 HTML을 출력합니다. 메일을 HTML로 보내는 방법

실패하면 HTML을 출력하는 cron 작업이 있습니다. 성공하면 아무 것도 출력되지 않으며, 이 경우 메일을 받지 못합니다. 실패하고 HTML을 작성하면 cron이 나에게 메일을 보내지만 메일은 일반 텍스트로 제공되어 읽기가 어렵습니다.

나는 두 가지 부분적인 해결책을 생각해 냈지만 그것이 실제로 잘 작동하도록 만드는 방법을 찾지 못했습니다. 첫 번째는 다음과 같이 출력 상단에 MIME 지정자를 인쇄하도록 하는 것입니다.

Mime-Version: 1.0
Content-Type: text/html
<html>...

그런 다음 cron에서 다음과 같이 실행합니다.

my-job | sendmail my.name

가장 큰 문제는 텍스트가 전혀 없는 경우에도 메일을 받는다는 것입니다. 두 번째 문제는 스크립트에 MIME 유형 행을 추가해야 했다는 것입니다. 이는 일종의 잘못된 위치입니다(우아하지는 않지만 허용할 수 있음).

그런 다음 텍스트가 없으면 전송을 건너뛸 수 있는 옵션이 있는 mail또는 를 사용해 보았습니다 .mailx-E

my-job | mail -E my.name

이는 cron이 기본적으로 수행하는 작업과 거의 같습니다. 그러나 나는 mail/mailx로 MIME 유형을 설정하는 방법을 찾을 수 없습니다! 온라인의 일부 참조에서는 옵션을 사용하여 완료되었다고 말하지만 -a내 시스템(Fedora 16)에서는 다른 시스템에서 보이는 것처럼 mail -a헤더 행이 아닌 첨부 파일 이름을 사용합니다 .Content-Type: text/html

임시 파일을 만들고 크기를 확인하는 등의 작업을 원하지 않습니다. 다음 중 하나를 원하는 것 같습니다.

  • cron 메일을 HTML로 읽을 수 있게 만드는 방법입니다.
  • sendmail이 빈 메시지를 건너뛰도록 합니다.
  • mailx에서 MIME 유형을 설정하려면.
  • Fedora에 기본적으로 설치되는 다른 프로그램을 사용하는 다른 접근 방식입니다.

답변1

명령줄에서 수신자를 지정하는 대신 sendmail을 호출하여 -t스크립트에서 to:헤더를 생성하도록 하세요. (해당하는 동안 헤더를 작성하는 것이 좋습니다 subj:.) 출력이 없으면 수신자가 없으므로 메일도 없습니다.

답변2

가장 쉬운 방법은 스크립트 내에서 sendmail fom을 호출하는 것입니다. 이렇게 하면 메일이 전송되는지 여부를 제어할 수 있습니다.

또는 스크립트가 성공 코드를 반환하도록 만들 수 있습니다.실패하다스크립트가 "올바르게" 종료되는 경우에만 sendmail을 실행하십시오.

$ my-job >/tmp/message && cat /tmp/message | sendmail 

이 명령은 &&첫 번째 명령이 성공적으로 종료된 경우에만( exit 0BASH 또는 exit(0)PERL에서) 다음 명령을 실행하도록 bash에 지시합니다. 실패할 경우 상태 0으로 종료하도록 스크립트에 지시하면 sendmail 명령이 실패할 때만 실행되도록 할 수 있습니다.

답변3

다음과 같이 콘텐츠 유형을 지정할 수 있습니다.

mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"

관련 정보