web-dev-qa-db-ja.com

Linuxコマンドラインを使用してHTMLメールを送信する方法

HTML形式のメールを送信する必要があります。 Linuxのコマンドラインとコマンド「mail」しかありません。

現在使用しているもの:

echo "To: [email protected]" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" [email protected] < /var/www/report.csv

しかし、私のメールエージェントでは、プレーン/テキストしか取得できません。

alt text

57
Oleh Herych

これは私のために働いた:

echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject\nContent-Type: text/html")" [email protected]
49
Dude

私のバージョンのメールには--appendがなく、echo -e \n- trickにはあまりにもスマートです(\ nをスペースに置き換えるだけです)。ただし、-aがあります。

mail -a "Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.html
42
Ole Tange

Tmp.htmlというファイルを作成し、次の行をその中に入れます。

<b>my bold message</b>

次に、これらすべてをコマンドラインに貼り付けます:(括弧とすべてを含む)。

(
  echo To: [email protected]
  echo From: [email protected]
  echo "Content-Type: text/html; "
  echo Subject: a logfile
  echo
  cat tmp.html
) | sendmail -t

メールが発送されます。また、メッセージは<b>タグではなく太字で表示されました。

ソース:
bashコマンド「sendmail」を使用してhtmlメールを送信する方法?

26
Eric Leschinski

問題は、そのような「メール」にファイルをリダイレクトするとき、メッセージ本文にのみ使用されることです。ファイルに埋め込んだヘッダーは、代わりに本文に挿入されます。

試してください:

mail --append="Content-type: text/html" -s "Built notification" [email protected] < /var/www/report.csv

--appendを使用すると、任意のヘッダーをメールに追加できます。ここで、content-typeとcontent-dispositionを指定する必要があります。ファイルにToヘッダーとSubjectヘッダーを埋め込む必要はありません。また、-appendで指定する必要もありません。コマンドラインで既に暗黙的に設定しているためです(-sは件名で、 [email protected]は自動的にToになります)。

8
Marc B

OS X(10.9.4)では、catが機能し、メールが既にファイルにある場合は簡単です:

cat email_template.html  | mail -s "$(echo -e "Test\nContent-Type: text/html")" [email protected]
7
jamesnotjim

Heirloom-mailxを使用すると、sendmailプログラムをフックスクリプトに変更し、そこでヘッダーを置き換えてから、sendmailを使用できます。

私が使用するスクリプト(~/bin/sendmail-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メールを送信するには:

mail -Ssendmail='~/bin/sendmail-hook' \
    -s "Built notification" [email protected] < /var/www/report.csv
3
loentar

非常に古い質問ですが、これに関する質問をグーグルで検索したとき、上位にランクされました。

ここで答えを見つけてください:

シェルスクリプトを使用してHTMLメールを送信する

2
Magge

「追加」モードのリダイレクト>>ではなく>を使用する必要があります

2
ghostdog74

本当に簡単な解決策を見つけました。メールコマンドに修飾子-aContent-Type:text/htmlを追加します。

あなたの場合:

mail -aContent-Type:text/html -s "Built notification" [email protected] < /var/www/report.csv
2
Muc

で試してください:

echo "To: [email protected]" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "MIME-Version: 1.0" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv
echo "Content-Disposition: inline" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" [email protected] < /var/www/report.csv
1

私はgitのpost_receiveフックの1つで同様の問題(メールに関する問題)に苦しんでいて、最終的に私はsendmailが実際にその種のものに対してよりうまく機能すること、特に電子メールの構築方法を少し知っている場合(そしてそれがあなたが知っているようだ)。私はこの答えが非常に遅いことを知っていますが、おそらく他の人にとっても役に立つでしょう。 heredoc演算子と、変数を展開する機能を使用して、インラインスクリプトも実行できるようにしました。これを確認してください(bashスクリプト):

#!/bin/bash
recipients=(
    '[email protected]'
    '[email protected]'
#   '[email protected]'
);
sender='[email protected]';
subject='Oh, who really cares, seriously...';
sendmail -t <<-MAIL
    From: ${sender}
    `for r in "${recipients[@]}"; do echo "To: ${r}"; done;`
    Subject: ${subject}
    Content-Type: text/html; charset=UTF-8

    <html><head><meta charset="UTF-8"/></head>
    <body><p>Ladies and gents, here comes the report!</p>
    <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre>
    </body></html>
MAIL

いくつかの出力を生成し、覚えておくためのMAIL部分のバックティックの注意、<<-演算子は行の先頭からタブのみ(スペースではない)を削除するため、その場合、コピーと貼り付けは機能しません(インデントを置き換える必要があります)適切なタブで)。または、<<演算子を使用して、インデントをまったく作成しません。これが誰かを助けることを願っています。もちろん、MAILパートの外側でバックティックを使用し、出力を何らかの変数に保存して、後でMAILパートで使用することができます(好みと読みやすさの問題)。 #!/bin/bashはすべてのシステムで常に機能するとは限りません。

1
Cromax