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