16

我一直在使用

 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

但是现在文件更长了,我收到了无名附件,因为这样:

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

4

5 回答 5

11

手册页是一个很好的起点!继续阅读,直到您到达该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
    
于 2012-04-27T00:33:21.440 回答
9

我最近遇到了类似的问题,最后得到了一个更短的解决方案:

cat -v log/logfile.log | mail -s "here is a log file" "person@example.com"

更多关于 cat 与 mailx 讨论的细节。

于 2013-05-07T04:07:59.473 回答
3

在基于 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/mail 当前指向的信息:

sudo alternatives --display mail

要检查各种已安装的 mailx 软件包:

sudo rpm -qa *mailx
于 2014-08-20T12:38:18.920 回答
3

更改为 Ubuntu Precise 12.04 后,我在运行自动电子邮件脚本时遇到了一些麻烦。我不知道,当 Ubuntu(或 Debian)将 bsd-mailx 与 heirloom-mailx 交换时,这两个“邮件”命令的行为非常不同。(例如 heirloom 将 -a 用于附件,而它用于 bsd 中的其他标题。)在我的情况下,heirloom-mailx 无法可靠地确定 Mime 类型并继续将文本作为附件发送。怪我没有清除控制字符或其他任何东西,但我认为更改在升级之前完美完成工作的脚本没有多大意义。因此,如果您更喜欢自己设置 Mimetype,bsd-mailx 是一个更好的解决方案。

sudo apt-get install bsd-mailx 
sudo apt-get remove heirloom-mailx

为我解决了。

于 2013-04-11T07:49:03.650 回答
2

在我的例子中,脚本是从 cron 调用的,其中 LC_* 没有定义,重音被解释为“控制字符”。我刚刚在 crontab 文件的开头插入了以下几行:

LC_NAME=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
于 2012-09-09T18:09:27.947 回答