我有一个看起来像这样的邮件命令:
sh ~/filter.sh ~/build/site_build.err | mail -s "Site updated." me\@site.com
bash脚本有一些命令,主要是grep,用于过滤stderr。当我们的构建过程完成时,它会将过滤后的内容发送给我。
它曾用于在邮件正文中发送文件内容,但现在它作为附件发送,我不想要。
当我删除它在邮件正文中再次发送给我的大部分文本时,我已经推断这与邮件大小有关 - 这是正确的吗?
无论如何,无论在什么情况下,如何防止Unix将消息内容作为附件发送?
谢谢!
答案 0 :(得分:1)
仍然不确定因为很多事情可能导致mail
显然将输入作为附件发送。但在许多Linux发行版中,mail
是heirloom mailx的别名。众所周知,如果输入中存在任何不可打印的字符,则对其输入进行编码。
一旦找到非标准字符,就会在邮件中添加以下标题:
Content-Type: application/octet-stream
Content-Transfert-Encoding: base64
并且邮件的文本实际上是64位编码的。这不是一个真正的附件,但许多邮件读者将这些邮件视为一个带有未命名附件的空体。
如果您的LANG环境变量声明了一个可以使用非7位字符(éèûôüö...)的语言环境,那么邮件似乎足够聪明,可以声明扩展字符集(针对fr语言环境的ISO-8859-1)并引用 - 可打印的编码。因此,即使在消息中使用(至少是西欧)非7位ASCII字符,如果没有控制字符,则应该正常发送邮件。
另一种方法是从filter.sh
的输出中过滤掉所有不可打印的字符,最后一次机会解决方案是不使用邮件并直接使用sendmail。
(参考:answer of mine到另一篇文章,但那篇文章涉及java)