![使用sendmail命令发送存储在变量中的html格式邮件](https://linux22.com/image/120533/%E4%BD%BF%E7%94%A8sendmail%E5%91%BD%E4%BB%A4%E5%8F%91%E9%80%81%E5%AD%98%E5%82%A8%E5%9C%A8%E5%8F%98%E9%87%8F%E4%B8%AD%E7%9A%84html%E6%A0%BC%E5%BC%8F%E9%82%AE%E4%BB%B6.png)
下面的脚本在我的 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 代码(例如á
转向á
),您知道现在邮件可以发送附件吗?
man mail
-A, --attach=FILE attach FILE
mail -A <(generate HTML result) [email protected]
答案2
从变量定义中删除 echo 命令。