使用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 命令。

相关内容