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以下のいくつかの実装を通じてmailutilsUbuntuからまたはDebianbsd-mailx、オプションがあるので簡単です。

    mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
    
  • とともに家族家宝 mailx、便利な方法はありません。任意のヘッダーを挿入する1つの方法は、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が提案した方法よりも効率的です。

関連情報