Email

使用 sendmail 命令發送儲存在變數中的 html 格式郵件

  • February 14, 2018

下面的腳本在我的 Linux 伺服器上執行良好。

(
echo "From: name@xyz.com";
echo "To: name2@xyz.com";
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: name@xyz.com";
echo "To: name2@xyz.com";
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

命令替換將用空格替換行尾。

  • 使用;"而不是";
  • 用於tr \; '\n'重新啟用行尾。
  • 使用 awk 將第一個字元縮進為空格
  • To:先放行

這導致某種醜陋

var1=$(
echo "To: name2@xyz.com;"
echo "From: name@xyz.com;"
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 程式碼(比如á轉向á),你知道現在郵件可以發送附件嗎?

man mail
   -A, --attach=FILE
          attach FILE
mail -A <(generate HTML result) foo@exemple.com

引用自:https://unix.stackexchange.com/questions/400858