我在 ksh 中有以下行代码:
echo -e "$SUBJECT"|/usr/sbin/sendmail -f [email protected] -t [email protected]
但我仍然把它$SUBJECT
放在身体里,而不是真正的主题。它出什么问题了?
答案1
有时发送所有标头会更容易echo
例如
{
echo From: xxxx
echo To: yyyy
echo Subject: Foobar
echo
echo This is the message
} | /usr/lib/sendmail -t
答案2
主题是标题的一部分,请尝试:
echo -e "Subject:$SUBJECT" | /usr/sbin/sendmail -f [email protected] -t [email protected]
答案3
你真的想避开echo -e
这里。事实上,选择它的原因有很多printf
,其中最重要的就是方便。
printf '%s\n' "Subject: $subject" \
"From: I am a Sender <[email protected]>" \
"To: Recipient <[email protected]>" \
"" \
"This is the body of the message." \
"It spans multiple lines." |
sendmail -oi -t
空行 ( ""
) 将标头与消息正文分隔开。简单的 SMTP 消息只是纯文本,仅 US-ASCII。
它能做的事情仍然相当有限。如果您需要使用非 ASCII 字符集或重要的 MIME 结构,您确实不希望将字符串一个接一个地粘贴。某些版本mail
或允许您使用附件组装适当的 MIME 消息,或者如果您有更复杂的需求,mailx
则可以查看。mutt
常见错误包括
- 奇怪地坚持省略
<
地址标头中 之前的空格,或者在某些标头字段周围放置奇怪的引号 - 忘记标题和正文之间的空行
- 不明白正文(在没有更多 MIME 标头的情况下)只是纯文本,而不是 HTML 或多部分
- 在正文中放入非常长的行(SMTP 允许每行少于 1000 个字符;同样,使用适当的 MIME 封装来打破此限制)
- 尝试在不声明字符集的情况下使用 Unicode(你猜对了,学习并使用 MIME 来做到这一点)
答案4
echo -e "Subject:$sub" |sendmail -f [email protected] -t [email protected]. < body_detail.txt