【问题标题】:shell does not keep bold format when using mail command使用邮件命令时,shell 不保持粗体格式
【发布时间】:2015-11-16 16:19:24
【问题描述】:

我使用下面的 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”的电子邮件,有人知道为什么吗?

【问题讨论】:

  • 因为tput 的输出是使当前终端以粗体显示所必需的控制代码,并且输入电子邮件的内容没有任何意义。
  • @EtanReisner,感谢您的快速回答。好的,这是有道理的。那么是否可以在邮件中添加格式呢?
  • 是的,使用 HTML 电子邮件和 HTML 格式。

标签: shell email


【解决方案1】:

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

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

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 的核心)和 Microsoft 的 RTF 已经显示出一些希望,但它们都没有成功。目前,据我估计,HTML 是该领域最强大的竞争者,但还远远不够。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2013-09-14
    • 2015-03-08
    • 2011-07-16
    • 2013-01-08
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多