web-dev-qa-db-ja.com

sendmailコマンドを使用して、変数に保存されているHTML形式のメールを送信します

以下のスクリプトは、私のLinuxサーバーで正常に動作します。

(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Test Subject";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "<html><head><title>HTML E-mail</title></head>
<body><p>Test Body Message</p></body></html>";
) | sendmail -t

しかし、以下のようにスクリプトを変更すると、「ヘッダーに受信者アドレスが見つかりません」というエラーが表示されます。 変数を使用して以下のコードを実行することは可能ですか。sendmail以外のファイルや他のメールコマンドを使用したくありません

var1='(
echo "From: [email protected]";
echo "To: [email protected]";
echo "Subject: Test Subject";
echo "Content-Type: text/html";
echo "MIME-Version: 1.0";
echo "";
echo "<html><head><title>HTML E-mail</title></head>
<body><p>Test Body Message</p></body></html>";
)'

echo ${var1} | sendmail -t
2
Gvtha

コマンド置換は行末をスペースで置き換えます。

  • ;"の代わりに";を使用してください
  • 行の終わりを再利用するには、tr \; '\n'を使用します。
  • awkを使用して、最初の文字をスペースとしてインデント解除します
  • To:行を最初に

この結果、どういうわけか醜い

var1=$(
echo "To: [email protected];"
echo "From: [email protected];"
echo "Subject: mail HTML ;"
echo "Content-Type: text/html;"
echo "MIME-Version: 1.0;"
echo ";"
echo "<html><head><title>HTML E-mail</title></head>
body><p>Test Body Message</p></body></html>"
)

## can be one-lined, pipe symbol (|) continue line.
echo ${var1} | tr \; '\n' |
awk 'length == 1 || NR == 1 {print $0} length && NR > 1 { print substr($0,2) }'  |
sendmail -t

しかし、これはいくつかのhtmlコード(&aacute;&aacuteに変わるなど)を壊します。今日、メールで添付ファイルを送信できることを知っていますか?

man mail
   -A, --attach=FILE
          attach FILE
mail -A <(generate HTML result) [email protected]
2
Archemar

変数定義からエコーコマンドを削除します。

0
RubberStamp