centos 如何在邮件命令中同时使用html和纯文本标题?

6psbrbz9  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(50)

我需要发送一封邮件使用邮件命令在centos。身体作为HTML输入和附件将是一个.txt文件。

cat email_temp.html | mail -a "CH_sla_list" -s "$(echo -e "(RackTable Report)\nContent-type: text/html;")" [email protected]

字符串
如果我执行上面的命令,我会收到一封内联邮件(显示附件文件内容)。

cat email_temp.html | mail -a "CH_sla_list" -s "$(echo -e "RackTable Report")" [email protected]


如果我执行上面的一个,我会收到一封带有附件的邮件,但是我的HTML输入在邮件中显示为文本。
我的要求是使用HTML和文本在同一个标题在一个命令或任何变通办法将不胜感激。
注意:仅供参考,我使用的是centos-release-7-0.1406.el7.centos.2.5.x86_64

xdyibdwo

xdyibdwo1#

第一个命令基本上利用了一个漏洞,它允许你通过传入一个文本换行符,后面跟着你想要添加的头来注入任意头-顺便说一句,这在许多平台上的mail的新版本中已经被阻止了。
(The当然,没有嵌入文字换行符的echo根本没有任何用处;这只是echo的一种异常糟糕的无用用法。)
从理论上讲,如果你知道你想要创建什么样的头结构,你可以用嵌入的换行符技巧将消息的一半作为一个“走私”的头序列、正文等传递进来;但是在这一点上,mail不再真正起到任何有用的作用,因为你正在做它的大部分工作。
我的建议是切换到一个适当的MIME功能的邮件客户端,如mutt,它可以轻松地允许您从命令行发送多个MIME正文部分。
如果你不能做到这一点,这里有一个简单的粗糙的shell脚本。

# sendmail might be hidden in either of these
PATH=$PATH:/usr/sbin:/usr/lib

( printf '%\n' \
    'From: My right honorable self <[email protected]>' \
    'To: [email protected]' \
    'Subject: RackTable Report' \
    'Content-type: multipart/mixed; boundary=_fooobar_' \
    'Mime-Version: 1.0' \
    '' \
    '--_fooobar_' \
    'Content-type: text/html' \
    ''
  cat email_tmp.html
 printf '%\n' \
    ''
    '--_fooobar_' \
    'Content/type: text/plain' \
    'Content-disposition: attachment; name="CH_sla_list"'
    ''
  cat CH_sla_list
 printf '%\n' \
    '' \
    '--_fooobar_--' )|
sendmail -oi -t

字符串
显然,我不得不对你想要的电子邮件结构进行有根据的猜测。
如果你想适应这种情况,请注意单引号会逐字引用所有字符串。如果你想扩展一个变量,则需要双引号,如"To: $1"
这有许多简化的假设,并且不能可靠地科普长文本行(超过900个字符),重音字符或非ASCII符号(您可以使用A-z,0-9和基本标点符号;但没有 curl 引号,排版破折号或空格,或除$之外的货币符号)。它是7位ASCII,就像互联网刚刚出现时你爷爷的电子邮件一样。
如果你知道你在做什么,这些限制可以放宽,但是如果你的需求很重要,可能会考虑安装一个第三方实用程序或者用某种语言编写一个脚本,至少有适当的MIME库。有一些相当不错的第三方实用程序,它们或多或少提供了命令行mutt的一些好的部分,但是它们都没有mutt本身那么流行;但是如果你有Python和一个“做我想做的”电子邮件库,编写一个类似的自定义实用程序也不难。

相关问题