메일 출력에 Content-Type: text/html을 사용하도록 "at" 및 "sendmail"을 구성하는 방법

메일 출력에 Content-Type: text/html을 사용하도록 "at" 및 "sendmail"을 구성하는 방법

텍스트 대신 HTML 출력을 생성하기 위해 일부 배치 프로그램을 업그레이드하고 있습니다. 일괄 프로그램은 at 명령을 사용하여 실행된 다음 sendmail 명령을 사용하여 모든 출력을 사용자에게 보냅니다.

at 명령이 이메일의 헤더를 형성하기 때문에 일괄 명령의 출력이 HTML 형식임을 "at" 명령이나 "sendmail"에 어떻게 표시해야 할지 혼란스러워졌습니다. "at"과 "sendmail"의 조합은 헤더를 생성하고 헤더를 줄바꿈으로 종료하므로 헤더 정보(예: Content-Type)의 포함은 본문의 일부로 간주됩니다.

내 기대는 최신 클라이언트가 메시지를 읽을 때 콘텐츠 유형이 "text/html"로 올바르게 설정된다는 것입니다.

명령줄 옵션, 환경 변수, bash/perl/awk/scripts, 새로운 배치 실행기에 대한 제안을 포함한 모든 솔루션에 만족합니다.

답변1

at단순히 출력을 인쇄하고 메시지 전송 에 의존하는 대신 스크립트에서 메시지를 명시적으로 보냅니다 . HTML을 파일에 쓰고 이를 사용하여 mutt추가하고 메시지를 보냅니다.

또는 헤더, MIME 구조 등을 사용하여 메시지를 작성하고 에 파이프하는 것이 더 쉬운 방법입니다 sendmail -t -i.mutt

답변2

나는 당신이 찾고있는 것을 기본적으로 수행하는 것이 가능하지 않다고 생각합니다. 나는 at직장에서 결과 메시지 헤더를 실제로 변경하는 구현을 알지 못합니다 .

그러나 HTML 출력을 생성하는 하위 프로세스로 스크립트를 실행하고 해당 출력을 파일로 리디렉션하고 필요한 경우 주변 헤더를 추가한 다음 전체 결과 텍스트 Blob을sendmail -bm 있는 그대로( sendmail발신자와 수신자 필드를 찾는 데 의존합니다).

매우 인위적인 예처럼:

>tempfile
echo 'From: nobody@localhost' >>tempfile
echo 'To: root@localhost' >>tempfile
echo 'Subject: list of files' >>tempfile
echo >>tempfile
ls -lh $HOME >>tempfile
echo 'Add more data here' >>tempfile
sendmail -bm <tempfile && rm -f tempfile

당신이 원하는 것을 대략적으로 할 수 있습니다. (물론 출력이 HTML임을 나타내는 모든 것을 포함하도록 위의 내용을 조정해야 합니다.)

답변3

"at" 소스 코드를 읽어 보면, 이는 at 명령으로 생성된 메일 헤더에 콘텐츠 유형 필드를 포함하도록 변경하는 매우 간단한 패치입니다.

완전한 대답은 at 명령이 두 개의 허용된 값(기본값은 "plain", 기본값은 "html")에 대해 확인하고 검증하는 환경 변수(예: AT_CONTENT_TYPE) 또는 명령줄 인수(예: -c)를 추가하는 것일 수 있습니다. 유효한 대안).

물론 이렇게 하면 구현이 POSIX와 호환되지 않게 됩니다.at에 대한 POSIX 사양따라서 GNU General Public License를 준수하는 명령을 복사하고 이름을 바꾸면 이점을 얻을 수 있습니다.

관련 정보