sendmail コマンドを使用して、変数に保存された html 形式の電子メールを送信します。

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

答え1

コマンド置換は行末を空白で置き換えます。

  • ;"代わりに使用";
  • 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

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

関連情報