回答:
mail
aroundには多くの異なるバージョンがあります。mail -s subject to1@address1 to2@address2 <body
(送信に関しては、これはすべてPOSIXの保証-s
であり、昔は存在しませんでした)を超えると、コマンドラインオプションが異なる傾向があります。追加のヘッダーを追加するのは必ずしも簡単ではありません。
UbuntuやDebianなどからのいくつかのmailx
実装では、そのためのオプションがあるため、簡単です。mailutils
bsd-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"
一般的なPOSIXではmailx
、ヘッダーを取得する方法がわかりません。
mail
またはを使用する場合はmailx
、次のことに注意してください。
mail
ありmailx
ます。mail
をmailx
扱い~
ます。テキストをパイプする場合はmail
、このテキストがで始まる行を含まないように調整する必要があります~
。とにかくソフトウェアをインストールする場合は、mail
/ Mail
/ よりも予測可能なものをインストールすることもできmailx
ます。たとえば、muttです。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
#!/bin/sh
(
echo "To: me@example.com"
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
家宝のmailxでは、便利な方法は
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
ありがとう、Dude
はFedora 17でテストを行い、働いた
Content-Type
これを実現するには、メールにヘッダーを追加する必要があります。
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
動作します
mailx
か?それにはオプションがあるかもしれません。それが機能しない場合。それが上手く行かない場合は、muttを使用することを検討できますが、コマンドラインがそれを実行するために何を切り替えるのかはわからないのですが。
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:
to 8bit
(これが本当に必要かどうかわからない)。HTMLメールを送信するには:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
この方法は、一時ファイルを作成せず、ストリームをオンザフライで修正するため、@ Gillesが提案するよりも効果的です。
私は以下のスクリプトを使用して発生しました
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
私にとっては、SMTPサーバーなどの変数を指定する必要があったため、メールコマンドは以下のように機能しました。私は多くの投稿を検索しましたが、本文をtext / htmlに変換するプロパティの下に見つかりました。これで、受信したメールはHTML形式になりました。
コンテンツの処理:インライン
Unixバージョン:Red Hat Enterprise Linux Serverリリース6.6(サンティアゴ)
最初。必要な情報をスクリプトに作成します(testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
第二に。そのスクリプトをメールコマンドにパイプする
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
これを行うことにより、私は以下のような情報をメールで受け取ります:
Content-Disposition:インラインMessage-ID:User-Agent:Heirloom mailx 12.4 7/29/08 MIME-Version:1.0 Content-Type:text / plain; charset = us-ascii Content-Transfer-Encoding:7ビット 値1値2
testSql.shで行われるHTMLタグ付けによるValue1およびValue2