我一直在使用
mail -s "here is a log file" "person@example.com" < log/logfile.log
过去通过标题:
User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit
但是现在的文件更长,我得到noname附件,因为有了这个:
User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64
所以,如果一切都失败了,请检查手动man mail
…
NAME mailx - send and receive Internet mail SYNOPSIS mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account] [-S variable[=value]] to-addr . . .
这些选项都没有看起来有用,所以如何强制Content-Type: text/plain
?
手册页是一个很好的开始! 继续阅读,直到找到MIME TYPES
部分,并密切注意以下几点:
否则,或者如果文件名没有扩展名,则使用text / plain或application / octet-stream的内容类型,第一个用于文本或国际文本文件,第二个用于包含除换行符和水平之外的其他格式字符的文件制表符。
所以,如果你的消息中包含除了换行符和制表符之外的“格式化字符”(通常意味着控制字符),它将自动被分类为application/octet-stream
。 我敢打赌,如果你仔细观察数据,你会发现一些控制字符在四处漂浮。
你可以解决这个…
-a
)而不是主消息正文,并设置您的~/.mime.types
文件以将*.log
文件标识为文本/纯文本。 tr
东西过滤出控制字符。 使用另一个MUA(如mutt
发送邮件。 事实上,你可以自己编写一个消息,并直接发送到sendmail
:
( echo To: person@example.com echo From: you@example.com echo Subject: a logfile echo cat logfile.log ) | sendmail -t
我最近得到了类似的问题,最后得到了一个更短的解决方案:
cat -v log/logfile.log | mail -s "here is a log file" "person@example.com"
有关mailx的讨论的更多细节。
在更改为Ubuntu Precise 12.04之后,我遇到了一些麻烦,让我的自动电子邮件脚本运行。 我不知道,当Ubuntu(或Debian)将bsd-mailx与heirloom-mailx交换时,但是这两个“mail”命令的行为却非常不同。 (例如,传家宝使用-a作为附件,而在bsd中使用附加标题。)在我的情况下,heirloom-mailx无法可靠地确定Mime类型并不断发送文本作为附件。 责怪我不去除控制字符或任何东西,但我没有看到太多改变脚本,完成升级之前完成他们的工作的重点。 所以如果你喜欢自己设置Mimetype,bsd-mailx是一个更好的解决方案。
sudo apt-get install bsd-mailx sudo apt-get remove heirloom-mailx
为我解决了。
在基于RedHat的系统(SL,CentOS,Fedora等)上,您将需要安装bsd-mailx,然后适当地设置/ etc / alternatives / mail:
sudo yum -y install bsd-mailx sudo alternatives --set mail /usr/bin/bsd-mailx
当然,你冒险打破依赖heirloom-mailx行为的应用程序,但不明确地调用“mailx”而不是“mail”。
要显示有关/ bin /邮件的信息,当前指向:
sudo alternatives --display mail
检查各种已安装的mailx软件包:
sudo rpm -qa *mailx
在我的情况下,脚本是从cron调用的,LC_ *没有定义,口音被解释为“控制字符”。 我刚刚在我的crontab文件的开头插入了以下几行:
LC_NAME=fr_FR.UTF-8 LC_ALL=fr_FR.UTF-8