linux邮件<;file.log的内容类型为:application/octet stream(Gmail中的noname附件)
我一直在用linux邮件<;file.log的内容类型为:application/octet stream(Gmail中的noname附件),linux,email,mailx,Linux,Email,Mailx,我一直在用 mail -s "here is a log file" "person@example.com" < log/logfile.log 但是现在文件更长了,我得到了noname附件,因为: User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 因此,如果所有其他操作都
mail -s "here is a log file" "person@example.com" < log/logfile.log
但是现在文件更长了,我得到了noname附件,因为:
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
因此,如果所有其他操作都失败,请检查手册人工邮件
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 . . .
这些选项似乎都没有用处,因此如何强制内容类型:text/plain
?手册页是一个很好的开始!继续阅读,直到到达MIME类型
部分,并密切注意以下内容:
否则,或者如果文件名没有扩展名,则内容类型
文本/普通或应用程序/八位字节流
使用,第一个用于文本或国际文本文件,第二个用于包含格式字符的任何文件
除换行符和水平制表符以外的其他执行器
因此,如果您的消息包含除换行符和制表符以外的“格式化字符”(通常指控制字符),则它将自动分类为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
在我的例子中,脚本是从cron调用的,在cron中没有定义LC_*并且重音被解释为“控制字符”。我刚刚在crontab文件的开头插入了以下几行:
LC_NAME=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
在切换到UbuntuPrecision12.04之后,我在运行自动电子邮件脚本时遇到了一些麻烦。我不知道Ubuntu(或Debian)何时将bsd mailx与Hi传家宝mailx交换,但这两个“邮件”命令的行为非常不同。(例如,在bsd中,传家宝将-a用于附件,而它用于附加标题。)
在我的例子中,Hiherloom mailx无法可靠地确定Mime类型,并一直将文本作为附件发送。责怪我没有剔除控制字符或其他什么,但我不认为在升级之前修改脚本有多大意义,因为这些脚本做得很好。
因此,如果您喜欢自己设置Mimetype,那么bsd mailx是一个更好的解决方案
sudo apt-get install bsd-mailx
sudo apt-get remove heirloom-mailx
帮我解决了 我最近遇到了类似的问题,最终得到了一个更短的解决方案:
cat -v log/logfile.log | mail -s "here is a log file" "person@example.com"
有关的详细信息。在基于RedHat的系统(SL、CentOS、Fedora等)上,您需要安装bsd mailx,然后适当设置/etc/alternations/mail:
sudo yum -y install bsd-mailx
sudo alternatives --set mail /usr/bin/bsd-mailx
当然,您可能会破坏依赖于传家宝mailx行为但不显式调用“mailx”而不是“mail”的应用程序
要显示有关/bin/mail的信息,请指向:
sudo alternatives --display mail
要检查已安装的各种mailx软件包,请执行以下操作:
sudo rpm -qa *mailx
tr-cd'\11\12\15\40-\176'man
的Linux系统上,我很难找到使用了哪个mailx
,因为mailx-V
只是打印了版本,而不是它的名称或类型。cat的-V选项非常有用,因为我无法理解为什么我无法将邮件正文作为附件接收。谢谢
sudo rpm -qa *mailx