使用mail命令时,shell不保留粗体格式

时间:2015-11-16 16:19:25

标签: shell email

我使用如下的shell脚本来获取部分粗体的字符串,并在终端中生成正确的字符串:

bold=$(tput bold)
normal=$(tput sgr0)
str="${bold}ERROR${normal} detail text"
echo -e "$str"

它不能与mail命令一起使用:

echo -e "$str" | mail -s "daily notification" 123@abc.com

我收到一封邮件“[1mERROR”,但不是“ ERROR ”,有人知道为什么吗?

1 个答案:

答案 0 :(得分:3)

普通ASCII(又名text/plain)中没有“粗体文本”这样的概念,这是mail及其近亲mailx等传统客户端发送的概念。如果你撰写text/enriched(从未真正起飞)或其他结构化格式,如text/htmltext/rtf等,那么该工具可用,但实现它的格式代码肯定不会是您使用tput生成的终端控件序列。目前,最简单的方法可能是用HTML撰写邮件,并使用可以正确设置Content-Type:标题的客户端来反映这一点。 (mailx的某些变体显然有这个,但有许多不兼容的变体没有。)

因此,以下可能有效(来源:https://stackoverflow.com/a/27693507/874188),如果您很幸运并且拥有兼容的mailx版本:

echo '<html><body><p>Test <b>bold</b> text</p></body></html>' |
mailx -a 'Content-Type: text/html' -s "Daily notification" 123@example.com

如果有一种通用格式化语言可以适应和扩展各种形状因素的终端,打印和图形显示的设施和惯例,那将是很好的;在不同的时间,Unix roff,TeX,PostScript(仍然是PDF的核心)和微软的RTF已经显示出一些希望,但他们都没有做到。目前,在我简陋的估计中,HTML是这一领域最有力的竞争者,但仍然不存在。

与此同时,一些现代图形电子邮件客户端将*bold*显示为粗体_italics_显示为斜体,即使在纯文本邮件中也是如此;甚至没有看到这个图形标记的用户通常也能理解和欣赏这些约定。