web-dev-qa-db-ja.com

Linuxの「メール」コマンドを使用してHTMLメールを送信するにはどうすればよいですか?

mail -s "subject" [email protected] <test.htmlは機能しますが、プレーンテキストのメールのみが対象です。

Linuxコマンドmailを使用してHTMLメールを送信する正しい方法は何ですか?

71
pyth0ner
#!/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
14
Code Improver

先祖伝来のmailxでは、便利な方法は

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

ありがとう、 デュード
Fedora 17でテストされ、機能しました

7
daniel

追加する必要がありますContent-Typeこれを実現するためのメールのヘッダー。

echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" [email protected]

働くでしょう

5
Noufal Ibrahim

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が提案した方法よりも効果的です。

3
loentar

私は以下のスクリプトを使用して起こりました

#!/bin/ksh

(
echo "To: [email protected]"
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
1
Bhabatosh

私にとっては、SMTPサーバーなどの変数を指定する必要があったので、mailコマンドは以下のように機能しました。多くの投稿を検索したところ、本文の下をtext/htmlに変換するプロパティが見つかりました。今、私が受け取る電子メールはHTML形式です。

Content-Disposition:インライン

Unixバージョン:Red Hat Enterprise Linux Server release 6.6(Santiago)

最初。スクリプトに必要な情報を作成します(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>"

第二。そのスクリプトをmailコマンドにパイプします

./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")" [email protected]

これを行うことにより、メールで以下のような情報を取得します。

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:7bit 
 
 Value1 Value2

TestSql.shで行われたHTMLタグ付けによるValue1およびValue2

0
Vaibhav

別のスレッドで投稿されましたが、基本的には私たちのバージョンのmail/mailx(12.5+)では、添付ファイルが追加され、追加のヘッダーの代替パラメーターが見つからなかったため、メールの-aパラメーターは機能しなくなりました。私はsendmailを使うことでした。

以下は、私たちのために機能するbashスクリプトで実行するために作成した単純な1ライナーです。基本的にはContent-Type:text/html、subject、bodyを渡して動作します。

printf "Content-Type: text/html\nSubject: Test Email\nHTML BODY<b>test bold</b>" | sendmail <Email Address To>

変数からHTMLページ全体を作成したい場合、bashスクリプトで使用した別の方法は、以下のように変数を渡すことでした。

emailBody="From: <Email Address From>
Subject: Test
Content-Type: text/html; charset=\"us-ascii\"
<html>
<body>
body
<b> test bold</b>

</body>
</html>
"
echo "$emailBody" | sendmail <Email Address To>
0
Miburi