Linux 'mail' 명령을 사용하여 HTML 이메일을 보내는 방법은 무엇입니까?

Linux 'mail' 명령을 사용하여 HTML 이메일을 보내는 방법은 무엇입니까?

mail -s "subject" [email protected] <test.html 작동하지만 일반 텍스트 이메일에만 해당됩니다.

Linux 명령을 사용하여 HTML 이메일을 보내는 올바른 방법은 무엇입니까 mail?

답변1

주변에는 다양한 버전이 있습니다 mail. 초월할 때 mail -s subject to1@address1 to2@address2 <body(보내면 그게 다야)POSIX보증 - -s존재하지도 않습니다.과거), 명령줄 옵션이 다른 경우가 많습니다. 추가 헤더를 추가하는 것이 항상 쉬운 것은 아닙니다.

  • mailx다음과 같은 일부 구현을 통해mailutils우분투 에서또는데비안bsd-mailx, 옵션이 있기 때문에 쉽습니다.

    mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
    
  • 와 함께가족 가보 mailx, 편리한 방법이 없습니다. 임의의 헤더를 삽입할 수 있는 한 가지 방법은 editheaders=1외부 편집기(스크립트일 수 있음)를 설정하고 사용하는 것입니다 .

    ## Prepare a temporary script that will serve as an editor.
    ## This script will be passed to ed.
    temp_script=$(mktemp)
    cat <<'EOF' >>"$temp_script"
    1a
    Content-Type: text/html
    .
    $r test.html
    w
    q
    EOF
    ## Call mailx, and tell it to invoke the editor script
    EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF
    ~e
    .
    EOF
    rm -f "$temp_script"
    
  • 일반과 함께POSIXmailx, 제목을 얻는 방법을 모르겠습니다.

혹시 사용하시거나 mail기억 mailx하고 계시다면

  • 이는 특정 Linux 배포판 내에서도 이식 가능하지 않습니다. 예를 들어 Ubuntu와 Debian에는 다양한 mail대안이 있습니다 mailx.
  • 메시지를 작성할 때 및 로 시작하는 줄은 mail명령 mailx으로 간주됩니다 ~. 에 텍스트를 파이프하는 경우 mail텍스트에 로 시작하는 줄이 포함되지 않도록 정렬해야 합니다 ~.

어쨌든 소프트웨어를 설치하려면 mail// 보다 Mail더 예측 가능한 것을 설치하는 것이 좋습니다 mailx. 예를 들어,바보. Mutt를 사용하면 다음 옵션을 사용하여 입력에 대부분의 헤더를 제공할 수 있습니다 -H:하지만Content-Type, mutt 옵션을 통해 설정해야 합니다.

mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html

아니면 전화해도 돼요sendmail곧장. 여러 버전이 있지만 sendmail모두 sendmail -t이메일에서 수신자 목록을 읽는 가장 간단한 방법으로 이메일 보내기를 지원합니다. (나는 그들이 모두 그것을 지원한다고 생각하지 않습니다 Bcc:.) 대부분의 시스템에서 sendmail일반적인 시스템은 아니지만 $PATH또는 ./usr/sbin/usr/lib

cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html

EOF

답변2

#!/bin/sh

(
echo "To: [email protected]"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t

답변3

Heirloom mailx를 사용하면 편리한 방법은 다음과 같습니다.

mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" [email protected] < /tmp/htmlmail.txt

감사해요,남성
Fedora 17에서 테스트 및 실행

답변4

heirloom-mailx를 사용하면 sendmail 프로그램을 후크 스크립트로 변경하고 헤더를 바꾼 다음 sendmail을 사용할 수 있습니다.

내가 사용하는 스크립트( ~/bin/sendmail-mailx-hook):

#!/bin/bash

sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@

이 스크립트는 메시지 헤더의 값을 다음과 같이 변경합니다.

  • Content-Type:도착하다text/html; charset=utf-8
  • Content-Transfer-Encoding:( 8bit이것이 실제로 필요한지는 확실하지 않습니다).

HTML 이메일을 보내려면:

mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" [email protected] < test.html

이 방법은 임시 파일을 생성하지 않고 스트림을 즉시 수정하므로 @Gilles가 제안한 방법보다 더 효율적입니다.

관련 정보